Forum Clubic

Excel - Changement contenu cellules en fonction d'une liste déroulante

Bonjour,

Je suis débutante dans la programmation, et les macros Excel. J’espère que je suis dans la bonne section et que cette question n’a pas encore été posée.

Je vous explique mon problème :

Dans la case B19 de la feuille Calendrier, j’ai inséré une liste déroulante avec un certain nombre de données (des années : 2009,2010,2011,2012…).

Je souhaiterais qu’en fonction du choix de l’année en B19, Excel insère automatiquement un certain nombre de cellules (un tableau avec les jours par année) à un endroit fixe. Je précise que j’ai déjà créé tous les tableaux à insérer pour chaque année, dans une deuxième feuille Excel. Tous les tableaux, cellules à insérer, sont identiques en nombre de cellules en horizontale et verticale. Il suffirait donc qu’Excel copie mes données de la seconde feuille, en fonction du choix en B19, et les colle dans un ‘espace bien précis’ (D15 : CP 39).

J’ai déjà essayé d’enregister une macro manuelle en faisant cette opération, mais comme j’ai plusieurs feuilles nommées calendrier, la macro fonctionne juste pour la feuille calendrier 1, mais pas pour les autres… Il me faudrait donc beaucoup de macros manuelles pour y arriver (une par année fois le nombre de calendrier)… Si je me trompe pas…

Auriez-vous un code macro qui me permettrait d’automatiser ‘l’update’ des cellules et donc d’avoir qu’une seule macro (et un seul raccourci ?)

Si mon explication n’est pas claire, je peux vous envoyer le fichier excel, cela sera peut-être plus facile.

Un grand merci d’avance pour votre aide bien précieuse. :wink:

Il faut rajouter un petit “chapeau” à ta macro manuelle, pour changer le nom de la source avec un If, en fonction deu contenu de la cellule B19.
Tu peux nous mettre ta macro ? Ce sera plus facile à expliquer

Edit :
ou plutôt deux macros (sur des tableaux différents) pour voir ce qui change de l’une à l’autre
Edité le 17/06/2009 à 08:45

Bonjour gcc,

Merci pour ta réponse.

Voici deux exemples de macro :

macro pour afficher les jours en 2009 sur la feuille horaire 1:

Sub Annuel_2009()

’ Annuel_2009 Macro
’ Macro recorded 17/06/2009 by dtroyerw

’ Keyboard Shortcut: Ctrl+n

Range(“D17:CS22”).Select
Selection.ClearContents
Range(“D26:CS31”).Select
Selection.ClearContents
Sheets(“2009”).Select
Range(“B3:CQ19”).Select
Range(“CP19”).Activate
Selection.Copy
Sheets(“Horaire”).Select
Range(“D15:Q15”).Select
ActiveSheet.Paste
End Sub

Macro pour afficher les jours en 2010 sur la feuille horaire 2

Sub Annuel_2010_2()

’ Annuel_2010_2 Macro
’ Macro recorded 17/06/2009 by dtroyerw
‘’
Range(“D17:CS22”).Select
Application.CutCopyMode = False
Selection.ClearContents
Range(“D26:CS31”).Select
Selection.ClearContents
Sheets(“2010”).Select
Sheets(“2010”).Move Before:=Sheets(14)
Range(“A3:CP19”).Select
Range(“CO19”).Activate
Selection.Copy
Sheets(“Horaire 2”).Select
Range(“D15:Q15”).Select
ActiveSheet.Paste
End Sub

Il faut savoir que j’ai 4 feuilles ‘horaire’ et que je voudrais dans un premier temps pouvoir afficher le calendrier de 4 années différentes. A l’avenir, je voudrais également rajouter des années supplémentairse. Cela fait un certain nombre de macros, avec ma solution…

J’espère que ces données pourront résoudre mon problème.

Merci d’avance pour votre aide.

Ce que tu expliques vouloir faire à l’origine ne correspond pas du tout à ce que font les macros, ni aux explications complémentaires que tu y as jointes

Donc la feuille active par defaut au momen,t où se lance la macro s’appelle Calendrier

Visiblement, ce n’est pas UNE feuille que tu as, mais une par année (2009, 2010 …)

Dans un espace précis de quelle feuille ? Calendrier, où une des multiples feuilles Horaire n qui apparaisent dans les macros ?
Et dans ce cas, pourquoi commencer chaque fois par effacer des cellules dans la feuille calendrier ?

