[VBA] Boucle sur label
Bonjour à tous,
Je viens vers vous avec mon niveau inexistant en VBA et demande un peu d'aide pour terminer mon programme svp ...
Sub Imprimer_étiquette()
Dim P As Range
Dim n As Integer
Dim d As Integer
Dim i As Integer
Dim j As Integer
On Error Resume Next
Set P = Application.InputBox("Sélectionnez les fournitures à étiquetter (max 4) :", Type:=8)
If P.Rows.Count > 4 Then MsgBox "Veuillez choisir maximum 4 fournitures par impression"
n = P.Rows.Count - 1
d = P.Row
For j = 1 To 16 Step 5
For i = d To n + d
Sheets("Etiquette").Controls("Label" & j).Caption = ThisWorkbook.Worksheets("Inventaire").Cells(i, 4).Value
Sheets("Etiquette").Controls("Label" & 1 + j).Caption = ThisWorkbook.Worksheets("Inventaire").Cells(i, 5).Value
Sheets("Etiquette").Controls("Label" & 2 + j).Caption = ThisWorkbook.Worksheets("Inventaire").Cells(i, 1).Value
Sheets("Etiquette").Controls("Label" & 3 + j).Caption = ThisWorkbook.Worksheets("Inventaire").Cells(i, 6).Value
Sheets("Etiquette").Controls("Label" & 4 + j).Caption = ThisWorkbook.Worksheets("Inventaire").Cells(i, 7).Value
Next i
Next j
On Error GoTo 0
If P Is Nothing Then MsgBox "Sélection annulée"
End Sub
La boucle s'effectue mais les labels ne veulent pas se modifier
Première fois que je poste ici
Il y a t'il quelqu'un ?
Bonjour,
Il y a t'il quelqu'un ?
L'apéro, le repas, la sieste ça compte aussi... !
Si tu mets des On Error Resume Next partout, tu as effectivement beaucoup de chance pour qu'il ne se passe rien...
Hum... C'est compliqué ton truc ! ¨Pourquoi utiliser des contrôles que tu ne maîtrises pas au lieu d'écrire directement dans les cellules que TAKA mettre au bon format ?
Si on veut se risquer à un minimum d'explication et en enlevant le On Error Resume Next... on voit que :
Sheets("Etiquette").Controls("...") 'ça ne marche pas.(Controls c'est réservé aux UserForm)
Avec Sheets("Etiquette")... Ce qui marche bien c'est Shapes...
Après le problème c'est que j'ai dénombré pas moins de 68 Shapes dans cette feuille. (dont le premier "Label" à l'index 49)
Seulement l'histoire c'est que cette Shape à comme Caption "Label1" et tu l'as même renommé Label1...
Sauf que le renommer Label1 n'en fait pas un Label, ni même un Control : ça reste un Shape (Contrôle de formulaire Ex : "Etiquette 1"
Bon de toute façon ça n'aurait pas mieux marché avec un Label (issu de ActiveX) puisque Sheets les reconnait aussi comme des Shapes.
Donc je sais pas trop quoi te dire : C'est tordu ton truc. Ça c'est sur !
Je pense que le mieux c'est de supprimer tous ces contrôles qui ne servent à rien et de formater tes cellules à la taille de tes étiquettes, C'est pas simple mais on y arrive même quand on est débutant :
Dans mes débuts je m'amusais comme ça pour faire mes étiquettes quand je ne voulais pas utiliser Word pour des minis travaux...
Parce que la syntaxe exacte pour gérer ces Shapes en VBA... Ben, heu... C'est pas ma tasse de thé ! Mébon p'tre que tu trouveras quelqu'un qui fait des trucs comme ça...
A+
Merci Galopin pour ta réponse !
Je connais vraiment pas grand chose en Excel on va dire que c'est un début
Donc si j'ai bien compris, j'ai utilisé des active X qui ne sont pas appropriés à l'usage que je souhaite avoir ?
Donc j'aurai du utiliser une étiquette (contrôle de formulaire) depuis le début ?
Thanks
Non tu peux bien utiliser ce que tu veux. Mais inutile de renommer ces contrôles.
Quel que soit le contrôle utilisé, tu ne peux pas utiliser l'objet Controls dans l'expression Worksheets("blabla").Controls
Mais je ne t'en dirai pas plus car -utilisés dans une feuille- la syntaxe de ces objets est rébarbative, donc peu utilisée et je ne m''y suis jamais attardé.
A+