VBA Excel: probleme avec selection dans zone de liste deroulante [Résolu/Fermé]

Signaler
Messages postés
1274
Date d'inscription
vendredi 10 juillet 2009
Statut
Membre
Dernière intervention
28 avril 2020
-
Messages postés
23813
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
24 janvier 2021
-
Bonjour,

J'ai créé 2 zones de liste et 1 bouton de commande, pour valider la sélection dans
les 2 zones, avec un ActiveX.

A l'ouverture de ma feuille le premier mot de chaque liste est affiché, mais lorsque
je valide le choix (sans rien changer dans les listes) mon choix n'est pas pris en compte.

Ma question est donc: Comment faire pour que le mot présent dans la zone soit pris en compte ?

Merci de votre aide



6 réponses

Messages postés
23813
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
24 janvier 2021
6 590
Bonjour,

Je suppose que tu te sers de l'évènement Change.
Puisque ton choix est déjà fait l'évènement n'a pas lieu.
Utilise aussi la propriété LinkedCel
Mais sans fichier ni le modop employé difficile de savoir exactement...

Et est-ce qu'une simple liste de validation n'est pas suffisante ?

eric

Jamais tu ne répondras à un mp non sollicité...
Bon, ça c'est fait.
Messages postés
1274
Date d'inscription
vendredi 10 juillet 2009
Statut
Membre
Dernière intervention
28 avril 2020
48
Bonjour eriiic,

j'ai voulu joindre le fichier mais il y avait des données de travail que je ne pouvais pas joindre. Mais effectivement, j'ai utilisé la fonction change.

Voici le fichier : https://www.cjoint.com/?3LblY6pcquO

Le problème se situe au niveau de la page gestion et bilan lors du choix du trimestre et de la classe.

merci de votre aide.

Messages postés
23813
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
24 janvier 2021
6 590
Bonjour,

Je ne vois pas trop quel est ton problème puisque dans Change tu ne fais que mettre à jour une variable qui est déjà initialisée dans Initialize.
De plus elle est Public donc n'est pas perdue...

A quel moment et en faisant quoi il te manque qcq chose ?
Sinon la parade serait de mettre à jour la variable également dans l'évènement DblClick.

Private Sub ComboBox2_Change()                  'Choix du Trimestre    
    Trim = ComboBox2.ListIndex    
End Sub 

Par contre :
1) Trim est un nom réservé, change le nom de ta variable ('édition / remplacer / projet en cours')
2) Dim cpteval, lg, cl As Integer
Ici seul cl est Integer, les autres variables sont Variant. Il est fortement conseillé de typer toutes les variables.
Par exemple tu fais cpteval = cpteval + 1, alors que cpteval = "Perturbateur". Pas très cohérent pour excel...

eric
Jamais tu ne répondras à un mp non sollicité...
Bon, ça c'est fait.
Messages postés
1274
Date d'inscription
vendredi 10 juillet 2009
Statut
Membre
Dernière intervention
28 avril 2020
48
1_ Je ne comprends pas ta parade? Il faudrait que je double clic systématiquement même à l'ouverture du fichier pour valider ma sélection dans la liste déroulante ?

2_ cpteval est un compteur. Je ne vois pas où il est égal à "Perturbateur" ?
Messages postés
1274
Date d'inscription
vendredi 10 juillet 2009
Statut
Membre
Dernière intervention
28 avril 2020
48
Merci pour tes remarques dont je ne connaissais pas les conséquences.
je vais les corriger de suite.

Sinon, le problème tu peux le voir en ouvrant le fichier la classe affichée est 6A, tu cliques sur bilan la classe affichée est 6a mais celle qui est dans la ComboBox est 6B. Clique sur bilan et tu verras que tu vas rester sur l'affichage 6A. Le changement ne se fera que si tu changes une première fois de classe dans la ComboBox (sur cette même feuille) et que tu reviens sur la 6B ensuite.