D’autre part, pourquoi déplaces-tu la feuille 2010 au cours de l’exécution de la macro 2 ?
Edité le 18/06/2009 à 06:33

Bonjour gcc,

Désolée pour ma réponse tardive, mais j’ai eu une journée de folie hier.

Désolée que la macro envoyé ne correponsdait plus bien à ce que j’avais expliqué, mais j’avais souvent encore testé de nouvelles formules pour trouver une solution. Cet après-midi, j’enregistrerai de nouvelle macro, en tant compte de tes remarques.

Juste pour l’effacement des cellules, il me demandait à chaque si 'je voulais remplacer le contenu des cellules" et comme cela m’embêtait, je me disais qu’en effaçant le contenu de mon tableau au début il me poserait plus la question, mais ce n’est pas le cas.

Je reviens tantôt pour coller les deux nouvelles macros.

Merci d’avance et bonne journée

C’est surtout parce que tu n’écris pas dans les cellules que tu viens d’effacer

Mais on verra avec les nouvelles macros
Réexplique quand même l’organisation de tes feuilles les unes par rapport aux autres, parce que comme tu utilises la feuille 14 dans ta deuxième macro …

Bonjour Gcc,

Voilà je viens de recréer les deux macros, en repartant de la structure que j’avais décrite ci-dessus.

Petite précision, il m’arrive d’avoir des ‘ratés’ avec ma souris, et elle me sélectionne pas toujours les cases que je souhaite. C’est pour cela, que j’ai déplacé la feuille, alors que cela était tout à fait inutile. Ici, j’ai créé deux macros avec seulement toutes les actions utiles. Enfin j’espère.


Sub Annuel_2009()

’ Annuel_2009 Macro
’ Macro enregistrée le 19/06/2009 par Wendy

’ Touche de raccourci du clavier: Ctrl+n

Sheets(“Année”).Select
Range(“A3:CP19”).Select
Selection.Copy
Sheets(“Calendrier”).Select
ActiveSheet.Paste
End Sub


Sub Annuel_2010()

’ Annuel_2010 Macro
’ Macro enregistrée le 19/06/2009 par Wendy

’ Touche de raccourci du clavier: Ctrl+d

Sheets(“Année”).Select
ActiveWindow.SmallScroll Down:=16
Range(“A23:CP39”).Select
Selection.Copy
Sheets(“Calendrier 2”).Select
ActiveSheet.Paste
End Sub


Pour réexpliquer, la structure de mon classeur, j’ai 4 feuilles nommées ‘calendrier’ (calendrier, calendrier 2, …). De plus j’ai une feuille ‘Année’ sur laquelle toutes mes différentes années sont reprises. Pour l’instant, j’ai 4 années déjà créées, mais je vais devoir en rajouter rapidement. Une année correspond à un tableau de 94 cases de largeur, sur 17 cases de hauteur. En chaque tableau d’année, il y a 3 lignes inutilisables (1 espace, 1 titre (2009, 2010,…), 1 espace).

Pour l’espacement des cellules, j’ai compris que j’aurais dû vider toutes les cases et non en partie… Seulement une petite partie est commune (mois, jour) et donc ne change pas d’années en années. Je trouvais donc inutile de supprimer ce texte, mais effectivement Excel, ne sait pas que le texte est le même. Merci pour la précision. Même si je ne suis pas claire sur les raisons de mes actions, j’ai compris ma bêtise.

J’espère qu’avec ses données, tu comprendras mieux la structure du classeur, et le but exact de ma demande.

Merci beaucoup pour ton aide

C’est un peu plus clair, mais il y a une chose que tu ne précises, pas, c’est si tu vas partir à chaque fois de la feuille calendrier, même si c’est pour créer calendrier2, 3 etc.
Si elles se déduisent l’une de l’autre, par recopie, elles vont toutes avoir la cellule avec la liste déroulante, et donc en appelant Année directement depuis la feuille cible, tu pourrais utiliser une macro unique

Sub Annuel()
Sheets("Année").Range("A3:CP19").copy
ActiveSheet.Paste
End Sub

Il y a quand même deux problèmes :

  • tes deux macros recopient la même zone de Annee; donc le même calendrier ?
  • Comme tu ne précises pas de cellule cible, le Coller se fait sur la feuille calendrier à l’endroit de la cellule active.
    Or la cellule active sera la liste déroulante …