Géneration automatique d'étiquette en fonction d'une liste

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

zaphe84

XLDnaute Nouveau
Bonjour à tous, je n'ai aucune formation que ce soit sur excel mais normalement je me débrouille quand même pour faire de bon programme en marco. Aujourd'hui J'ai un petit soucis avec une loop qui ne fonctionne pas comme je veux. Le but du fichier est que l'opérateur entre des numéros de pièces dans un tableau et ensuite selectionne avec une checkbox les étiquettes qu'il veut imprimer soit en rouge soit en jaune. j'ai mit mon fichier en pièce jointe pour une meilleur compréhension. J'ai créé une loop mais elle ne fonctionne pas bien. aussi j'ai associé mes checkbox 2 par 2 en leur donnant le non de jauneX et rougeX en fonction de la ligne où elle se trouve. J'aimerai que cette relation soit semblable pour chaque ligne sans avoir à entrer 93 fois la même macro.

voici mes code:

checkbox:

Private Sub Jaune7_Click()
If Jaune7.Value = True Then
Range("K7") = "Jaune"
Rouge7.Value = False
Else
If Jaune7.Value = False And Rouge7.Value = False Then
Range("K7") = ""
End If
End If
End Sub
Private Sub rouge7_Click()
If Rouge7.Value = True Then
Range("K7") = "Rouge"
Jaune7.Value = False
Else
If Jaune7.Value = False And Rouge7.Value = False Then
Range("K7") = ""
End If
End If
End Sub


et pour la génération des étiquettes:

Sub gener()



For lin = 7 To 93

If Range("k" & lin) = "Jaune" Then

Sheets("Jaune").Copy After:=Sheets(Sheets.Count)


ActiveSheet.Name = Sheets("Donnée").Range("C" & lin)

Range("C7") = [donnée!C2] 'W/O
Range("C8") = [donnée!C3] 'Engine Type
Range("C9") = Sheets("Donnée").Range("B" & lin) 'Description
Range("C10") = Sheets("Donnée").Range("B" & lin) 'Part Number
Range("C11") = Sheets("Donnée").Range("D" & lin) 'Serial Number
Range("B14") = Sheets("Donnée").Range("E" & lin) 'TSN
Range("F14") = Sheets("Donnée").Range("F" & lin) 'CSN
If Sheets("DONNÉE").CheckBox173.Value = True Then
Range("C13") = "X"
Else
If Sheets("DONNÉE").CheckBox174.Value = True Then
Range("G13") = "X"
End If

'ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
'IgnorePrintAreas:=False
ActiveWindow.SelectedSheets.Delete
End If

Else

If Range("k" & lin) = "Rouge" Then

Sheets("Rouge").Copy After:=Sheets(Sheets.Count)


ActiveSheet.Name = Sheets("Donnée").Range("C" & lin)

Range("C7") = [donnée!C2] 'W/O
Range("C8") = [donnée!C3] 'Engine Type
Range("C9") = Sheets("Donnée").Range("B" & lin) 'Description
Range("C10") = Sheets("Donnée").Range("B" & lin) 'Part Number
Range("C11") = Sheets("Donnée").Range("D" & lin) 'Serial Number
Range("B14") = Sheets("Donnée").Range("E" & lin) 'TSN
Range("F14") = Sheets("Donnée").Range("F" & lin) 'CSN
If Sheets("DONNÉE").CheckBox173.Value = True Then
Range("C13") = "X"
Else
If Sheets("DONNÉE").CheckBox174.Value = True Then
Range("G13") = "X"
End If
End If
End If


'ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
'IgnorePrintAreas:=False
ActiveWindow.SelectedSheets.Delete
End If
Next lin

End Sub
J'espère ne pas trop vous découragé étant donné que mes code sont surement très loin des standard habituelle.

Merci
 

Pièces jointes

Re : Géneration automatique d'étiquette en fonction d'une liste

Bonjour le Forum,

D'après ton code, dans la procédure Sub gener, tu fais boucler de 7 à 93 alors qu'il n'y a que 3 feuilles. Il va demander 86 la suppression des feuilles qui n'existent pas
ActiveWindow.SelectedSheets.Delete

EDIT Méthode la plus simple pour sortir de la boucle :
Code:
If lin > Sheets.Count Then Exit Sub
ActiveWindow.SelectedSheets.Delete

A+ Jack2
 
Dernière édition:
Re : Géneration automatique d'étiquette en fonction d'une liste

Merci beaucoup pour la solution des 86 demandes de suppression ça fonctionne bien et j'apprécie beaucoup.

Mon code ne génère qu'une seulle étiquette basé sur les informations de la première ligne, je n'arrive pas a comprendre pourquoi il ne refait pas le même excercise avec chacunes de mes lignes jusqu'a 93.
 
Re : Géneration automatique d'étiquette en fonction d'une liste

Bonjour zaphe84, bonjour le forum,

J'avais oublié que tu voulais également imprimer, j'ai modifié le code en conséquence. Si tu souhaites d'abord créer tes étiquettes puis les imprimer ultérieurement tu mets les lignes suivantes en commentaires :
Code:
ActiveSheet.PrintOut Copies:=1
ActiveSheet.Delete
Puis tu lance la procédure imprimer.

Je m’aperçois que je ne connais pas la façon de récupérer correctement toutes les valeurs de tes checkbox. Toute aide est la bienvenue.

De même, il existe un moyen de sélectionner toutes les feuilles à imprimer pour éviter une boucle. C'est quelque chose du type Sheets(Array("Feuil1","Feuil2"...)). Je vais essayer de trouver si c'est possible à réaliser, sauf si quelqu'un a une idée.


A+Jack2
 

Pièces jointes

Re : Géneration automatique d'étiquette en fonction d'une liste

Wow, t'es mon héro. Tu as aucune idée a quel point ton aide est appréciée. je viens de tester et ça fonctionne à merveille. Maintenant je vais relir ce que tu as encodé et tenter d'en comprendre et d'en apprendre le plus possible.

Merci infiniment.

pour les checkbox, je vais les encodé 93 fois. C'est pas si grave mais je vais quand même garder un oeil sur ce thread pour voir si une personne n'aurait pas une solution pour les prochaine fois.

Merci encore
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
479
Réponses
4
Affichages
177
Réponses
4
Affichages
461
Réponses
2
Affichages
153
Réponses
10
Affichages
281
Retour