VBA Excel: probleme avec selection dans zone de liste deroulante
Résolu/Fermé
mod77
Messages postés
1273
Date d'inscription
vendredi 10 juillet 2009
Statut
Membre
Dernière intervention
14 janvier 2024
-
30 nov. 2012 à 21:37
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 - 2 déc. 2012 à 22:55
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 - 2 déc. 2012 à 22:55
A voir également:
- VBA Excel: probleme avec selection dans zone de liste deroulante
- Liste déroulante excel - Guide
- Si et excel - Guide
- Word et excel gratuit - Guide
- Déplacer une colonne excel - Guide
- Excel compter cellule couleur sans vba - Guide
6 réponses
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 256
Modifié par eriiic le 30/11/2012 à 22:10
Modifié par eriiic le 30/11/2012 à 22:10
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.
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.
mod77
Messages postés
1273
Date d'inscription
vendredi 10 juillet 2009
Statut
Membre
Dernière intervention
14 janvier 2024
53
1 déc. 2012 à 11:53
1 déc. 2012 à 11:53
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.
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.
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 256
Modifié par eriiic le 1/12/2012 à 13:02
Modifié par eriiic le 1/12/2012 à 13:02
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.
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.
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.
mod77
Messages postés
1273
Date d'inscription
vendredi 10 juillet 2009
Statut
Membre
Dernière intervention
14 janvier 2024
53
1 déc. 2012 à 13:37
1 déc. 2012 à 13:37
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" ?
2_ cpteval est un compteur. Je ne vois pas où il est égal à "Perturbateur" ?
mod77
Messages postés
1273
Date d'inscription
vendredi 10 juillet 2009
Statut
Membre
Dernière intervention
14 janvier 2024
53
1 déc. 2012 à 13:27
1 déc. 2012 à 13:27
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...
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...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
mod77
Messages postés
1273
Date d'inscription
vendredi 10 juillet 2009
Statut
Membre
Dernière intervention
14 janvier 2024
53
1 déc. 2012 à 13:44
1 déc. 2012 à 13:44
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
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
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 256
Modifié par eriiic le 1/12/2012 à 15:12
Modifié par eriiic le 1/12/2012 à 15:12
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
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
mod77
Messages postés
1273
Date d'inscription
vendredi 10 juillet 2009
Statut
Membre
Dernière intervention
14 janvier 2024
53
Modifié par mod77 le 1/12/2012 à 20:19
Modifié par mod77 le 1/12/2012 à 20:19
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.
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.
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 256
1 déc. 2012 à 23:52
1 déc. 2012 à 23:52
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 :
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
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
mod77
Messages postés
1273
Date d'inscription
vendredi 10 juillet 2009
Statut
Membre
Dernière intervention
14 janvier 2024
53
2 déc. 2012 à 10:47
2 déc. 2012 à 10:47
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.
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.
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 256
2 déc. 2012 à 12:33
2 déc. 2012 à 12:33
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
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
mod77
Messages postés
1273
Date d'inscription
vendredi 10 juillet 2009
Statut
Membre
Dernière intervention
14 janvier 2024
53
2 déc. 2012 à 13:15
2 déc. 2012 à 13:15
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.
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.
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 256
Modifié par eriiic le 2/12/2012 à 13:31
Modifié par eriiic le 2/12/2012 à 13:31
oui, tu peux, mais faut lui dire la feuille.
Comme au post 9 :
Worksheets("Bilan").ComboBox1.ListIndex = ClasseChoisie
Et si tu en as plusieurs utilises :
with Worksheets("Bilan")
.ComboBox1. ... = ...
....
end with
eric
Comme au post 9 :
Worksheets("Bilan").ComboBox1.ListIndex = ClasseChoisie
Et si tu en as plusieurs utilises :
with Worksheets("Bilan")
.ComboBox1. ... = ...
....
end with
eric
mod77
Messages postés
1273
Date d'inscription
vendredi 10 juillet 2009
Statut
Membre
Dernière intervention
14 janvier 2024
53
2 déc. 2012 à 14:04
2 déc. 2012 à 14:04
Excuse moi encore eriiic, mais je ne crois pas que ta réponse soit adéquate?
Je ne veux pas synchroniser les ComboBox, mais juste exécuter la commande du bouton MAJ sans avoir à appuyer sur celui-ci à l'ouverture de la feuille Gestion.
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() 'Gestion, STP?
J'ai essayé en écrivant : CommandButton51_Click() = true mais ce n'est pas bon, idem pour CommandButton51.
Je ne veux pas synchroniser les ComboBox, mais juste exécuter la commande du bouton MAJ sans avoir à appuyer sur celui-ci à l'ouverture de la feuille Gestion.
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() 'Gestion, STP?
J'ai essayé en écrivant : CommandButton51_Click() = true mais ce n'est pas bon, idem pour CommandButton51.
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 256
Modifié par eriiic le 2/12/2012 à 16:36
Modifié par eriiic le 2/12/2012 à 16:36
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
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
mod77
Messages postés
1273
Date d'inscription
vendredi 10 juillet 2009
Statut
Membre
Dernière intervention
14 janvier 2024
53
2 déc. 2012 à 17:33
2 déc. 2012 à 17:33
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!
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!
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 256
2 déc. 2012 à 19:41
2 déc. 2012 à 19:41
As-tu lu la dernière phrase ?
eric
eric