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,

ky04

Lorsque j'appuirais sur mon nouveau bouton "+" j'obtiens une nouvelle colonne que je renomme à ma guise :

f5kb

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

Rechercher des sujets similaires à "vba ajout automatique colonnes via userform"