ListeMacroDéroulanteDynamique

  • Initiateur de la discussion RM
  • Date de début
R

RM

Guest
Bonjour,

Pour faire suite aux messages de Phil et Céléda concernant les interventions sur le sujet en référence.
Pour tester le fichier qui était proposé, j'ai remplacé dans la base les informations : Machine1A à Machine 1G par des chiffres. Dans ce cas, la fonction (code VBA) bloque sur .Modify Formula1:="=ListeNoms"
Probablement que la fonction DECALER .... a un problème

Merci de votre aide
 
T

Ti

Guest
Bon, alors comme je vous vois tous bien en peine avec les macros de ce fichier, je vous joins ici une version modifiée qui fonctionne, moyennant une précaution élémentaire que vous aviez tous oubliée. Pour que ça fonctionne, les cellules contenant les listes de validation ne doivent pas être fusionnées. Tous vos problèmes venaient de là.
D'autre part, comme la structure de la feuille base me gênait un peu durant la correction, je l'ai scindée en 3 pour que ce soit plus clair, mais ce n'est pas une obligation.

Moralité de tout cela : n'oubliez pas que ceci était au départ un petit bricolage que j'avais effectué à la demande d'André et de Celeda, qui aiment bien se lancer "pour le sport" ce genre de défis dans lesquels j'interviens en général en final pour la partie programmation, mais cela reste tout de même du bricolage et ce bricolage impose quelques précautions d'emploi.
 

Pièces jointes

  • Liste_DynamiqueTi.zip
    22.6 KB · Affichages: 31
  • Liste_DynamiqueTi.zip
    22.6 KB · Affichages: 32
  • Liste_DynamiqueTi.zip
    22.6 KB · Affichages: 35
P

Phil

Guest
Salut ti,

J'ai essayé le fichier joint, mais ça ne fonctionne pas..

Je suis surpris, j'ai essayé les trois listes, je n'ai pas le 2ème choix sur ma liste en colonne B et je n'ai que le 2ème choix sur les 2 autres..

Je ne vois pas d'ou ça vient. A part ça j'ai bien pris note du fusionnage des cellules, j'ignorais totalement que ça pouvait influencer.

N'hésite pas si tu as la solution.

Je voudrais avoir ton avis personnel sur mon fichier. Il va servir à encoder les heures effectuées à différents endroits et différentes catégories. Il sera encodé par les différentes personnes. Je vais créer une macro qui me validera les données et les copiera vers un autre fichier. Mais le seul soucis que j'ai peur de rencontrer, c'est qu'il y aura toujours quelque chose d'écris dans mes listes, même avant qu'il commence à encoder.



Encore merci.

@+

Phil
 
P

Phil

Guest
Ti , excuse moi, j'avais du faire une fausse manip, le fichier fonctionne à merveille comme tu l'a annoncé.

Je l'ai juste refermé et réouvert et hop ça marche.

Lorsque je l'ai ouvert j'avais plusieurs fichier excel en cours donc il n'a peut être pas aimé.

Donne moi ton avis quand même pour mon projet.

Merci et bonne journée!

@+

Merci
 
C

Celeda

Guest
Bonjour le Forum,

Y-a- un grand soleil dehors mais mainteannt que j'ai lu ce post (qui n'est pas panégyrique ) y-a un grand soleil qui vient de rentrer sur ce post.

T'es un grosamour TI !!!! Je t'adore dans ces moments là !!!


Et on en prend bonne note que c'est du bricolage mais du bricolage de la Maison Ti !!!


Merci pour le coup de mains.

Celeda
 
P

Phil

Guest
Salut tous le monde,

Je reviens à la charge pour terminer mon projet.

Pour les listes à choix multiples c'est ok ça marche nickel.

Je vous joint le fichier afin que vous puissez me dépanner sur le blocage de ma macro qui se nomme "Validez".
Lorsque je l'éxécute avec le bouton "Validez votre saisie" sur la feuille " Liste1 " j'ai un blocage vers la fin de la macro au moment ou il doit supprimer les données inscrites au préalable. Et en plus il me renvoie sur la macro que Ti avait créé pour les listes à choix multiples. Donc là je ne comprend pas.

Faites attention il y a des feuilles de masquées, c'est normal, et dans ma macro "Validez" il y a un fichier qui se nomme "Mensuel"qui es normalement sur le C: que je ne peux pas vous envoyer.

J'espère qu'avec ces infos vous pourrez m'aider à voir presque la fin de ce fichier qui a fait couler beaucoup de post....

Bonne journée! et merci pour tout..

@+

Phil
 

Pièces jointes

  • Liste_DynamiqueTi.zip
    24.5 KB · Affichages: 23
  • Liste_DynamiqueTi.zip
    24.5 KB · Affichages: 22
  • Liste_DynamiqueTi.zip
    24.5 KB · Affichages: 17
V

Vériland

Guest
Salut le forum, salut Phil,

effectivement tu reviens à la charge...et je dirais même plus...d'une manière un peu particulière...

Permet moi d'apporter une petite remarque sur ton dernier fichier joint...

Il existe depuis longtemps dans ce forum, des personnes qui après leur intervention réussissent à faire en sorte qu'une question technique devienne une réference dans VBA simplement par la réponse donnée...je dirais même qu'ici on atteint un niveau magistral...

Magistral, puisque la réponse de Ti va bien au delà d'une simple programmation...Il m'est apparu dans ce fichier une volonté de la part de son auteur, de laisser à l'ensemble des lecteurs le moyen d'y d'accéder avec en plus une ouverture d'esprit, que ce soit pour le fichier que pour VBA...c'est ce que j'appelle le partage...

