Inputbox qui s'ouvre 3 fois au lieu d'une...
Résolu
jeanphy_
Messages postés
8
Statut
Membre
-
melanie1324 Messages postés 1561 Statut Membre -
melanie1324 Messages postés 1561 Statut Membre -
Bonjour a tous!
ca fait qq semaines que j'ai commence a programmer en VBA pour un stage. jusque la j'ai tjrs reussi a me debloquer en regardant des topics d'aide sur internet, mais la impossible.
du coup je viens solliciter votre aide! (petite precision je suis neophite en programmation VBA)
contexte:
au sein d'un userform j'ai une combox list rempli a partir d'un range sur une feuille excel. lorsque l'on click sur l'une des lignes de la combo, une inputbox apparait pour demander a l'utilisateur de renseigner l'information relative a la ligne. Une fois l'information recuperee, elle est ecrite sur la ligne voulu de ma plage de donnee.
voici mon probleme:
lorsque j'effectue le code ci dessous l'inputbox s'ouvre comme je le souhaite une premiere fois, prend en compte ce que je lui dit quand je clique sur ok, l'ecrit correctement la ou il faut dans ma plage, mais une fois cela fait, la box se reouvre deux fois de suite...
l'erreur vient de la ligne de code qui ecrit le contenu de la variable InputBox_Result dans la cellule que je souhaite. mais impossible pour moi d'en comprendre la raison...
voici mon code epure de tout ce qui n'a rien a voir:
(j'ai pas trouve comment mettre en PJ mon fichier excel)
merci d'avance pour votre aide genereuse!
ca fait qq semaines que j'ai commence a programmer en VBA pour un stage. jusque la j'ai tjrs reussi a me debloquer en regardant des topics d'aide sur internet, mais la impossible.
du coup je viens solliciter votre aide! (petite precision je suis neophite en programmation VBA)
contexte:
au sein d'un userform j'ai une combox list rempli a partir d'un range sur une feuille excel. lorsque l'on click sur l'une des lignes de la combo, une inputbox apparait pour demander a l'utilisateur de renseigner l'information relative a la ligne. Une fois l'information recuperee, elle est ecrite sur la ligne voulu de ma plage de donnee.
voici mon probleme:
lorsque j'effectue le code ci dessous l'inputbox s'ouvre comme je le souhaite une premiere fois, prend en compte ce que je lui dit quand je clique sur ok, l'ecrit correctement la ou il faut dans ma plage, mais une fois cela fait, la box se reouvre deux fois de suite...
l'erreur vient de la ligne de code qui ecrit le contenu de la variable InputBox_Result dans la cellule que je souhaite. mais impossible pour moi d'en comprendre la raison...
voici mon code epure de tout ce qui n'a rien a voir:
(j'ai pas trouve comment mettre en PJ mon fichier excel)
' initialisation de la liste box a l'ouverture du userform dans lequel elle est:
Private Sub UserForm_Initialize()
' initialisation of the listbox columns
ListBox_Device.ColumnCount = 5
ListBox_Device.ColumnWidths = "250;80;90;60;30"
' the list box is fill up according to the step1
'la liste box est remplie par la plage "ListBox_Range_Step1"
ListBox_Device.RowSource = "ListBox_Range_Step1"
' la plage en question a deux colonnes. sur la premiere il y a sur 3 lignes des choses d'ecrites (nom client, num affaire,...). la deuxieme colonne est vide. elle doit recevoir les donnees rentrees par l'utilisateur par l'intermediaire de la box.
End Sub
' routine lancee lors de la selection d'une des ligne de la listbox "ListBox_Device"
Private Sub ListBox_Device_Click()
Dim i As Byte
Dim InputBox_Result As String ' declaration de la variable de retour de l'inputbox
For i = 0 To 2 'je fais tourner mon bazarre sur les lignes 1 a 3 de la plage. cad la ligne 0 a 2 dans la listbox
If ListBox_Device.Selected(i) = True Then
InputBox_Result = InputBox(ListBox_Device.Value & " ?", "") ' ListBox_Device.Value affiche donc le texte de la premiere colonne de la plage ListBox_Range_Step1
If InputBox_Result = "" Then
Else
' j'ecris sur la ligne selectionnee et sur la colonne numero 2 de la plage la valeur que vient de rentrer l'utilisateur dans la box.
Worksheets("MMF Configurator").Range("ListBox_Range_Step1").Cells(i + 1, 2).Value = InputBox_Result
End If
Exit Sub
End If
Next i
End Sub
merci d'avance pour votre aide genereuse!
A voir également:
- Inputbox qui s'ouvre 3 fois au lieu d'une...
- Ai suite 3 - Télécharger - Optimisation
- Voir un lieu en direct par satellite - Guide
- Picasa 3 - Télécharger - Albums photo
- Je suis une chose que les garçons utilisent 2 fois par jour et les filles une fois dans leur vie - Forum Loisirs / Divertissements
- Trouver un lieu avec coordonnées gps - Guide
10 réponses
Bonjour,
Pour mieux comprendre, appuies sur F8 (pas à pas détaillé), tu verras comment ta macro fonctionne
Ton inputbox s'ouvre 3 fois parce que tu lui demandes 3 fois de s'ouvrir :
'de i = 0 jusqu'à 2
For i = 0 To 2 'je fais tourner mon bazarre sur les lignes 1 a 3 de la plage. cad la ligne 0 a 2 dans la listbox
'si ListBox_Device.Selected(i) a pour valeur vraie pour i =0, pour i = 1, pour i =2
If ListBox_Device.Selected(i) = True Then
'alors tu fais apparaître toon inputbox si pour i=0, i=1, i=2 si ListBox_Device.Selected(0), ListBox_Device.Selected(1), ListBox_Device.Selected(2) sont vrais
InputBox_Result = InputBox(ListBox_Device.Value & " ?", "") '
Pour mieux comprendre, appuies sur F8 (pas à pas détaillé), tu verras comment ta macro fonctionne
Ton inputbox s'ouvre 3 fois parce que tu lui demandes 3 fois de s'ouvrir :
'de i = 0 jusqu'à 2
For i = 0 To 2 'je fais tourner mon bazarre sur les lignes 1 a 3 de la plage. cad la ligne 0 a 2 dans la listbox
'si ListBox_Device.Selected(i) a pour valeur vraie pour i =0, pour i = 1, pour i =2
If ListBox_Device.Selected(i) = True Then
'alors tu fais apparaître toon inputbox si pour i=0, i=1, i=2 si ListBox_Device.Selected(0), ListBox_Device.Selected(1), ListBox_Device.Selected(2) sont vrais
InputBox_Result = InputBox(ListBox_Device.Value & " ?", "") '
merci pour ta reponse!
je viens d'utiliser f8 (merci pour ce conseil d'ailleurs).
effectivement je boucle 3 fois sur mon inputbox, mais en revenant a chaque fois au debut de ma routine, ce qui est assez bizarre! (non?)
en revanche je n'arrive pas a bien comprendre la suite de ton post: il ne faudrait pas que j'index ListBox_Device.Selected() avec le i de ma boucle?
comment je peux balayer mes 3 lignes si je ne le fais pas?
je viens d'utiliser f8 (merci pour ce conseil d'ailleurs).
effectivement je boucle 3 fois sur mon inputbox, mais en revenant a chaque fois au debut de ma routine, ce qui est assez bizarre! (non?)
en revanche je n'arrive pas a bien comprendre la suite de ton post: il ne faudrait pas que j'index ListBox_Device.Selected() avec le i de ma boucle?
comment je peux balayer mes 3 lignes si je ne le fais pas?
Bonjour,
Je ne sais pas ce que tu veux faire. Donc sans ca je ne peux pas te dire.
Tu demandais pourquoi ton inputbox apparaissait 3 fois.
Tu utilises une boucle qui balaie 3 lignes différentes :
for i=0 to 2
Maintenant la question est quelles est ou quelles sont les conditions que tu veux pour qu'apparaisse ton inputbox?
En gros, quel est le but de ton code?
Je ne sais pas ce que tu veux faire. Donc sans ca je ne peux pas te dire.
Tu demandais pourquoi ton inputbox apparaissait 3 fois.
Tu utilises une boucle qui balaie 3 lignes différentes :
for i=0 to 2
Maintenant la question est quelles est ou quelles sont les conditions que tu veux pour qu'apparaisse ton inputbox?
En gros, quel est le but de ton code?
je veux que lorsque l'utilisateur clic sur l'une des 3 lignes de la combobox, soit affichee un inputbox. une fois que cette box et remplie et validee par l'utilisateur, je veux ecrire son contenue sur la ligne correspondante de la plage dont est issu ma combobox.
edit:
voici mon fichier epure des autres fonctions
pour lancer l'userform voulu il faut clicker sur le bouton adequate a droite
https://www.fichier-xls.fr/2013/10/14/test-system-configurator/
edit 2:
lorsque je mets une msgbox juste avant mon inputbox pour afficher la valeur de i, il reste bien identique au numero de la ligne selectionnee dans la combo ,les 3 fois que l'inputbox s'ouvre...
edit:
voici mon fichier epure des autres fonctions
pour lancer l'userform voulu il faut clicker sur le bouton adequate a droite
https://www.fichier-xls.fr/2013/10/14/test-system-configurator/
edit 2:
lorsque je mets une msgbox juste avant mon inputbox pour afficher la valeur de i, il reste bien identique au numero de la ligne selectionnee dans la combo ,les 3 fois que l'inputbox s'ouvre...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour,
Y a un truc que je ne pige pas, c'est lorsque la macro passe sur la ligne suivante, elle recommence du début :
Worksheets("MMF Configurator").Range("ListBox_Range_Step1").Cells(i + 1, 2).Value = InputBox_Result
Quel est le lien entre ton userform et la plage qui s'appelle ListBox_Range_Step1 ?
Car on dirait que dès qu'il écrit sur cette plage, il comprend qu'il faut relancer la macro. J'avoue que je suis dépassée sur ce coup là.
Y a un truc que je ne pige pas, c'est lorsque la macro passe sur la ligne suivante, elle recommence du début :
Worksheets("MMF Configurator").Range("ListBox_Range_Step1").Cells(i + 1, 2).Value = InputBox_Result
Quel est le lien entre ton userform et la plage qui s'appelle ListBox_Range_Step1 ?
Car on dirait que dès qu'il écrit sur cette plage, il comprend qu'il faut relancer la macro. J'avoue que je suis dépassée sur ce coup là.
le lien entre les deux?!
heu aucun normalement: ma plage est une plage statique definie a la main sur la feuille excel (on peut la voir dans le fichier excel que j'ai charge). et l'userform est cree... comme un userform? ^^ je ne vois pas trop quoi dire dessus desole :/
je vais essayer avec une autre plage pour voir...
heu aucun normalement: ma plage est une plage statique definie a la main sur la feuille excel (on peut la voir dans le fichier excel que j'ai charge). et l'userform est cree... comme un userform? ^^ je ne vois pas trop quoi dire dessus desole :/
je vais essayer avec une autre plage pour voir...
bon j'ai résolu le pb mais je sais pas si ca va te convenir :
https://www.cjoint.com/?CJoqqi9vEDk
Regarde si ca peut aller
https://www.cjoint.com/?CJoqqi9vEDk
Regarde si ca peut aller
je dois avoir plus de merde que je ne pensais dans mon code, ta solution ne marche pas dans mon fichier complet...
ce que je vais faire vu que je sais que mon code marche pour n'importe quelle autre plage, je vais bidouiller comme ca!
merci pour ton aide en tout cas :)
ce que je vais faire vu que je sais que mon code marche pour n'importe quelle autre plage, je vais bidouiller comme ca!
merci pour ton aide en tout cas :)