Macro activée via liste déroulante et sous condition

Fermé
Koalacid Messages postés 70 Date d'inscription vendredi 5 septembre 2014 Statut Membre Dernière intervention 8 mars 2016 - 23 juin 2015 à 09:03
Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 - 23 juin 2015 à 09:54
Bonjour,

Actuellement j'ai un code d'une macro qui sélectionne des plages pour les copier/coller. La plage est plus ou moins grande. Elle dépend d'une liste déroulante dans une cellule. Dans la liste déroulante, je choisi le mois et la macro fait le copier/coller de plusieurs plages de janvier jusqu'au mois choisi via la liste déroulante.

Problème, à chaque fois que je choisis le mois, la macro ne fonctionne pas toujours.

Je pense que c'est à cause du code sur l'évènement: si la cellule a changé alors faire blablabla les copier/coller.


Je vous joint ci-dessous le code:
(Je ne met que le début pour éviter de vous assomer avec toutes les parties qui se répètent soit l'ouverture des différentes prev pour les copier/coller)

Sub Worksheet_Change(ByVal Target As Range)


' Verification que c'est la cellule C2 qui a changé
If Not Intersect(Target, Range("C2")) Is Nothing Then
' et si c'est le cas :
' Ouverture de la Prévision Machin
Workbooks.Open Filename:="R:\Revue client\Prévision_Vol_2011\Prévision_Vol_Machin.xlsm"
Sheets("Vol_SKU_COLS_SAISI").Select
' recherche de la colonne du mois choisi en C2 dans la plage ligne 5
' la fonction Match trouve la 1ere occurence du mois et on ajoute 1 pour obtenir la colonne suivante

Workbooks("Update Vol prev").Sheets("Prev Calculée").Activate
col = Application.WorksheetFunction.Match(ActiveSheet.Range("C2"), ActiveSheet.Range("A5:AC5"), 0) + 1
' selection de la plage à copier dans la feuille active et copie
ActiveSheet.Range(Cells(8, 6), Cells(86, col)).Select
Selection.Copy
' selection de la 1ere cellule où coller dans la page dans la page active et collage
Workbooks("Prévision_Vol_Machin.xlsm").Sheets("Vol_SKU_COLS_SAISI").Activate
ActiveSheet.Range("GP7").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
ActiveWorkbook.Close SaveChanges:=True


Il y a tout d'abord un point que je ne comprend pas, pourquoi ce code est enregistré dans un "Microsoft Excel Object" et pas dans un module? Qu'est-ce ça change?

Est-ce que vous pouvez me dire si l'utilisation de ce code est adaptée (et si oui, alors qu'est-ce qui ne fonctionne pas sur ce code)?

Et s'il n'est pas adapté alors...je suis un peu perdu, qu'est-ce que j'aurais du faire et pourquoi?


Je suis entièrement à votre écoute et souhaite apprendre plus donc n'hésitez pas à ajouter beaucoup d'explication.

Cordialement,

Koalacid

A voir également:

1 réponse

Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 523
23 juin 2015 à 09:54
Bonjour,

La procédure Worksheet.Change utilisée est une procédure évènementielle qui se lance lorsqu'une modification est détectée dans la feuille. Cette procédure s'applique donc à la feuille concernée et doit être enregistrée dans son module propre.

"Problème, à chaque fois que je choisis le mois, la macro ne fonctionne pas toujours. "
Ton code ne semble pas poser de problème particulier.
Sans fichier exemple pour faire un test et sans autres explications pour comprendre le dysfonctionnement, il va être difficile de t'aider.
Il te faut chercher pourquoi la fonction Match ne trouve pas le mois dans la plage A5:AC5, c'est à dire comparer la valeur de C2 et la valeur correspondante dans la plage de recherche lorsque tu constates un mauvais résultat.

A+
0