Ma boucle stoppe pour i=1

Bonjour à tous

Je voudrais utiliser une boucle pour envoyer les valeurs des textboxs (nommés TB1 à TB18) vers une feuille de calcul

Je suis débutant en VBA et j'ai planché sur les différentes boucles possibles

Voici le code que j'utilise :

Dim i As Integer, Onglet As Variant

If OptionButton1.Value = True Then Onglet = "Communauté"

If OptionButton2.Value = True Then Onglet = "Famille"

If OptionButton3.Value = True Then Onglet = "Amis"

If OptionButton4.Value = True Then Onglet = "Job"

With Sheets(Onglet).Columns("A")

Set trouve = .Find(ComboBox1.Value, LookIn:=xlValues, SearchOrder:=xlByRows)

End With

If Not trouve Is Nothing Then a = trouve.Row

For i = 1 To 18

Sheets(Onglet).Cells(a, i + 5) = Me.Controls("TB" & i)

Next i

Le problème est que ma boucle fonctionne uniquement pour la valeur i=1 mais pas pour les valeurs suivantes de i

Quelqu'un peut-il m'aider ?

Merci

Bonjour

A 1ère vue pas de soucis avec le code

Si tu peux envoyer ton fichier et la macro pour tester

Bonjour et merci pour cette réponse rapide.

Ci-joint le fichier en question.

Le userform dont le code pose problème se nomme Usf Actions

Je voudrais l’utiliser comme un rappel des actions menées mais aussi pour la mise à jour des actions réalisées

C'est dans la partie de mise à jour que le code ne fonctionne pas (clic sur le bouton de commande MAJ)

Je pourrai bien sûr écrire pour chaque textbox un ligne de code différente mais c'est fastidieux et comme je sais que l'on peut remplacer toutes ces lignes par un seule commande en boucle, je recherche la solution ...

Encore merci pour ton aide

clsabar

23liste-contacts.xlsm (51.53 Ko)

Bonjour

A vérifier

Bonjour et merci Banzai64

Tout fonctionne bien !

Je ne comprends pas le code que tu as ajouté :

Init

Efface

et Rezise

Mais tout fonctionne bien ...

bravo

clsabar

Bonjour

La particularité c'est juste la Variable Init qui agit comme une condition pour la réinitialisation du combobox1

Init = True ==> Empêche la macro ComboBox1_Change() de s'exécuter ( qui a pour effet, entre autre, d'effacer les Textbox)

Efface m'a servit pour débuger le programme

Resize sert à dimensionner une zone

Re,

Merci pour ces infos supplémentaires.

Tes explications m'ont fait comprendre la condition 'init' qui empêche la macro combonbox1 change de s'exécuter (celle qui a pour effet de vider les textbox)

Si tu as un moment, j'aimerais avoir une explication supplémentaire quant à la modif "if efface = true" (c'est simplement pour comprendre ...)

"Efface" est-il en lui-même un code VBA ? (car à aucun moment le terme "Efface" n'est défini dans le code, seulement déclaré comme bolean)

En fait, la question que je me pose est la suivante : comment VBA interprète "Efface = true" ?

Encore merci !

Bonjour

Dans ton 1er message tu n'avais pas fourni de fichier alors j'en ai fait un pour essayer de comprendre ce qui se passait

Dans ce programme j'ai fait un bouton Init qui me remplissait aléatoirement les textbox (oui suis fainéant)

et Un bouton Effacer qui permettait d'effacer les informations des textbox dans la base de donnée

et c'est ce bout de code qui est resté

Tu peux modifier le code de la macro Private Sub ComB1_Click()

 
'
'  Début du code
'
 With Sheets(Onglet)
    Set Trouve = .Columns("A").Find(ComboBox1.Value, LookIn:=xlValues, SearchOrder:=xlByRows)
    If Trouve Is Nothing Then Exit Sub
    Lg = Trouve.Row
    For I = 1 To 18
      .Cells(Lg, I + 5) = Me.Controls("TB" & I)
    Next I
  End With
'
' Fin du code
'

Et bien sur effacer la déclaration de la variable Efface

Je comprends maintenant toutes les mofifs ... Génial !

Rassure toi, je travaille dans le recrutement depuis de longues années et j'ai appris que les fainéants développent des systèmes ou des raccourcis très utiles dans la vie professionnelle !

A contrario les "besogneux" sont affectés à d'autres tâches ....

Merci encore

clsabar

Rechercher des sujets similaires à "boucle stoppe"