Remplir tableau dynamique Userform

[Résolu/Fermé]
Signaler
Messages postés
176
Date d'inscription
dimanche 1 mars 2009
Statut
Membre
Dernière intervention
27 octobre 2016
-
Messages postés
176
Date d'inscription
dimanche 1 mars 2009
Statut
Membre
Dernière intervention
27 octobre 2016
-
Bonjour à tous,

Je cherche à récupérer un ensemble d'entier que l'utilisateur entre dans un userform que j'ai créé. J'ai donc fait un tableau dynamique, et je souhaite entrer les valeurs au fur et à mesure (à chaque fois que l'on clique sur le bouton "ajouter").

J'ai donc le code suivant dans mon userform
Public fin_entrez_val as Booleen

Private Sub BoutonAjouter_Click()
rep_userform = TextBox1 'je stock la réponse entrée dans "rep_userform"
TextBox1 = "" 
End Sub

Private Sub BoutonAetF_Click() 'ce bouton doit enregistrer la dernière valeur puis fermer l'userform
rep_userform = TextBox1
fin_entrez_val = True
Unload Me
End Sub


et dans la macro elle-même, j'ai la routine suivante

Dim tab_val_pos() as Integer
Dim fin_entrez_val as Booleen
fin_entrez_val = False

Public Sub ask_val()

Dim compt As Integer
compt = 0

'Je veux ici enregistrer les valeurs dans le tableau à chaque clic du bouton ajouter, et sortir de la boucle une fois que l'on a cliqué sur le bouton AetF
Do
boite_diag.Show
ReDim Preserve tab_val_pos(compt)

tab_val_pos(compt) = rep_userform 'valeur entrée dans la boite de diag
compt = compt + 1
Loop While (fin_entrez_val = False)

fin_ask_val = True 'un booleen qui sert dans une autre macro, sans importance ici
End Sub



Le problème est le suivant : mon userform est impossible à fermer. Quand je clic sur A&F, il se réouvre, comme si le booleen fin_entrez_val était toujours à False au lieu de passer à True avant la fermeture (et donc faire sortir de la boucle do while)

J'ai essayé avec une boucle While, en déclarant fin_entrez_val dans la macro (toujours en public) mais pas de réusltat.

J'espère que c'est assez clair. Merci d'avance pour votre aide,



ezor

2 réponses

Messages postés
33147
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
29 juillet 2021
3 641
Bonjour,

Tu dois déclarer ta variable de FIN en public et non dans la fonction elle même.
https://silkyroad.developpez.com/VBA/LesVariables/#LV

.

Messages postés
176
Date d'inscription
dimanche 1 mars 2009
Statut
Membre
Dernière intervention
27 octobre 2016
10
merci pour ta réponse.
Elle est déjà en public, dans la "zone" de déclaration.

EDIT : elle n'était effectivement pas dans un module mais dans la page de la "feuille 1". Je vais voir en changeant ça.
Messages postés
176
Date d'inscription
dimanche 1 mars 2009
Statut
Membre
Dernière intervention
27 octobre 2016
10
ça semble fonctionner. Merci pour ton aide.
Si tu peux me dire en plus d'où vient "l'incompatibilité de type" qui m'est retourné quand je sors, alors ce sera parfait ;)
Messages postés
176
Date d'inscription
dimanche 1 mars 2009
Statut
Membre
Dernière intervention
27 octobre 2016
10
J'ai un deuxième problème, toujours avec le même programme. Je n'enregistre que la dernière valeur rentrée, car c'est seulement en quittant le Userform que je re-rentre dans ma boucle do-while (en d'autre terme, mon compteur ne va que jusqu'à 1).

Y a t il une solution pour assurer l'aller retour entre la macro (la boucle do-while) et l'userform (le clic sur l'un des boutons?)

merci
Messages postés
33147
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
29 juillet 2021
3 641
Lorsque la macro s'arrête... les variables se vident...
Il ne te reste qu'à sauvegarder ta variable dans une feuille cachée de ton classeur et aller la rechercher à chaque fois que tu réouvres ton userform.
Messages postés
176
Date d'inscription
dimanche 1 mars 2009
Statut
Membre
Dernière intervention
27 octobre 2016
10
la macro globale (celle qui gère l'ouverture de l'userform entre autre) ne s'arrete pas, et la valeur du champ de saisie est enregistrée dans une variable public d'un module. Et c'est justement cette variable que je veux stocker à chaque fois dnas un tableau