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

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

  • 13-SC francis.xlsm
    261.1 KB · Affichages: 50

Jack2

XLDnaute Occasionnel
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:

zaphe84

XLDnaute Nouveau
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.
 

Jack2

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

Bonsoir zaphe84, Bonsoir le forum,

A tester si ça correspond à ce que tu souhaites. Je regarde demain le test IFF des checkbox en civil, non civil.

A+ Jack2
 

Pièces jointes

  • zaphe84.xls
    237.5 KB · Affichages: 32

Jack2

XLDnaute Occasionnel
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

  • zaphe84_1.xls
    244.5 KB · Affichages: 44

zaphe84

XLDnaute Nouveau
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
 

Statistiques des forums

Discussions
312 836
Messages
2 092 653
Membres
105 479
dernier inscrit
chaussadas.renaud