Allias de variables [Résolu]

Signaler
Messages postés
38
Date d'inscription
dimanche 6 juillet 2008
Statut
Membre
Dernière intervention
20 octobre 2014
-
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
-
Bonjour,

Voila, dans un Userforms, j'ai différents boutons noté de B1 à B14, que je veux faire apparaître et disparaître suivant le déroulement du programme (dans une boucle).

Mon problème est que l'association de "B" & i (i étant un compteur), j'ai un plantage, me disant que ce n'est pas reconnu.

Auriez-vous une idée ?
Merci - Hervé

--

14 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
Désolé et toutes mes excuses, Herve29000. Je t'ai confondu avec un autre Hervé ...
Controls("B" & n) se réfère au contrôle nommé B3 si n = 3
===>>>
For II = 1 To 14
FClients.controls("B" & II).Value = True
Next
--
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
Messages postés
38
Date d'inscription
dimanche 6 juillet 2008
Statut
Membre
Dernière intervention
20 octobre 2014

Merci pour tes infos, c'est cool.

Mais pour l'instant, VBA ne fait pas ce que je lui demande dans cette boucle. Pourrais tu me dire ce qui coince. Merci par avance - Hervé

En fait je veux faire afficher et faire disparaître des Checkbox avec cette routine.

For II = 1 To 14
FClients.Controls("B" & II).Visible = True

FFlag = True
Sheets(II).Cells.ClearContents

Traitement (II) (Part dans un PGM qui traite l'information)

FClients.Controls("B" & II).Visible = False
Next
Messages postés
32908
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
7 juin 2021
350
Bonjour.
Il faut utiliser la collection "controls"


Si je me connecte sur mon pc je te filerai du code.

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
Bonjour;
1) Il ne s'agit pas là d'un "alias", mais d'un sujet déjà traité mille et une fois sur ce forum
2) montre ce que tu as écrit et qui provoque :
j'ai un plantage, me disant que ce n'est pas reconnu.


Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
Je me retire aussitôt.
N'avais pas consulté ma petite liste "spéciale". Cette consultation m'aurait conduit à ne rien répondre...
Messages postés
38
Date d'inscription
dimanche 6 juillet 2008
Statut
Membre
Dernière intervention
20 octobre 2014

Qu'elle est cette petite liste UCFOUTU ?
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
Oh ... devine ...
Bonne chance.
Messages postés
38
Date d'inscription
dimanche 6 juillet 2008
Statut
Membre
Dernière intervention
20 octobre 2014

Voila l'entête :
For II = 1 To 14
Cial = "B" & II
FClients.Cial.Value = True
FClients.Cial.Visible = True

Le résultat donne :

Erreur de compilation
Membre de méthode ou de données introuvable

Merci pour vos réponses

--
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
Ben ...
Si dans ta boucle :
citation :
For II = 1 To 14
FClients.Controls("B" & II).Visible = True

FFlag = True
Sheets(II).Cells.ClearContents

'Traitement (II) (Part dans un PGM qui traite l'information)

FClients.Controls("B" & II).Visible = False
Next
tu demandes d'afficher puis de rendre invisibles, tu n'auras même pas le temps de voir qu'elles s'affichent, qu'elles seront à nouveau invisibles !
Messages postés
38
Date d'inscription
dimanche 6 juillet 2008
Statut
Membre
Dernière intervention
20 octobre 2014

Merci pour ta réponse, certes j'y avais pensé, mais pour certains traitements cela met plus de 30 secondes de travail, et pourtant elle ne se rend pas visible pour autant ..... Certes c'est juste pour améliorer graphiquement le programme, car tout fonctionne derrière, mais enfin, j'aurais aimé réussir; J'y suis depuis hier midi... Merci en tout cas pour tes réponses Ucfoutu - Hervé

--
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
Mets alors un DoEvents après la ligne disant :
FClients.Controls("B" & II).Visible = True
ou (encore mieux) :
dim debut as single
For II = 1 To 14
FClients.Controls("B" & II).Visible = True
debut = timer
do while timer - debut < 2
doevents
loop
FFlag = True
Sheets(II).Cells.ClearContents

'Traitement (II) (Part dans un PGM qui traite l'information)

FClients.Controls("B" & II).Visible = False
Next
Mais tu vas allonger ainsi forcément le temps d'exécution ... pour aucun réel gain !
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
75
Salut tout le monde
La boucle de 2 mSec est amusante, surtout sous VBA.
DoEvents sans boucle fonctionnera aussi bien.
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
75
NB : Perso, j'aurai commencé par renommer les boutons : B3 ressemble trop à un nom de cellule ~ risqué avec les syntaxes abrégées
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
75
NB 2 : Perso, j'ai banni les variables avec les lettres I ou O : ressemblent trop à des chiffres (en lecture rapide)
Messages postés
38
Date d'inscription
dimanche 6 juillet 2008
Statut
Membre
Dernière intervention
20 octobre 2014

MERCI !!!! C'est exactement ce que je cherchais comme effet. Tu es un trop fort. Merci encore

--
Messages postés
38
Date d'inscription
dimanche 6 juillet 2008
Statut
Membre
Dernière intervention
20 octobre 2014

Tout fonctionne comme j'en avais envie, merci à tous pour vos idées. Maintenant je vais m'attaquer à une barre de progression, indiquant l'avancement du traitement du programme. Si vous avez des idées je serais preneur. Merci encore. Hervé

--
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
Le plus simple serait sans aucun doute d'utiliser une barre de progression (composant ProgressBar), d'en fixer sa propriété Max à 14 (le nombre de tes feuilles) et sa propriété Min à 0
Et dans ta boucle, d'incrémenter la propriété Value de ta progressBar de 1 à chaque feuille traitée.
Messages postés
38
Date d'inscription
dimanche 6 juillet 2008
Statut
Membre
Dernière intervention
20 octobre 2014

Je vais regarder ce composant. Tu l'as déjà essayé ?
--
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
Bien évidemment (c'est l'un des composants les plus utilisés et il est d'utilisation très simple).
Messages postés
38
Date d'inscription
dimanche 6 juillet 2008
Statut
Membre
Dernière intervention
20 octobre 2014

Merci Ucfoutu pour toutes tes aides, tu sembles avoir un très bon niveau dans ce genre de programmation, moi je commence en fait (malgrés mon age) - Ou puis je trouver de l'aide à ce sujet de barre de progression STP ?

--
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
Aucune aide n'est nécessaire pour un composant aussi simple :
Pour l'insérer : clic droit dans la boîte à outil ===>>> clic gauche sur Contrôles complémentaires ===>> parcours de la liste ===>> coche Microsoft ProgressBar Control, Version 5,0 ===>> clique sur OK ===>>
Il apparait maintenant dans ta boîte à outil est peut maintenant être inséré sur ton userform de la même manière que tous les autres contrôles.
Regarde ses propriétés, parmi lesquelles Min et Max ==>> définis-les comme dit plus haut.
La propriété Value, par contre, n'est accessible qu'en exécution (et pour cause).
Pour l'incrémenter de 1 unité ===>>
progressbar1.value = progressbar1.value + 1
Nul besoin d'aide pour si pet, comme tu le vois.