Boucle for qui ne s'exécute pas

Bonjour à tous,

je suis entrain de créer une fichier excel avec un userform, nommé "données", dont j'aimerais récupérer les valeurs dans une feuille excel. J'ai 25 textboxs dans une frame, frame24, et je souhaiterais récupérer les valeurs de ces textboxs pour les mettre dans 25 cellules réparties en 5 colonnes. J'ai donc créé le code suivant:

Private Sub CommandButton1_Click()
Dim j As Integer

For j = 21 To j = 20 + (Frame24.Controls.Count) / 5
Range("F" & j).Value = données.Controls("TextBox" & (j - 20)).Text
Range("G" & j).Value = données.Controls("TextBox" & (j - 10)).Text
Range("H" & j).Value = données.Controls("TextBox" & j).Text
Range("I" & j).Value = données.Controls("TextBox" & (j + 10)).Text
Range("J" & j).Value = données.Controls("TextBox" & (j + 20)).Text
Next j
End Sub

lors que je l'exécute, rien ne s'affiche dans le fichier et lors de l'exécution pas à pas j'ai constaté que la boucle for n'est jamais exécuté. Le surlignage jaune se fait sur la ligne

For j = 21 To j = 20 + (Frame24.Controls.Count) / 5

puis passe directement à end sub sans effectuer les actions.

J'ai du faire une erreur quelque part mais je cherche depuis hier et je ne la trouve pas. Si quelqu'un avait un peu de temps pour m'aider ca serait génial!

Merci

As tu définie la valeur initiale de j ???

Bonjour,

j'ai essayé de lui donner une valeur mais ca n'a rien changer. Le programme s'exécute mais rien ne s'affiche dans ma feuille excel.

Bonjour

enlève le j= après le to

For j = 21 To j = 20 + (Frame24.Controls.Count) / 5
For j = 21 To 20 + (Frame24.Controls.Count) / 5

Sans le j= après le To j'ai une erreur d'exécution '424' objet requis sur la ligne

Range("F" & j) = Données.Controls("TextBox" & (j - 20)).Text

bonjour,

regarde quelle est la valeur de j à ce moment-là et vérifie que le textbox correspondant (j-20) existe bien.

vérifie si ton objetdonnées s'appelle effectivement données

tu peux aussi mettre ton fichier, ce sera plus facile pour debugger.

OK merci je regarderais ça lundi! Je n'ai le fichier que sur l'ordi du boulot.

h2so4 peux tu m'indiquer comment je controle la valeur de j? j'ai essayé avec une msgbox dans la boucle mais comme la boucle ne s'exécute pas le valeur de j ne s'affiche pas. Si je met la msgbox après la boucle, elle m'indique 21 qui est la valeur initiale que j'ai donnée à j suite à la suggestion de sebnormand.

En tout cas voila le morceau de mon fichier concerné.

Merci beaucoup de prendre le temps de me répondre. C'est vraiment super sympa

19classeur1.xlsm (18.99 Ko)

En premier lieu tes texbox s'appellent "textbox" et non "txtbox" comme les 5 premières ayant des libellés. Je les ai donc renommées pour qu'elles soient bien récupérées ici

 Données.Controls("TextBox" & j).Value

Ensuite pour plus de clarté j'ai renommer les textbox dont tu souhaites récupérer les valeurs (textebox1 à textebox20). Voir si cela ne dérange pas le reste du programme.

Comme on a pu te le dire précédemment pas besoin de mettre

to J =...

il suffit de mettre le nombre max de textebox à interroger soit

Frame24.Controls.Count

- les 5 ayant les libellés.

Le programme que je te propose n'ai peut-être pas très esthétique avec son select case.

Private Sub Valider_Click()
Dim j As Integer

Sheets(1).Select
c = 7
l = 21
For j = 1 To Frame24.Controls.Count - 5
    Cells(l, c).Value = Données.Controls("TextBox" & j).Value
    l = l + 1
    Select Case j
    Case 5, 10, 15
        c = c + 1
        l = 21
    End Select
Next j
Données.Hide

End Sub
20classeur1.xlsm (22.69 Ko)

Bonjour Ginga999,

Merci pour ton aide.

Ton code fonctionne très bien tant qu'il n'y a que les 25 textbox d'origine mais tu as surement remarqué le bouton "ajouter une ligne". Je souhaite aussi récupérer les valeurs des textboxs ainsi ajoutées. Le nom un peu bizarre de mes textbox permettait de nommé les textboxs ajouté en fonction des colonnes et des lignes. De plus avec une nouvelle ligne tes valeurs de select case devront passé de 5, 10 et 15 à 6, 11 et 16 à condition bien sur d'arriver à nommer mes nouvelles textbox en conséquance.

Ta solution étant pour le moment la seule qui marche je vais regarder pour l'adapter.

Merci a tous pour votre aide!

A force de chercher j'ai fini par trouver une solution qui me convient. Au cas ou quelqu'un pourrait en avoir besoin, voici le code qui fonctionne:

Private Sub Valider_Click()
Dim j As Integer
j = 21

Do
Range("F" & j) = Données.Controls("TxtBox" & (j - 20)).Text
Range("G" & j) = Données.Controls("TextBox" & (j - 10)).Text
Range("H" & j) = Données.Controls("TextBox" & j).Text
Range("I" & j) = Données.Controls("TextBox" & (j + 10)).Text
Range("J" & j) = Données.Controls("TextBox" & (j + 20)).Text
j = j + 1
Loop While j > 21 And j < 21 + (Frame24.Controls.Count) / 5
Rechercher des sujets similaires à "boucle qui execute pas"