Ajout d'une textbox en dernier qui pose problème

ToBee Messages postés 10 Date d'inscription samedi 25 mars 2006 Statut Membre Dernière intervention 28 septembre 2012 - 4 mars 2011 à 17:07
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 28 sept. 2012 à 12:56
Bonjour !

Je me remets au VBA sur excel 2003 pour le boulot.
J'ai créé un userform avec des textbox et tout et tout et quand je clique sur mon bouton ca me met toutes les valeurs dans des colonnes Excel.
Jusque la tout marche bien.

Le problème est que, ayant oublié de mettre des textbox, celles que je rajoute se mettent automatiquement en fin de tableau, même en changeant leur nom et leur TabIndex.

J'aimerai qu'elles rentrent dans l'ordre de mon userform.

Pour exemple entre la textbox4 et la textbox5 j'ai rajouté la textbox73 (graphiquement). la textbox suivante du userform est la textbox6.

En validant j'ai mes cases excel qui se remplissent dans l'ordre
Txtbox4 Txtbox5 Txtbox6 Txtbox73
alors que je voudrai avoir l'ordre
Txtbox4 Txtbox73 Txtbox5 Txtbox6

Dans le code c'est une boucle "for each control..." qui s'occupe de tout.

Pouvez vous m'aider si vous avez réussi à comprendre mon explication assez floue... ?

11 réponses

NHenry Messages postés 15118 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 11 mai 2024 159
4 mars 2011 à 20:03
Bonjour,

Il faut que tu fasse ton tri comme tu le veux, mais ça ne peut être réglé automatiquement, il me semble.

Mon site
0
ToBee Messages postés 10 Date d'inscription samedi 25 mars 2006 Statut Membre Dernière intervention 28 septembre 2012
7 mars 2011 à 13:06
Mon code le fait déja automatiquement, mais ce n'est justement pas le bon ordre, il le fait par ordre chronologique de création des textbox et non par nom croissant (tbx1, tbx2, etc...)

Je vous montre le code qui est somme toute très basique :

Private Sub CommandButton1_Click()
Dim Ctl As Control
Dim Col As Integer, Lig As Integer
Col = 1
Lig = Worksheets("Feuil4").Range("A65536").End(xlUp).Row + 1

For Each Ctl In UserForm1.Controls
    Select Case TypeName(Ctl)
        Case "TextBox":
        Worksheets("Feuil4").Cells(Lig, Col) = Ctl.Text
        Case "OptionButton":
        Worksheets("Feuil4").Cells(Lig, Col) = Ctl.Value
        Case "CheckBox":
        Worksheets("Feuil4").Cells(Lig, Col) = Ctl.Value
        Case "CommandButton1":
        Case "Label":
        GoTo Suite1
        Case "Frame":
        GoTo Suite1
        Case "Image":
        GoTo Suite1
    End Select
    Col = Col + 1
Suite1:

Next Ctl
0
NHenry Messages postés 15118 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 11 mai 2024 159
7 mars 2011 à 13:38
Bonjour,

Déjà, rien que de voir "GoTo", je me dis que tu peux faire mieux.
Essayes d'utiliser un booléen et un If plutôt d'un horrible Goto.

Essayes de faire un tri avec la propriété Tag ou TabOrder (ou similaire).

Mon site
0
ToBee Messages postés 10 Date d'inscription samedi 25 mars 2006 Statut Membre Dernière intervention 28 septembre 2012
27 sept. 2012 à 21:10
Au bout de pas mal de temps j'ai contourné mon problème en ajoutant les contrôles dans une collection en leur collant la propriété tabindex en tant que Item.Key et là, plus besoin de se soucier de l'ordre chronologique de création.
C'est, me semble t-il la SEULE et UNIQUE solution quand on ne crée pas ses contrôles dans le bon ordre dès le début.
0

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

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
27 sept. 2012 à 21:20
Bonjour,
seule et unique ? Non ! Même un Array ferait l'affaire.
Sans parler de l'utilisation d'une classe pour simuler un groupe de contrôles indexés .
Mon étonnement : un an et demi plus tard pour cette futilité !


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
ToBee Messages postés 10 Date d'inscription samedi 25 mars 2006 Statut Membre Dernière intervention 28 septembre 2012
27 sept. 2012 à 21:30
Justement je parle de la solution de classes -_-

Et oui si tard pour éventuellement ceux qui tomberaient sur ce problème puisse trouver une solution vu que j'ai été gentillement éclairé sur le sujet...
C'est pas un mal de penser à son prochain quand même ^^

Et je n'ai pas encore utilisé d'array dans ma vie VB, chaque année sa peine !
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
27 sept. 2012 à 21:34
Et je n'ai pas encore utilisé d'array dans ma vie VB, chaque année sa peine !

Une année et demi pour chacune de ces "ENORMES" difficultés de l'espèce ?
Wow !
Quand tu seras arrivé au tiers du chemin, Excel aura déjà été remplacé par autre chose, à ce train d'enfer-là !!!
Bonne chance


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
Utilisateur anonyme
28 sept. 2012 à 02:14
Bonjour,


Txtbox73


S'il faut vraiment que le "client" passe 73 textboxes avant de valider sa saisie; cela s'appelle de la torture. C'est probablement plus abrutissant que de travailler sur une chaîne de montage.

Quant à moi, au lieu d'obliger les victimes à remplir 73 textboxes, je prendrais une feuille Excel juste pour cela. Il suffit de protéger la feuille au complet, sauf 73 cellules. À la fin de la saisie, il suffirait de copier les valeurs à la bonne place sur la bonne feuille.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
28 sept. 2012 à 07:39
Bonjour, cmarcotte,
Je n'ai pas compris qu'il avait 73 textboxes, mais que le numéro 73 avait été choisi pour (par exemple) insérer une nouvelle textbox entre la 7 et la 8
Ce qui m'a fait "bondir", c'est l'aisance avec laquelle il n'a pas hésité à affirmer de sa "solution" :
C'est, me semble t-il la SEULE et UNIQUE solution quand on ne crée pas ses contrôles dans le bon ordre dès le début

Je lui ai parlé d'array ==>> il ne sait pas ce que c'est et comment on l'utilise.
Bon ...
J'imagine que, puisque :
dans ma vie VB, chaque année sa peine

il ne sait pas non plus ce qu'est la propriété Tag d'une textbox (puisque sur userform) et à quoi on peut l'utiliser.
Il y aurait tout bêtement mis l'adresse de la cellule concernée ....
voilà voilà !
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
ToBee Messages postés 10 Date d'inscription samedi 25 mars 2006 Statut Membre Dernière intervention 28 septembre 2012
28 sept. 2012 à 12:03
Bon, c'est très gentil de vouloir m'aider ucfoutu mais cesse d'etre hautain s'il te plait, ca ne sert à rien, tu ne réponds ABSOLUMENT PAS à la question et tu ne fais rien avancer.
Je connais la propriété Tag et mettre l'adresse de chaque textbox dedans serait aussi de la torture s'il y en a 73.
Le fait est que oui ca existe des formulaires aussi grand, c'est pour de la saisie de questionnaire (oui, il y a des grands questionnaires -_-).
Le but d'un code pour moi c'est qu'il soit dynamique et qu'il puisse etre réutilisé pour un autre userform qui contient d'autres controles pour un autre questionnaire. Et la seule solution que j'ai trouvé est bien la collection de controles.
voilà voilà !
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
28 sept. 2012 à 12:56
Bravo.
Bonne chance.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
Rejoignez-nous