VBA - Ajout automatique de colonnes via USERFORM
Bonjour à vous,
Je m'adresse à vous car je débute en VBA, et je m'exerce en essayant de créer un formulaire de saisie pour une petite société de vente. (C'est mon 1er, soyez indulgents
Mon but est que l'utilisateur n'ai "pas à réfléchir" même s'il ne connait pas bien excel.
J'ai donc créé le bouton du formulaire "userform" en haut en rouge, et un bouton orange pour effacer les lignes.
Le formulaire est assez classique, rien de particulier. J'ai par contre intégré le fait que lorsque le titre de la colonne est modifié, l'intitulé associé dans le userform est modifié aussi pour que la personne l'utilisant ait un maximum de flexibilité.
J'aimerais pousser cette flexibilité encore plus loin en ajoutant un bouton "+" et "-" (pour faire simple) sur mon userform afin que ce dernier ajout une colonne ou ne la supprime. Pour cela il faut aussi que cela ajoute une case automatiquement sur mon userform. (Même si je dois faire une fenêtre avec mal pas de vide en premier lieu). Voici un petit exemple de ce que je souhaite faire pour que ce soit plus parlant.
Si je pars initialement avec un tableau possédant 6 colonnes et 6 objets associés dans mon userform,
Lorsque j'appuirais sur mon nouveau bouton "+" j'obtiens une nouvelle colonne que je renomme à ma guise :
J'imagine que j'aurais besoin d'une boucle avec une variable et des nom plus simples pour intégrer une variable dans ma boucle (TextBox_i) avec une variable i et une boucle i+1 pour l'ajout de ma colonne etc...
Est-ce que quelqu'un aurait une idée de ce que je pourrais faire (et si c'est faisable) ?
Ça fait 3 jours que je bûche là dessus et je n'ai malheureusement rien trouvé sur le net
Je vous remercie par avance pour votre aide.
PS : Je mets mon formulaire en fichiers joints pour les curieux
Bonjour
Si vous modifiez votre code comme ceci
Private Sub UserForm_Initialize()
Dim i As Byte, dlg As Byte
dlg = Sheets("Liste").Range("B" & Sheets("Liste").Rows.Count).End(xlUp).Row
For i = 1 To dlg - 2
Me.Controls("Label" & i) = Sheets("Liste").Range("B" & i + 2)
Next i
End Sub
faites un essai..
Autre chose, dans la sub Annulation, enlevez la ligne UserForm.Hide
Cela revient à cacher l'userform à l'arrière plan et de surcroit dans votre cas elle ne sert à rien vu qu'elle vient après avoir déchargé l'userform.
Cordialement
Whaaaa !
Ce code simplifie tout !
Je serais curieux d'en avoir une petite explication si ce n'est pas trop demander.
Private Sub UserForm_Initialize()
Dim i As Byte, dlg As Byte
dlg = Sheets("Liste").Range("B" & Sheets("Liste").Rows.Count).End(xlUp).Row
For i = 1 To dlg - 2
Me.Controls("Label" & i) = Sheets("Liste").Range("B" & i + 2)
Next i
End Sub
Les thermes "dlg" et le ".count" ne me disent rien.
J'ai aussi enlevé le .hide qui en effet n'avait pas vraiment d'utilité au final. Un grand merci à vous.
Pour le reste je vais continuer de bidouiller en attendant de trouver quelque chose ou que quelqu'un trouve une solution à mon problème
re
Les thermes "dlg" et le ".count" ne me disent rien.
1. dlg
Il s'agit d'une variable que j'utilise dans la boucle plus bas. La variable permet de connaitre la dernière ligne possédant une valeur dans la colonne B
2. Count
Il s'agit de l'instruction "Compter"
Sheets("Liste").Rows.count permet de connaitre le nombre de lignes de la feuille
Pour comprendre mettez ceci dans la macro
msgbox Sheets("Liste").Rows.count
dlg = Sheets("Liste").Range("B" & Sheets("Liste").Rows.Count).End(xlUp).Row
Msgbox dlg
Cordialement