Remise à" blanc "d' une zone de liste déroulante
#1
Aspirant XLPages

Inscription: 20/04/2010

Messages: 28

Système d'exploitation:
PC
Version Excel utilisée:
2007
Posté le : 08-07-2010 21h01
 Bonsoir le Forum,

J'ai une liste déroulante dans laquelle je sélectionne une valeur qui va se coller dans une cellule.
Il faudrait ensuite que cette zone de liste déroulante redevienne vierge.

j'avais songé (dans le fichier que je vous invite à ouvrir pour plus d'explications) nommée une zone en laissant une cellule vide afin de la retrouver dans ma liste déroulante et de l'inclure dans la macro, mais à l'exécution de celle-ci la zone de liste déroulante laisse apparaitre la derniere sélection.

En espérant avoir été assez clair

Très bonne soirée à Tous

Wilplan 


Pièce jointe:
xlsm menu deroulant.xlsm   [ Taille: 19.22 Ko - Téléchargements: 820 ]
Hors Ligne
Rapport   Haut 

Re: Remise à" blanc "d' une zone de liste déroulante
#2
Webmestre

Inscription: 18/05/2006
De Saône-et-Loire (71)

Messages: 1539

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 08-07-2010 23h40
Bonsoir wilplan, le Forum,

Pas vraiment claire ton histoire wilplan...

Tout d'abord, tu as utilisé une zone de liste issue des "Contrôles de Formulaire". Pour info, depuis Office 97, il est toujours conseillé d'utiliser les éléments de "Contrôles ActiveX" en lieu et place des "Contrôle de Formulaire". Pourquoi ? Déjà parce que les contrôles ActiveX savent gérer en interne des procédures évènementielles (telles que Change, Click, DblClick, GotFocus, etc...), ce que ne permettent pas les anciens Contrôles de Formulaire. Dans Excel 2007, les éléments ActiveX et Formulaire sont accessibles via le même menu d'insertion mais apparaissent sous forme de 2 sous-groupes distincts (voir dans le ruban 2007, onglet Développeur). Pour quelques explications et détails sur ce qui différencie les Contrôles de Formulaire et les ActiveX, je te conseille de jeter un oeil sur les Tutoriels n°3 et 4 que tu trouveras dans la section articles et tutoriels "VBA pour débutants" du présent site.

Par ailleurs, que ce soit à base de contrôles ActiveX ou contrôles de Formulaire, en fait, je pense tout simplement qu'une quarantaine d'objets de la sorte sur une feuille de calcul ce n'est pas une bonne idée. Tu risques fort de transformer ta belle feuille de calcul en une immonde usine à gaz...

Je pense, par contre, que tu aurais certainement possibilité d'exploiter les listes dites "listes de validation", et qui me semblent bien mieux adaptées pour être utiliser en grande quantité comme ça, sur une feuille de calcul. Maintenant, reste à coupler l'ensemble avec un peu de VBA pour arriver à ton objectif de traitement... et si tu veux qu'on t'aide, il va falloir que tu sois un peu plus précis dans tes explications, car pour ma part, je ne vois pas vraiment où tu veux en venir avec ton unique liste en exemple qui vient coller une valeur dans une unique cellule cible...

Tu parles d'une quarantaine de listes sur 2 colonnes : comment et où sont-elles disposées exactement dans la feuil1 ?

Ensuite, on sait que la première liste va déposer une valeur en cellule A1 de la feuil2 : où doivent être stockées les valeurs des 39 autres liste et selon quel ordre, quelle méthodologie ?

Qu'advient-il si l'utilisateur fait un deuxième choix avec la même liste ? On écrase la valeur précédente en Feuil2 ?

Comme tu peux t'en apercevoir, ce qui paraît clair dans ta tête, ne l'est pas forcément pour un regard extérieur.

Cordialement,


Didier_mDF
Image redimensionnée
Le Webmaster

La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
Hors Ligne
Rapport   Haut 

Re: Remise à" blanc "d' une zone de liste déroulante
#3
Aspirant XLPages

Inscription: 20/04/2010

Messages: 28

Système d'exploitation:
PC
Version Excel utilisée:
2007
Posté le : 09-07-2010 10h19
Bonjour Didier, le Forum,

Je vais essayer par le fichier joint de mieux me faire comprendre, j'espère être assez précis et complet. 

très cordialement,

wilplan

 


Pièce jointe:
xlsm menu deroulant.xlsm   [ Taille: 33.46 Ko - Téléchargements: 944 ]
Hors Ligne
Rapport   Haut 

Re: Remise à" blanc "d' une zone de liste déroulante
#4
Webmestre

Inscription: 18/05/2006
De Saône-et-Loire (71)

Messages: 1539

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 10-07-2010 00h59
Bonsoir wilplan, le Forum,

Si j'ai bien compris le problème, tu trouveras ci-joint peut-être une façon de faire...

J'ai appliqué de simples listes de validation en Feuil1 au lieu de tes contrôles de liste déroulante.

