Macro liée à une liste déroulante
Bonjour à tous.
Depuis quelques jours, je rencontre un problème sur ma macro.
Sur ma feuille Excel, j'ai une liste déroulante (validation de données) et j'ai un bouton affecté à une macro. Lorsque je clique dessus, il me demande si je veux enregistrer tout ?
Si je réponds non, seule la sélection active est enregistrée.
Si je clique oui, je souhaite qu'il m'enregistre l'ensemble des personnes de ma liste déroulante.
La fonction "non" fonctionne très bien, mais la fonction "oui" ne marche pas du tout.
J'ai tenté diverses manipulations dans ces lignes de codes sans trouver la raison du problème.
Je vous joints le fichier et la macro.
Merci d'avance pour votre aide
Sub Rapport_BC()
Dossier = "SERVEUR-ADMIN:017 REFERENT:07 Gestion d'utilisateurs:01 Rapport annuel:2016:BC:"
Fichier = Range("D1") & ".pdf"
chemin = Dossier & Fichier
ActiveSheet.PageSetup.PrintArea = "$A$2:$O$65"
choix = MsgBox("Enregistrer tout ?", vbQuestion + vbYesNoCancel + vbDefaultButton2, "Rapport_Individuel_BC")
If choix = vbCancel Then Exit Sub
If choix = vbNo Then
' enregistrer utilisateur
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=chemin
ActiveSheet.PageSetup.PrintArea = ""
Else
' enregistrer tout
Application.ScreenUpdating = False
savSelection = [D1]
For Each c In [DonnéesBC[Clé2]]
[D1] = c.Value
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=chemin
Next c
[D1] = savSelection
End If
ActiveSheet.PageSetup.PrintArea = ""
End Sub
Bonjour
Code à tester :
Sub Rapport_BC()
Dim dossier As String, fichier As String, chemin As String
Dim c As Range
dossier = "SERVEUR-ADMIN:017 REFERENT:07 Gestion d'utilisateurs:01 Rapport annuel:2016:BC:"
ActiveSheet.PageSetup.PrintArea = "$A$2:$O$65"
choix = MsgBox("Enregistrer tout ?", vbQuestion + vbYesNoCancel + vbDefaultButton2, "Rapport_Individuel_BC")
If choix = vbCancel Then Exit Sub
If choix = vbNo Then
' enregistrer utilisateur
fichier = Range("D1")
chemin = dossier & fichier
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=chemin
ActiveSheet.PageSetup.PrintArea = ""
Else
' enregistrer tout
Application.ScreenUpdating = False
For Each c In [DonnéesBC[Clé2]]
fichier = c.Value
Range("D1") = c.Value
chemin = dossier & fichier
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=chemin
Next c
End If
ActiveSheet.PageSetup.PrintArea = ""
End SubVous utilisez un MAC, donc attention à veiller à ne pas utiliser des accents dans les noms de plage ou feuilles qui sont utilisés dans le code. Le cas échéant des bugs seront constatés en cas d'utilisation du fichier sous PC windows.
Si ok, lors de votre réponse, merci de cloturer le fil en cliquant sur le V vert à coté du bouton Editer
Cordialement
Super. Merci beaucoup pour votre aide.
Je vois que vous avez rajouté des codes qui commencent par "Dim"
A quoi cela correspond-il ?
Pourriez-vous m'expliquer mon erreur ?
Grace à ce site et ce forum, je m'améliore chaque jour un peu plus avec les macros.
Paar contre, je cherche encore un endroit où sont répertoriés les codes de bases (Dim, If - then, etc...)
Mes salutations les meilleures.
re,
Je vois que vous avez rajouté des codes qui commencent par "Dim"
A quoi cela correspond-il ?
Vous n'avez pas fait d'erreur.
Les instruction DIM permettent de déclarer les variables. En gros, cela permet d'allouer un espace mémoire idéal à la variable définie et qu'excel va utiliser pour exécuter le(s) code(s).
Même si ici ce n'est pas très important pour ce petit code, c'est une bonne pratique de les déclarer
Des explications sur les variables sont disponibles dans la partie cours VBA de ce site --> https://www.excel-pratique.com/fr/vba/variables.php
petit truc : pur être sur que toutes les variables sont déclarées, il suffit de mettre en entete de module l'instruction "Option explicit"
Si besoin d'autres explications, n'hésitez pas
Cordialement