Rafraichir une variable VBA

Bonjour,

je cherche à afficher une liste d'utilisateurs dans une frame répertorié dans ma colonne A de ma feuille commençant en A2 (cette liste risque d'être agrandi par la suite). J'essaye de passer par un compteur avec une variable i cependant celle-ci ne s'actualise pas lorsque j'agrandi la liste de la feuille. Des idées ? Je débute en VBA

Private Sub BTN_ADD_Click()
Dim i As Integer
i = 2
While Feuil1.Cells(i, 1) <> ""
    With FRM_ADD.LST_ADD_UTI
        .AddItem Worksheets("Feuil1").Cells(i, 1)
    End With
    i = i + 1
Wend
FRM_ADD.Show
' affiche la liste des utilisateurs actuelles
End Sub

Bonjour,

On suppose qu'il s'agit d'alimenter une listbox sur une userform ...?

...cependant celle-ci ne s'actualise pas lorsque j'agrandi la liste de la feuille ...

comment procédez vous exactement ? sortez vous de la userform lorsque vous saisissez de nouvelles données en colonne A ?

A+

Bonjour AlgoPlus,

Effectivement il s'agit d'alimenter une listebox sur un Userform. Ma liste serait toujours dans la colonne A de la feuille 1 mais serait modifié par un Userform, l'ajout clôturerait l'Userform ensuite (mais cela fait avec un autre bouton)

Si je peux préciser mon problème, j'ai fais des tests mais ma variable ""i" ne s'indente que deux fois pour une raison que j'ignore, je n'affiche donc que deux éléments de ma liste correctement

Rebonjour,

Il semblerait que ce soit une autre partie de mon Userform qui bloque le nombre d'indentation, mais sinon cela fonctionne à peu près comme je le souhaite.

Désolé pour le dérangement, mais j'ai encore un soucis de compréhension sur la fonction :

Listbox.ListIndex

Si j'écris :

i = UserForm1.Listbox1.ListIndex

et que j'ai sélectionné le 4ème élément de ma Listbox, alors i = 4 ?

J'aimerais récupérer l'indice de l'élément sélectionner dans ma Listbox d'une colonne et je sèche alors que cela ne doit pas être sorcier .

Bonjour je suis pas sur d'avoir tout compris mais ce ne serait pas en passant par une boucle qu'on alimente votre liste ?

Private Sub BTN_ADD_Click()
'On déclare la variable derligne (dernière ligne de la liste colonne A de feuille 1
Dim derligne as long
derligne = Worksheets("feuil1").Range("A65536").End(xlUp).Row

'On boucle de la ligne 2 à derligne
For i=2 to derligne
    With FRM_ADD.LST_ADD_UTI
        .AddItem Worksheets("Feuil1").Cells(i, 1)
    End With
next i

FRM_ADD.Show
' affiche la liste des utilisateurs actuelles
End Sub

Bonjour Xmenpl,

effectivement c'est ce que je cherche à faire mais en terme de Calcul ma boucle While ne va telle pas plus vite ? Ma liste étant une suite d'élément sans cellule "vide"" je ne parcours donc pas toute la colonne ?

Amicalement

Bonjour,

Juste par rapport à votre dernière question (qui ne concerne pas le sujet de votre demande initiale je pense)

i = UserForm1.Listbox1.ListIndex

et que j'ai sélectionné le 4ème élément de ma Listbox, alors i = 4 ?

Non, i = 3 car la première ligne de votre list renvoie 0

J'aimerais récupérer l'indice de l'élément sélectionner dans ma Listbox d'une colonne

Si vous voulez récupérer un item spécifique dans la colonne 1 par exemple

Me.ListBox1.List(ListBox1.ListIndex, 1)

Cordialement

Bonjour à tous,

la boucle la plus rapide est celle qui n'existe pas :
ListBox1.List = [A2].Resize(Cells(Rows.Count, 1).End(xlUp).Row - 1).Value
eric

PS : Xmenpl ne parcours pas toute la colonne. Regarde son code, il chercher d'abord la dernière ligne utilisée. Ce que je fais aussi

Bonjour Eriiic,

Merci pour ta réponse, effectivement je ne m'était pas penché sur comment fonctionnait sa recherche de dernière ligne. Mon Sub marche correctement maintenant grâce à vous tous.

