Inputbox qui s'ouvre 3 fois au lieu d'une...

Résolu/Fermé
jeanphy_ Messages postés 8 Date d'inscription lundi 14 octobre 2013 Statut Membre Dernière intervention 14 octobre 2013 - 14 oct. 2013 à 14:22
melanie1324 Messages postés 1504 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 - 14 oct. 2013 à 17:37
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)



' 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!

10 réponses

melanie1324 Messages postés 1504 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
Modifié par melanie1324 le 14/10/2013 à 14:38
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 & " ?", "") '
0
jeanphy_ Messages postés 8 Date d'inscription lundi 14 octobre 2013 Statut Membre Dernière intervention 14 octobre 2013
14 oct. 2013 à 14:57
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?
0
melanie1324 Messages postés 1504 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
14 oct. 2013 à 15:07
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?
0
jeanphy_ Messages postés 8 Date d'inscription lundi 14 octobre 2013 Statut Membre Dernière intervention 14 octobre 2013
Modifié par jeanphy_ le 14/10/2013 à 15:28
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...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
melanie1324 Messages postés 1504 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
14 oct. 2013 à 16:00
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à.
0
jeanphy_ Messages postés 8 Date d'inscription lundi 14 octobre 2013 Statut Membre Dernière intervention 14 octobre 2013
14 oct. 2013 à 16:06
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...
0
jeanphy_ Messages postés 8 Date d'inscription lundi 14 octobre 2013 Statut Membre Dernière intervention 14 octobre 2013
14 oct. 2013 à 16:11
mon code marche nikel avec une autre plage...
0
jeanphy_ Messages postés 8 Date d'inscription lundi 14 octobre 2013 Statut Membre Dernière intervention 14 octobre 2013
14 oct. 2013 à 16:13
excel ne doit pas apprecier que j'ecrive sur la plage dont il se sert pour afficher la combo :/
0
melanie1324 Messages postés 1504 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
14 oct. 2013 à 16:19
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
0
jeanphy_ Messages postés 8 Date d'inscription lundi 14 octobre 2013 Statut Membre Dernière intervention 14 octobre 2013
14 oct. 2013 à 16:35
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 :)
0
jeanphy_ Messages postés 8 Date d'inscription lundi 14 octobre 2013 Statut Membre Dernière intervention 14 octobre 2013
14 oct. 2013 à 16:42
je viens de separer en deux ma plage de maniere a ne pas ecrire dans la plage dont j'ai recupere les donnees pour les afficher dans la combo.

miracle ca marche!!

et une journee de perdue pour une connerie, une! XD


merci pour ton aide melanie :)
0
melanie1324 Messages postés 1504 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
14 oct. 2013 à 17:37
de rien mais je ne comprenais pas non plus.
Peux-tu mettre le pb en résolu stp (en dessous du titre)
0