Voilà le problème...
Messages postés
1274
Date d'inscription
vendredi 10 juillet 2009
Statut
Membre
Dernière intervention
28 avril 2020
48
Pour la sélection, j'avais pensé à la faire systématiquement en présentant un vide au lieu d'un mot de la liste, systématiquement à l'ouverture de la feuille.
Mais je ne sais pas comment faire.

J'avais allongé la référence de ma liste mais Excel ne l'a pas pris en compte.

Si quelqu'un a une idée, elle est bien venue... Merci

Messages postés
23813
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
24 janvier 2021
6 590
1_ Je ne comprends pas ta parade? Il faudrait que je double clic systématiquement même à l'ouverture du fichier pour valider ma sélection dans la liste déroulante ?
Moi je ne vois pas ou ça te pose problème, tu ne l'as toujours pas dit...
A quel moment et en faisant quoi il te manque qcq chose ?
Tu peux l'initialiser également dans Workbook_Open()

2_ cpteval est un compteur. Je ne vois pas où il est égal à "Perturbateur" ?

Il suffit de cliquer sur le bouton 'perturbateur/ne fais rien' à l'ouverture (d'ailleurs j'aurais 'fait') pour avoir l'erreur.

Pour la sélection, j'avais pensé à la faire systématiquement en présentant un vide au lieu d'un mot de la liste, systématiquement à l'ouverture de la feuille.
Mais je ne sais pas comment faire.

.ListIndex = -1

eric
Messages postés
1274
Date d'inscription
vendredi 10 juillet 2009
Statut
Membre
Dernière intervention
28 avril 2020
48
1_pourtant, j'ai expliqué le problème au poste de 13H27 où il y a le lien n°4 .

Cependant, j'ai mis un worksheet_open() à la place du worksheet_activate() et ça fonctionne mais pas tout le temps. Des fois quand je bascule entre la feuille Gestion et la feuille Bilan, via les boutons sur les feuilles, si je fais MAJ (sur la feuille gestion) l'affichage change alors qu'il ne devrait pas sans que je change de classe.

2_J'ai vérifié pour le bouton "perturbateur", je n'avais pas vu! mais à mon avis il doit y avoir le même problème pour tous les boutons du coup...
... j'ai corrigé par un if qui manquait.