Pour simplifier, j'ai nommé 6 zones sur tes feuilles :
- sur la Feuil1 :
 . nommage des listes (que tu peux aussi mettre sur un autre onglet par souci esthétique) : Communes et Durees.
  . nommage des cellules de saisie (avec listes de validation) : zoneCommunes et zoneDurees.
- sur la Feuil2 :
. nommage des cellules de destination : cibleCommunes et cibleDurees.

J'ai ensuite utilisé le code suivant (lié aux boutons "Copie" et "RAZ") :
Sub CopieFeuil2()
    With Range("zoneCommunes")
        Sheets("Feuil2").Range("cibleCommunes").Value = .Value
        .ClearContents
    End With
    With Range("zoneDurees")
        Sheets("Feuil2").Range("cibleDurees").Value = .Value
        .ClearContents
    End With
End Sub

Sub RAZ()
    Range("cibleCommunes").ClearContents
    Range("cibleDurees").ClearContents
End Sub

A vrai dire, je ne comprends toujours pas pourquoi tu souhaites passer par l'intermédiaire de la Feuil1, tout peut être géré directement en Feuil2, mais bon tu dois avoir tes raisons...

Cordialement,
Pièce jointe:
zip PourWilplan.zip   [ Taille: 19.80 Ko - Téléchargements: 983 ]

Didier_mDF
Image redimensionnée
Le Webmaster

La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
Hors Ligne
Rapport   Haut 

Re: Remise à" blanc "d' une zone de liste déroulante
#5
Aspirant XLPages

Inscription: 20/04/2010

Messages: 28

Système d'exploitation:
PC
Version Excel utilisée:
2007
Posté le : 10-07-2010 10h35
Bonjour Didier, le forum,

Je n'avais pas songé aux listes de validation, c'est sur que le rendu est bien plus net.
Dans ces conditions, je m'empresse de tout gérer sur la même feuille.

Merci pour ton aide toujours aussi efficace.

Bien cordialement,

Wilplan 
Hors Ligne
Rapport   Haut 

Re: Remise à" blanc "d' une zone de liste déroulante
#6
Aspirant XLPages

Inscription: 20/04/2010

Messages: 28

Système d'exploitation:
PC
Version Excel utilisée:
2007
Posté le : 14-07-2010 11h48
Bonjour le Forum,

Je souhaite apporter une petite modification à mon projet, de ce fait j'en reviens à mes deux feuilles.

j'ai crée une formule qui me renvoie "REF" si dans la plage de recherche la cellule est vide, j'ai joué de guillemets mais rien n'y fait. Bon d'accord elle fonctionne, mais si un As de la formule passe par là!! c'est que je deviens puriste

Comme je fais une RAZ, ma formule se trouve également supprimée, c'est là qu'il me faut l'intervention d'un vbaiste

Je vous joins le fichier en espérant avoir été clair dans mes explications

Bonne journée et merci
Wilplan 


Pièce jointe:
xlsm exoptour.xlsm   [ Taille: 22.54 Ko - Téléchargements: 696 ]
Hors Ligne
Rapport   Haut 

Re: Remise à" blanc "d' une zone de liste déroulante
#7
Webmestre

Inscription: 18/05/2006
De Saône-et-Loire (71)

Messages: 1539

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 14-07-2010 18h42
Bonjour wilplan, le Forum,

Ci-dessous sans doute une façon de faire...

Formule enJ3 Feuil1(à tirer vers le bas):
=SI(I3<>"";T(INDEX(libellé;EQUIV(I3;durees)));"")
Rq : tant qu'à nommer des plages de cellules, autant se servir de leur nom dans les formules de feuille de calcul aussi !

Dans le module de code VBA Module1 :
Option Explicit

Sub CopieFeuil2()
    With Range("zoneCommunes")
        Sheets("Feuil2").Range("cibleCommunes").Value = .Value
        .ClearContents
    End With
    Sheets("Feuil2").Range("ciblelibellé").Value = Range("zonelibellé").Value
    With Range("zoneDurees")
        Sheets("Feuil2").Range("cibleDurees").Value = .Value
        .ClearContents
    End With
End Sub

Sub RAZ()
    Range("cibleCommunes").ClearContents
    Range("cibleDurees").ClearContents
    Range("ciblelibellé").ClearContents
End Sub

Cordialement,

Didier_mDF
Image redimensionnée
Le Webmaster

La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
Hors Ligne
Rapport   Haut 

Re: Remise à" blanc "d' une zone de liste déroulante
#8
Aspirant XLPages

Inscription: 20/04/2010

Messages: 28

Système d'exploitation:
PC
Version Excel utilisée:
2007
Posté le : 14-07-2010 21h12
Bonsoir Didier, le forum,

Encore un succès.
Je prends bonne note de ta remarque, à vrai dire je le savais mais les automatismes ne sont pas tout à fait au point, j'y veillerai à l'avenir, d'autant que cela facilite la compréhension.