Or maintenant, ce même fichier je le retrouve ici avec des modifications d'affichage dans son contenu (feuille cachée, macro ouverture de fichier qui n'existe pas)...Déjà qu'il devient très difficile de s'approprier d'une nouvelle question mais il est aussi necessaire de chercher les données...

bon je n'ai pas suivi d'une manière assidue l'origine de ton fichier et je n'ai pas d'emblée une réponse précise à ton problème...

La chose qui apparait clairement dans la macro est celle d'effectuer une sauvegarde automatique de ce fichier par l'action :

ActiveWorkbook.Save

et d'autre part de la fermeture par :

ActiveWindow.Close

donc, il est difficile d'aller plus loin...en résumé je ne comprends pas bien ton problème...

Je suis dans ce forum un lecteur (participant) et j'ai de ce fait un plaisir non simulé de suivre l'ensemble des posts...ceci me permet d'une part de suivre la progression pour y trouver des réponses appropriées et d'autre part d'apprécier l'engagement de certains bénévoles...mais là j'ai l'impression de tourner en rond...

A+ Vériland

PS : euh...il est aussi IMPORTANT de ne pas envoyer un nouveau fichier avec le même NOM que celui qui à été corrigé...à savoir ici (Liste_DynamiqueTi)...il peut y avoir confusion...je pense par exemple, que le simple fait de le sauvegarder sous l'option Liste_DynamiqueTi_modif nous aurait permis de savoir qu'il s'agissait d'une autre version...
 
T

Ti

Guest
Voilà ton fichier modifié. Effectivement, ma macro événementielle plantait à cause d'un défaut très gênant de VBA : il ne s'arrête pas dans un test logique quand celui-ci est vrai, et teste (inutilement) tous les termes, ce qui souvent provoque des erreurs.

Donc, pour ceux que cela intéresse, dans l'événement Worksheet_Change, il faut modifier les lignes

With Target
If .Rows.Count > 1 Or .Columns.Count > 1 or .Value = "" Then Exit Sub
End With

par :

With Target
If .Rows.Count > 1 Or .Columns.Count > 1 Then Exit Sub
If .Value = "" Then Exit Sub
End With

J'ai aussi un peu amélioré ta macro "Validez".
 

Pièces jointes

  • Liste_DynamiqueTi2.zip
    26.9 KB · Affichages: 27
C

Celeda

Guest
Bonsoir,

Ben oui ils sont au moins deux à être intéressés :André et moi. Tu t'imagines où nous en sommes André, aprés cette nuit de beuverie que nous avons faite et regarde où cela nous conduit ; Heureusement, il y a un pilote dans l'avion !!!!

Mericiiiciciciciciciciciciciciicicicicicciicicic Tititititititiitittitiiti!!!!!

Celeda
 
P

Phil

Guest
Salut tous le monde,

Pour vériland,

Excuse moi vériland de t'avoir un peu déçu, mais je ne suis pas un pro, alors je m'appuie sur des personnes bénévoles compétentes. J'ai pris note pour l'envoie du dernier fichier, c'est ok je le renommerais à l'avenir. Je suis à fond sur ce petit projet que je fais partager et j'essaye d'avancer et d'apprendre en même temps.

Pour toutes les personnes qui ont participer au projet, merci merci et encore merci, j'espère que ça pourra servir à d'autres. On ai parti d'un super petit programme pour en arriver à mon projet. Bravo tous le monde.

Bonne journée

Merci beaucoup Ti

@+

Phil
 
@

@+Thierry

Guest
Re:

Bonjour à tous les gens ce Fil et ce Phil aussi !

Grace à notre Celeda préférée qui vient de nous a "linker" gentillement sur ce fil, j'ai pu tomber ici, ce qui me fait donc découvrir le post de Ti...

un défaut très gênant de VBA : il ne s'arrête pas dans un test logique quand celui-ci est vrai, et teste (inutilement) tous les termes

Par conséquent Ti, il ne faut pas écrire aucun if comme ceci
If Texbox1 <> "Toto" or Texbox1 <> "Zaza" Then...

Mais appliquer ce genre de syntax systématiquement :
With TextBox1
If .Value <> "Toto" Then...
If .Value <> "Zaza" Then...
End With

Ben si tu me confirmes ça, alors je dois vérifier plein de progs qui tournent.... car j'ai toujours appliqué la méthode du dessus...

Bonne Journée
@+Thierry
 
T

Ti

Guest
Re:

Salut Thierry. J'avais pas vu cette dernière question. Non, en fait dans ce cas : If Texbox1 <> "Toto" or Texbox1 <> "Zaza" Then... tu peux garder ton test ainsi puisqu'il ne provoquera pas d'erreur d'éxécution.
Par contre dans mon test précédent :

With Target
If .Rows.Count > 1 Or .Columns.Count > 1 or .Value = "" Then Exit Sub
End With

il se passe la chose suivante : s'il y a plus d'une ligne ou d'une colonne, alors la valeur de la cellule ne peut pas être renvoyée (puisqu'il y a alors plusieurs valeurs !). La plupart des langages de programmation, pour accélérer l'exécution du programme, s'arrêtent au premier test s'il est vrai (ici s'il y a plusieurs cellules sélectionnées) et donc n'iront pas dans ce cas faire le test .Value = "" (pour être précis, ils peuvent le faire, mais c'est une option de compilation qui le permet).
VBA, lui, garde les défauts de ses origines et teste tout. Et alors ça plante. J'ai beau le savoir, il m'arrive parfois de l'oublier... comme ci-dessus
 

Discussions similaires

Statistiques des forums

Discussions
312 489
Messages
2 088 855
Membres
103 977
dernier inscrit
Hermet