Je ne sais pas si c'est d'usage, mais un autre problème me vient en lien avec ce même projet (écho de ma question qui n'avait rien avoir avec). Lorsque j'essaye de supprimer un élément de ma liste, mon Listindex ne fonctionne pas correctement (ici ma variable K). J'ai beau faire un test lorsque je sélectionne n'importe quelle valeur, K me retourne 0 (screen et partie du code problématique)

Private Sub ADD_supprimer_Click()
Dim K As Integer
K = FRM_ADD.LST_ADD_UTI.ListIndex
If K = -1 Then
Exit Sub 's'il n'y a aucune sélection, on ne fait rien
ElseIf MsgBox(("Etes vous sur de vouloir supprimer l'utilisateur " & FRM_ADD.LST_ADD_UTI.Text & " ?"), vbYesNo + vbInformation, "Demande de confirmation") = vbYes Then
        'Feuil1.Cells(K + 1, 1).Delete 'Volontairement mis en commentaire
        MsgBox K
        MsgBox ("l'utilisateur " & FRM_ADD.LST_ADD_UTI.Text & " a été supprimé !")
        Call BTN_CANCEL_Click
End If
End Sub
image

Bonjour

Lorsque j'essaye de supprimer un élément de ma liste, mon Listindex ne fonctionne pas correctement

K= .....listindex ne va rien donner. Essayez ceci au début du code :

Dim K as integer
For K = 0 To ListBox1.ListCount - 1
    If ListBox1.Selected(K) Then
        ListBox1.RemoveItem(K)
    End If
Next K

Bonjour DAN,

Merci pour ta réponse, en faite je m'obstine à essayer de récupérer la position de la sélection dans la liste car j'aimerais supprimer l'élément directement dans ma feuille et non dans la Listbox. Mais effectivement c'est quelque chose de ce genre la.

Possible de voir votre fichier ?

Sinon un code du genre

Dim ligne As String
ligne = ListBox1.ListIndex
Feuil1.Cells(ligne + 1, 1).Delete
End Sub

J'aurais du faire cela plus tôt, je sèche un peu la

6test.xlsm (25.13 Ko)

Il y a deux userform dans le fichier dont une vide. Normal ?

Oui, je n'ai pas encore eu le temps de l'avancer. J'ai seulement créer un Userform qui me servira à terme de créer/gérer cette fois-ci un produit.

Ok. Bon en regardant votre fichier, voici le code pour la suppression

Private Sub ADD_supprimer_Click()
Dim Ligne As String

Ligne = LST_ADD_UTI.ListIndex + 2

If LST_ADD_UTI.ListIndex = -1 Then
    Exit Sub 's'il n'y a aucune sélection, on ne fait rien
ElseIf MsgBox(("Etes vous sur de vouloir supprimer l'utilisateur " & FRM_ADD_UTI.LST_ADD_UTI.Text & " ?"), vbYesNo + vbInformation, "Demande de confirmation") = vbYes Then
        Feuil1.Cells(Ligne, 1).Delete
        MsgBox ("l'utilisateur " & FRM_ADD_UTI.LST_ADD_UTI.Text & " a été supprimé !")
        Call BTN_CANCEL_Click
End If
End Sub

Autre chose à faire dans votre fichier

1. Allez dans la feuille 1 et remplacez le code par celui ci

Private Sub BTN_ADD_UTI_Click()
FRM_ADD_UTI.Show
End Sub

2. Allez dans votre userform FRR-ADD-UTI et ajoutez ce code

Private Sub UserForm_Initialize()
'On déclare la variable derligne (dernière ligne de la liste colonne A de feuille 1
Dim derligne As Long
derligne = Worksheets("feuil1").Range("A65536").End(xlUp).Row
'On boucle de la ligne 2 à derligne
For i = 2 To derligne
    With FRM_ADD_UTI.LST_ADD_UTI
        .AddItem Worksheets("Feuil1").Cells(i, 1)
    End With
Next i
End Sub

3. Toujours dans votre userform - code Private Sub BTN_CANCEL_Click(), remplacez la ligne FRM_ADD_UTI.Hide par ceci

Unload FRM_ADD_UTI

Hide est utilisé lorsque vous voulez cacher une userform mais elle reste à l'arrière plan...

Cordialement

Merci a vous tous pour votre aide, mention spécial à Dan pour cette aide digne d'un super-héros pour mon dernier soucis. Je me sens ridicule de ne pas avoir réussi cela tout seul, mais bon j'ai appris bien plus rapidement grâce à vous.

Au plaisir de vous recroiser sur le forum.

Re,

pourquoi tu continues avec ta boucle alors que je te proposais la même chose sans boucle, en une seule ligne de code ?
eric

Bonjour Eriiic,

Je ne serais trop comment te l'expliquer mais j'ai l'impression de mieux comprendre pour l'instant avec la façon que j'ai garder (parallèle avec "python" en tout cas dans ma tête que je maitrise un peu mieux), je vais essayer de me pencher un peu plus sur le fonctionnement de ta proposition afin de l'utiliser dans un futur proche.

Bonjour

C'est vrai que je n'avais pas fait attention à la proposition d'Eriiic lors de ma proposition... et à éviter votre boucle For i, mais dans mon dernier post, vous pouvez remplacer la private sub initialize par ceci

Private Sub UserForm_Initialize()
LST_ADD_UTI.List = [A2].Resize(Cells(Rows.Count, 1).End(xlUp).Row - 1).Value
End Sub

ou ceci

Private Sub UserForm_Initialize()
LST_ADD_UTI.List = Range("A2:A" & Range("A" & Rows.Count).End(xlUp).Row).Value
End Sub

C'est plus court en code et plus rapide que de passer par une boucle

Cordialement

Rechercher des sujets similaires à "rafraichir variable vba"