Je profite de ma réponse pour obtenir quelques explications supplémentaires.
  • dans la formule, que veux dire le T  ?
  • Concernant le code VBA je souhaite qu'après la suppression des choix dans les listes de données me retrouver sur la feuil2.
(hormis sheets feuil2.select,) je ne sais pas faire et comme je ne voudrais pas "esquinter" le code ...
  • Aussi, qu'est ce qui fait dans le code que ça n'écrase pas la formule?

Merci Didier pour ton aide

Bien Cordialement,
 
Hors Ligne
Rapport   Haut 

Re: Remise à" blanc "d' une zone de liste déroulante
#9
Webmestre

Inscription: 18/05/2006
De Saône-et-Loire (71)

Messages: 1539

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 14-07-2010 23h25
Re,

Citation :
wilplan a écrit :
  • dans la formule, que veux dire le T  ?
En toute honnêteté wilplan, je l'ai déjà revendiqué à plusieurs reprises ici (et ailleurs) : en matière de Formules de feuille de calcul, je me situe dans la noble catégorie des tout débutants. Ce n'est pas exagéré, ce n'est pas de la fausse modestie non plus, c'est tout simplement la vérité.

Si tu supprimes cette fonction T() de la formule et que tu choisis une durée de travail à 40 ou 50 dans ton exemple, tu verras s'afficher une valeur "0" disgracieuse dans ton tableau. C'est l'observation que j'ai faite quand j'ai testé ma proposition à l'origine. J'ai donc essayé de trouver une solution pour me débarrasser de cette valeur numérique inopportune dans la cellule...

Il y a bien sûr un moyen simple d'y parvenir avec une simple condition SI(), mais comme j'aime bien optimiser les choses et que j'aime bien apprendre aussi, j'ai cherché une autre solution qui me paraisse moins lourde.
Un clic sur le bouton d'insertion des fonctions (bouton fx) et j'ai parcouru les fonctions de la catégorie Texte. Je suis donc tombé sur la fonction T() dont l'aide indique : Si l'argument valeur est ou fait référence à du texte, la fonction T renvoie l'argument. Si l'argument valeur ne fait pas référence à du texte, la fonction T renvoie du texte vide "". Un test m'a ensuite permis de comprendre que c'était visiblement la réponse à mon problème.

Comme tu peux le voir, rien d'extraordinaire dans ma démarche, juste de la curiosité et des tests (pour moi, c'est comme ça qu'on apprend).

Citation :
wilplan a écrit :
Concernant le code VBA je souhaite qu'après la suppression des choix dans les listes de données me retrouver sur la feuil2. (hormis sheets feuil2.select,) je ne sais pas faire et comme je ne voudrais pas "esquinter" le code ...

Pour moi, ça fait très bien l'affaire.
Sheets("Feuil2").Select
Cette ligne ajoutée en fin de procédure CopieFeuil2() est tout à fait correcte.
"Tester" wilplan, "tester", c'est la clé si tu veux comprendre et apprendre...

Citation :
wilplan a écrit :
Aussi, qu'est ce qui fait dans le code que ça n'écrase pas la formule?

Si tu observes la procédure CopieFeuil2(), tu verras que j'ai utilisé la méthode ClearContents pour les zones nommées "zoneCommunes" et "zoneDurees", mais pas pour "zonelibellé".
Comme son nom l'indique ClearContents permet d'effacer le contenu d'un objet Range. Pour la zone range "zonelibellé", il n'y a rien à effacer, c'est inutile puisque la formule contenue n'affiche rien si la "zoneDurees" est elle-même vide.

Cordialement,


Didier_mDF
Image redimensionnée
Le Webmaster

La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
Hors Ligne
Rapport   Haut 

Re: Remise à" blanc "d' une zone de liste déroulante
#10
Aspirant XLPages

Inscription: 20/04/2010

Messages: 28

Système d'exploitation:
PC
Version Excel utilisée:
2007
Posté le : 15-07-2010 09h24
Bonjour myDearFriend, le forum, 

J'ai tellement appris en si peu de temps grâce à ton site d'ailleurs, que quelquefois les réflexes les plus simples m'échappent. Je dois avoir besoin de vacances.

Merci pour tes explications qui complétent mes tests (si,si j'en fais beaucoup, mais plus souvent faux que justes)

Dans un précédent post, tu me conseillais de supprimer les "select" de mes codes, pour la lisibilité et la rapidité d'exécution de la macro.
Pour mes besoins j'avais donc rajouté sheets feuil2 .select (ne sachant pas faire autre chose)à ton code mais par respect pour ton travail et aussi parceque j'aime le travail bien fait j'aurai souhaité l'écrire différemment, si c'était possible.

Bonne journée

cordialement,

Wilplan 




Hors Ligne
Rapport   Haut 


Vous pouvez voir les sujets.
Vous ne pouvez pas débuter de nouveaux sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

[Recherche avancée]


Qui consulte actuellement ce sujet ?   1 Utilisateur(s) anonymes