Merci eriiic.
Messages postés
23813
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
24 janvier 2021
6 590
1) tu avais posté 2 fois d'affilée, je n'avais vu que le dernier post...
Les 2 combobox sont totalement indépendant (même s'ils portent le même nom) car sur 2 feuilles.
Il faut les synchroniser. Partout ou un combobox change il faut faire évoluer l'autre.
Exemple sur Feuil1 :
Private Sub ComboBox1_Change()                  'Choix de la Classe
    ClasseChoisie = ComboBox1.ListIndex   'la liste commence à zéro
    Worksheets("Bilan").ComboBox1.ListIndex = ClasseChoisie
End Sub


Ou bien les mettre à jour lors de l'activation de la feuille (worksheet_activate) avec :
ComboBox1.ListIndex = ClasseChoisie
Mais dans cas il ne faut pas, si tu travailles sur Gestion par exemple, que des cellules de gestion utilisent des cellules de Bilan qui elles même dépendent de la combobox qui n'est pas encore à jour.

eric
Messages postés
1274
Date d'inscription
vendredi 10 juillet 2009
Statut
Membre
Dernière intervention
28 avril 2020
48
Bonjour,

En fait, c'est fait exprès de ne pas synchroniser les combobox de chaque feuille (Gestion et Bilan). J'aurais du vous donner le mode d'emploi.
Le mode d'emploi est :
1_ j'ouvre le classeur sur la page "Gestion". c'est ma feuille principale de travail.
2_ je sélectionne la classe (Le trimestre ne change que tous les 3 mois).
3_ je mets à jour. La classe s'affiche et je note les comportements.

Lorsque je veux faire le bilan des notes de la classe ou voir les points attribués. Je clique sur le bouton de commande "Bilan" (feuille Gestion). Et là directement, je me retrouve sur le bon trimestre de la classe qui est affichée sur la feuille Gestion.

Si je veux changer de classe, j'ai juste à changer la sélection de la feuille "Bilan" et à Valider "MAJ" pour me retrouver sur le "bilan" de la classe sélectionnée sur cette feuille.

voila.
Messages postés
23813
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
24 janvier 2021
6 590
Bonjour,

En fait, c'est fait exprès de ne pas synchroniser
Tu es plein de contradictions toi.
Si tu ne veux plus qu'ils soient identiques ils resteront différents...
Je ne comprend pas trop l'intérêt de ta question.

eric
Messages postés
1274
Date d'inscription
vendredi 10 juillet 2009
Statut
Membre
Dernière intervention
28 avril 2020
48
Bien, en fait j'ai résolue une partie du problème grâce à ton info du poste n°3.

J'ai placé ceci : ClasseChoisie = ComboBox1.ListIndex
TrimChoisi = ComboBox2.ListIndex
au début des Mises A Jour ce qui a résolue les dysfonctionnements.

Mais ma question initiale reste posée. Je la reformule plus précisément:

La prise en compte des infos dans les ComboBox de la feuille "Gestion" ne se fait pas à l'ouverture du classeur. Il faut cliquer sur le bouton "MAJ".

Est-ce qu'il y a une manière d'écrire pour exécuter, par exemple, la fonction réalisée par le bouton "MAJ" dans ma Private Sub worksheet_activate() ?

J'ai essayé en écrivant : CommandButton51_Click() = true mais ce n'est pas bon.

on y est presque...merci.
Messages postés
23813
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
24 janvier 2021
6 590
Je vais donc répondre précisément à ta question.

Normalement non.
Une procédure Private ne peut être appelée d'un autre module, de plus une feuille n'est pas un module standard mais un module de classe.

Il faut que tu mettes tout le code qui t'intéresse dans une procédure d'un module standard (en l'adaptant pour les objets comme je t'ai expliqué au dernier post car tu n'es plus dans la feuille).
Tu recomplètes ton code CommandButton51_Click par un appel à cette procédure. Et tu l'appelle également dans ton worksheet_activate.

En réalité on peut mais ça ne respecte pas les règles.
Au début il vaut mieux apprendre en faisant propre, en respectant les bases et en prenant de bonnes habitudes (même si le chemin est plus long).

Maintenant je répond à la question que tu n'as pas posée : tu as l'évènement Deactivate de Gestion ou tu peux l'appeler directement.

eric
Messages postés
1274
Date d'inscription
vendredi 10 juillet 2009
Statut
Membre
Dernière intervention
28 avril 2020
48
Ok d'accord! Bon, je vais me contenter de ce que j'ai déjà car je ne pourrais pas approfondir si je ne maitrise pas les bases déjà.

Par contre, je vais essayer de mettre mes commandes de Bilan dans un formulaire afin de les avoir à proximité même quand je suis en bas de feuille sur la dernière classe. ça m'évitera de devoir remonter en haut de page pour faire le bilan d'autres classes, et comme ça au moins je verrais les appréciations en permanence.

Merci à vous!
Bon dimanche!
Messages postés
23813
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
24 janvier 2021
6 590
As-tu lu la dernière phrase ?
eric
Messages postés
1274
Date d'inscription
vendredi 10 juillet 2009
Statut
Membre
Dernière intervention
28 avril 2020
48
Oui, mais je ne l'ai pas compris. D'où ma réponse.
Je ne veux pas prendre toute votre attention que sur mon problème et monopoliser le forum.
Sinon, je l'utilise comment Deactivate dans Gestion?
Messages postés
23813
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
24 janvier 2021
6 590
Dans la liste déroulante des évènements du worksheet.
Liste de gauche en haut mettre 'worksheet', liste de droite cliquer sur 'Deactivate'

eric