TextBox si vide alors
- Messages
- 70
- Excel
- 2016
- Inscrit
- 12/02/2016
- Emploi
- Dessinateur calculateur en bureau d'étude.
bonjour,
j'ai un petit problème : je souhaite que si la valeur d'une TextBox n'est pas rempli, il utilise celle d'une autre. Mais lorsque je lance la macro, par exemple ici, si dans ma feuille je remplis la TextBox1 et la textbox2 : il rempli la TextBox3 et après il s'arrête... Ou alors si je remplis la TextBox 1, 2, 3, 4, 5 il va remplir la TextBox6 mais pas la TextBox7.
If Worksheets("Accueil").TextBox1.Value = "" Then
Worksheets("Accueil").TextBox1.Value = InputBox("Entrer un numéro de poteau", "Erreur")
ElseIf Worksheets("Accueil").TextBox2.Value = "" Then
Worksheets("Accueil").TextBox2.Value = InputBox("Entrer un numéro de poteau", "Erreur")
ElseIf Worksheets("Accueil").TextBox3.Value = "" Then
Worksheets("Accueil").TextBox3.Value = Worksheets("Accueil").TextBox1.Value
ElseIf Worksheets("Accueil").TextBox4.Value = "" Then
Worksheets("Accueil").TextBox4.Value = Worksheets("Accueil").TextBox2.Value
ElseIf Worksheets("Accueil").TextBox5.Value = "" Then
Worksheets("Accueil").TextBox5.Value = Worksheets("Accueil").TextBox1.Value
ElseIf Worksheets("Accueil").TextBox6.Value = "" Then
Worksheets("Accueil").TextBox6.Value = Worksheets("Accueil").TextBox2.Value
ElseIf Worksheets("Accueil").TextBox7.Value = "" Then
Worksheets("Accueil").TextBox7.Value = Worksheets("Accueil").TextBox1.Value
ElseIf Worksheets("Accueil").TextBox8.Value = "" ThenCordialement,
Bob
Bonsoir,
Avec Sinon si, lorsqu'une condition échoie, toutes les autres sont abandonnées....
With Worksheets("Accueil")
For i = 1 To 8
With .OLEObjects("TextBox" & i).Object
If i <= 2 Then
If .Value = "" Then .Value = InputBox("Entrer un numéro de poteau", "Erreur")
Else
If .Value = "" Then .Value = Worksheets("Accueil") _
.OLEObjects("TextBox" & (i - 1) Mod 2 + 1).Object.Value
End If
End With
Next i
End WithCordialement.
- Messages
- 70
- Excel
- 2016
- Inscrit
- 12/02/2016
- Emploi
- Dessinateur calculateur en bureau d'étude.
Re,
Ca marche parfaitement mais j'ai un petit problème, comme tu as pu le voir avec mon code, je suis en apprentissage sur le vba, maintenant si je voulais que la TextBox 7 et 8 prennent la même valeur que la TextBox1 toutes les deux comment je peux faire avec ton code?
Cordialement,
Bob
Tu modifies selon le résultat à obtenir.
Mais comme tu le vois, là tu affectais la valeur du 1 à ceux qui avaient un index impair et la valeur du 2 à ceux qui avaient un index pair. Ce qui permet dans la boucle une seule commande d'affectation pour les TextBox 3 à 8.
Il est toujours judicieux de s'arranger pour réduire le volume de code au moyen de boucles et renommer des contrôles est éventuellement un moyen de créer la situation qui permet de mieux s'arranger pour coder.
Cordialement.
- Messages
- 70
- Excel
- 2016
- Inscrit
- 12/02/2016
- Emploi
- Dessinateur calculateur en bureau d'étude.
Bonjour,
c'est cela qui n'ai pas possible:
"Tu modifies selon le résultat à obtenir" car ton code est un peu compliqué pour moi. C'est pour cela que j'aurais voulus le même code, avec ce que je t'ai demandé. Pour que je compare les codes, pour voir comment cela fonctionne, Mais tu n'as peu être pas le temps et cette solution fonctionne, mais ce n'est pas très esthétique vus que j'ai 25 TextBox
Merci beaucoup à toi, comme la solution fonctionne je ferme ce poste.
Cordialement,
Bob
Bonjour,
Ton problème initial était que tu testais et voulais affecter des valeurs à tous tes TextBox, mais en en utilisant If... Then... ElseIf... Then... tu ne traitais que le 1er cas qui se présentait.
Tu pouvais pour pallier à ça faire répéter la procédure jusqu'à ce que le dernier TextBox ait reçu une valeur, ou bien les traiter successivement par une succession de If... Then pour être sûr que tous soient testés.
Dans les deux cas, tu étais amené à répéter une commande plusieurs fois... Si on peut l'éviter, autant le faire, moins de code et plus facile à lire quand tu le reprends.
Je t'ai donc proposé de les tester en boucle. Si l'on n'a pas toujours le réflexe boucle, ou d'utilisation d'instructions de regroupement (With...) quand on débute, une fois qu'on les a vues, cela ne présente pas de problème pour les interpréter... Ce sont de toutes façons des ingrédients indispensables à maîtriser pour coder au mieux...
La difficulté était de savoir la collection à invoquer pour pouvoir atteindre ce type d'objets en utilisant une boucle. Si tu ne maîtrises pas ça du premier coup, inutile de t'inquiéter pour autant, les objets dessinés et les contrôles constituent un véritable maquis pour s'y retrouver et définir la bonne syntaxe. C'est là d'ailleurs que l'enregistreur a son utilité pour trouver la bonne syntaxe (à condition de s'y retrouver dans la masse de code inutile qu'il produit...), encore que j'ai traité un cas il y a quelque temps où l'enregistreur n'enregistrait carrément pas l'opération et il a fallu tâtonner un moment pour tomber sur la propriété à appeler.
Si tu mémorises que les contrôles ActiveX, lorsque tu les utilises dans un Userform, appartiennent à la collection Controls et que c'est cette collection qu'il faut utiliser pour les traiter en boucle, mais lorsque tu les utilises dans une feuille, il se regroupent dans une collection OLEObjects, à laquelle il faut alors faire appel, avec la particularité que pour pouvoir atteindre les propriétés propre à l'objet en tant que contrôle, il faut s'annoncer par le mot clé Object. Mais ne perds pas de vue pour autant, que sur une feuilles ces contrôles font également partie de la collection Shapes qui regroupe toutes les formes dessinées, images, etc. de la feuille...
Je ne poursuis pas, car il vaut mieux avancer pas à pas, et je ne pourrais me targuer de pouvoir épuiser le débat sur ce sujet vu que je continue de découvrir des aspects que j'ignorais. Mais comme je le disais, si tu intègres déjà les répartitions de base de ce type d'objets, c'est déjà un progrès décisif dans la maîtrise de leur manipulation...
Cordialement.
Merci MFerrand,
voici une leçon et un code qui valent de l'or pour moi.
Je cherchais hier à résoudre ce problème en voulant indexer les TextBox (et donc, rejoindre ton procédé) comme en VB...
Ah, vive VB!
Bonne journée, tout le monde!
A+
- Messages
- 70
- Excel
- 2016
- Inscrit
- 12/02/2016
- Emploi
- Dessinateur calculateur en bureau d'étude.
Re,
merci beaucoup pour toutes ces explications qui n'ont pas servi qu'à moi on dirait
je vais aller me faire des cours sur les boucles ça ne me fera pas de mal
Cordialement,
Bob