IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Exprimer la condition


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 85
    Par défaut Exprimer la condition
    Bonjour,

    J'ai créé un tableau Excel comprenant x colonnes dont 3 sont des listes déroulantes qui permettent de restreindre l'utilisateur à un certain nombre de champs.

    Appelons LD1, LD2 et LD3 ces 3 listes déroulantes.

    Je souhaite exprimer la condition à partir de l'exemple suivant :
    LD1 = animal
    LD2 = race
    LD3 = couleur pelage

    Si l'utlisateur choisit le champ "Chat" dans LD1, alors LD2 proposera une liste de races de chats. Si l'utilisateur choisit "Chat angora" dans LD2, alors LD3 proposera une liste des pelages possibles pour un chat angora.

    Si au contraire, l'utlisateur choisit le champ "Chien" dans LD1, alors LD2 proposera une liste de races de chiens. Si l'utilisateur choisit "Berger Allemand" dans LD2, alors LD3 proposera une liste des pelages possibles pour un Berger Allemand.

    En préalable à tout ça, j'ai créé des listes :
    - liste générale : "chat", "chien"
    - liste des races de chats : .....
    - liste des races de chiens : ....
    - listes des pelages de chats de race x : ....
    - listes des pelages de chats de race y : ....
    - listes des pelages de chats de race z : ....
    - listes des pelages de chiens de race x : ....
    - listes des pelages de chiens de race y : ....
    - listes des pelages de chiens de race z : ....

    Dans Données > Validation > Autoriser Liste, je choisis pour LD1, la liste générale chat chien, mais comme LD2 est dépendante de LD1 et LD3, de LD2, quelle liste dois-je choisir pour les autres colonnes ?

    En bref, comment exprimer cette conditionnalité ?

    J'espère avoir été suffisamment claire. Je vous remercie pour vos éclairages.

  2. #2
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Dans cette exemple ta liste 1 est en A1 et la liste 2 est en B1
    La liste des races de chats sont dans la plage nomée "chat" et chien dans "chien"

    Je suis partie en cosiderant que chaque type d'animaux a sa propre liste

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$A$1" Then
     
    Select Case UCase(Target.Value)
     
        Case "CHAT"
            Range("B1").Select
            With Selection.Validation
                .Delete
                .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                xlBetween, Formula1:="=chat"
                .IgnoreBlank = True
                .InCellDropdown = True
                .InputTitle = ""
                .ErrorTitle = ""
                .InputMessage = ""
                .ErrorMessage = ""
                .ShowInput = True
                .ShowError = True
            End With
     
        Case "CHIEN"
            Range("B1").Select
            With Selection.Validation
                .Delete
                .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                xlBetween, Formula1:="=chien"
                .IgnoreBlank = True
                .InCellDropdown = True
                .InputTitle = ""
                .ErrorTitle = ""
                .InputMessage = ""
                .ErrorMessage = ""
                .ShowInput = True
                .ShowError = True
            End With
     
    End Select
    End If
     
    End Sub

  3. #3
    Membre Expert Avatar de wilfried_42
    Homme Profil pro
    Auto-entrepreneur
    Inscrit en
    Novembre 2006
    Messages
    1 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Auto-entrepreneur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 427
    Par défaut
    Bonjour à tous en cette vraie journée d'automne

    Voici un fichier facilement adaptable sur ta base de données

    il travail selon les menus Popup, bien sur ceci n'est qu'un exemple

  4. #4
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 85
    Par défaut Quelques précisions.
    Je te remercie beaucoup pour ta réponse. Par contre, comme je ne suis pas du tout une spécialiste du vba sous Excel, peut-être pourrais-tu me donner quelques précisions sur ton code ?

    Concrètement :
    - Liste colonne A : champs relatifs à l'animal : "chat", "chien"
    - Liste colonne B : champs relatifs aux races de chats : "chat angora", "chat siamois", "chat chartreux", etc.
    - Liste colonne C : champs relatifs aux races de chiens : "chien Berger Allemand", "chien Berger Belge", "chien fox terrier", etc.
    - Liste colonne D : champs relatifs au pelage des chats angora : "beige", "noir", "blanc"
    - Liste colonne E : champs relatifs au pelage des chats siamois : "noirs", "gris", "blanc"
    - Liste colonne F : champs relatifs au pelage des chats chartreux : "gris"
    - Liste colonne G : champs relatifs au pelage des chiens Bergers Allemands : "beige", "noir"
    - Liste colonne H : champs relatifs au pelage des chiens Bergers Belges : "beige", "noir"
    - Liste colonne I : champs relatifs au pelage des chiens Fox terriers : "gris", "noir", "blanc"

    Mes cellules à remplir sont :
    A8 : type d'animal (à remplir grâce à liste colonne A)
    B8 : race animal (à remplir grâce à liste colonne B ou C, en fonction du type d'animal choisi)
    C8 : couleur pelage animal (à remplir grâce à liste colonne D, E, F, G, H ou I, en fonction du type d'animal et de la race d'animal choisis)

    Dans ton code, quelle expression signifie :
    Si A8 = "chat" alors liste de choix en B8 = liste colonne B
    Si B8 = "chat angora" alors liste de choix en C8 = liste colonne D ?

    Je suis désolée de poser des questions sans doute basiques, mais c'est pour être sûre de bien comprendre.

    Encore merci pour ta réponse.

  5. #5
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Le mieux serait que tu fasses suivre ton fichier que l'on puisse le modifier et te le retourner

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Déjà, dans une feuille Excel, tu n'as que deux dimensions.
    Comme au départ tu en as trois, sépare les chiens et les chats dans deux feuilles différentes, ça évitera les "embrouilles"...
    A partir de là, tu pourras faire une colonne de type de chats ou de chiens et en face, leurs couleurs.
    Mais je te laisse avec jfontaine et wielfried

  7. #7
    Membre Expert Avatar de wilfried_42
    Homme Profil pro
    Auto-entrepreneur
    Inscrit en
    Novembre 2006
    Messages
    1 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Auto-entrepreneur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 427
    Par défaut
    re: Bonjour ouskel'n'or

    Personnelement, je n'ai pas besoin de macro pour réliser cela, un peu de rnagement, quelques plages bien nommées et en avant les listes de validation

    m'enfin le fichier que j'ai envoyé, demande tout de meme une refonte de sa base de données

  8. #8
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 85
    Par défaut Voici le fichier.
    Je te remercie de me proposer de voir mon fichier. Pour que ce soit simple (j'espère), je l'ai mis avec la même mise en forme que le tien.

    L'exemple des chats et des chiens, c'était pour que ce soit plus clair. En réalité, mon fichier parle d'agriculture.

    Encore un grand merci pour tes conseils.
    Fichiers attachés Fichiers attachés

  9. #9
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Citation Envoyé par wilfried_42 Voir le message
    re: Bonjour ouskel'n'or

    Personnelement, je n'ai pas besoin de macro pour réliser cela, un peu de rnagement, quelques plages bien nommées et en avant les listes de validation

    m'enfin le fichier que j'ai envoyé, demande tout de meme une refonte de sa base de données
    Effectivement, des plages nommées permettent de ranger ses affaires mais la mise à jour d'une plage nommée demande des précausions que je préfère éviter. Je pense toujours au jour où je voudrai passer ma base sur Access. Une feuille peut facilement devenir une table, avec un plage nommée ça devient tout de suite plus compliqué... Mais ce n'est qu'un avis et loin de moi l'idée d'en exclure l'usage

  10. #10
    Membre Expert Avatar de wilfried_42
    Homme Profil pro
    Auto-entrepreneur
    Inscrit en
    Novembre 2006
    Messages
    1 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Auto-entrepreneur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 427
    Par défaut
    re:

    en voyant le fichier que tu as envoyé, c'est la solution menu popup choisie

    Donc, j'ai modifié ta base pour y accoler en colonne A un code (bidon, un numero progressif) qui doit etre different sur chaque ligne

    le feuille MENU, je 'lai aussi remaniée (Cases bleues, pour l'adaptée à ta base)

    Ce gestionnaire de menus deroulant est entierement adaptable pour toutes les bases de données et la page menu (Cases bleues et entete de colonne est la seule chose que l'utilisateur aie besoin de faire

    Tu disposes de trois procedures disponibles :

    Prep_menu : qui doit etre lancée à chaque modification de la base de donnée d'origine, elle prepare le menu (Feuille Menu) en fonction des colonnes définies entres les cases bleues et la colonne wilindex

    Cre_menu (lancée automatiquement apres un prep_menu, et relancée aussi apres chaque click droit

    aff_menu premettant l'affichage du menu (lancée automatiquement lors d'une click droit)

    Tu as aussi 2 macro evennementielles

    Workbooks_open qui lance les macro prep_menu et cre_menu

    sur la feuille concernée par la saisie
    une macro Worksheet_BeforeRightClick qui lance cre_menu et aff_menu

    Voila c'est tout

    Ton fichier en retour

  11. #11
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 85
    Par défaut C'est super.
    En fait, ça marche très bien. Je te remercie beaucoup.

    Je regarde de plus près le fichier pour être sûr d'avoir tout bien compris. J'aurais peut-être quelques petites questions dans l'après-midi.

  12. #12
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 85
    Par défaut Encore merci.
    Bonjour Wilfried,

    Je viens d'appliquer le code que tu m'as donné à mon fichier et ça marche parfaitement. Même si je n'ai pas encore compris tout le détail des lignes de code, j'ai compris la logique avec tes explications. Ca va me rendre service à l'avenir.

    Encore un grand merci pour l'aide de tous ceux qui m'ont répondu.

  13. #13
    Membre Expert Avatar de wilfried_42
    Homme Profil pro
    Auto-entrepreneur
    Inscrit en
    Novembre 2006
    Messages
    1 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Auto-entrepreneur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 427
    Par défaut
    re:

    excuse moi ouskel'n'or, je n'avais pas vu ta reponse (j'ecrivais un roman, post suivant)

    Tu as entièrement raison sur le plages nommées, mais c'est ma petite obcession actuelle, j'en mets partout et parfois de si compliquée que je n'arrive meme pas à les relire

    Et pour le passage sur acces, je ne m'y suis meme pas encore mis mais peut etre qu'un jour............. m'enfin pour l'instant j'en n'epprouve aucun besoin, Excel est suffisemment puissant pour mes besoins personnels

    Bonne soirée

  14. #14
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 85
    Par défaut Du détail important.
    Bonjour,

    J'ai mis en application le code de Wilfried et ça marche, c'est super. Par contre, dans mon arborescence de référence, c'est-à-dire l'onglet "Menu" de mon fichier, j'ai remarqué la chose suivante :

    Quand j'ajoute un champ au milieu de mon arboresence, tous les codes sont mis à jour mais pas de la manière que je voudrais.

    Exemple : J'ai l'arborecence suivante :
    1. Vêtements > Pyjama > bleu
    2. Vêtements > Pyjama > jaune
    3. Vêtements > Pyjama > vert
    4. Vêtements > Robe > blanc
    5. Vêtements > Robe > noir

    Si j'ajoute un pyjama noir, au lieu de faire :
    1. Vêtements > Pyjama > bleu
    2. Vêtements > Pyjama > jaune
    3. Vêtements > Pyjama > vert
    4. Vêtements > Robe > blanc
    5. Vêtements > Robe > noir
    6. Vêtements > Pyjama > noir

    Excel fait :
    1. Vêtements > Pyjama > bleu
    2. Vêtements > Pyjama > jaune
    3. Vêtements > Pyjama > noir
    4. Vêtements > Pyjama > vert
    5. Vêtements > Robe > blanc
    6. Vêtements > Robe > noir
    (classement par ordre alphabétique et non pas par ordre de saisie).

    Ce qui est très embêtant car toute la saisie que j'ai déjà faite dans mon onglet "Saisie" est aussi mise à jour. Si avant l'ajout du pyjama noir, j'avais saisi une robe blance, après l'ajout du pyjama noir je me retrouve avec un pyjama vert (code 4.).

    Savez vous comment je pourrais faire pour remédier à ce problème ? Je vous remercie d'avance pour vos réponses.

  15. #15
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Rappelle-toi, Wielfried :
    Citation Envoyé par ousk'
    Effectivement, des plages nommées permettent de ranger ses affaires mais la mise à jour d'une plage nommée demande des précausions que je préfère éviter
    Désolé, Julieta, mais je pense que tu vas devoir attendre Wielfried...

  16. #16
    Membre Expert Avatar de wilfried_42
    Homme Profil pro
    Auto-entrepreneur
    Inscrit en
    Novembre 2006
    Messages
    1 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Auto-entrepreneur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 427
    Par défaut
    Bonjour

    Ouskel'n'or, je te rassure, dans la procedure, il n'y a pas de plage nommée

    je ne comprends pas trop la demande, sa base de donnée ne change pas, elle est recopiée dans la feuille Menu, et la elle est triée toujours dans la feuille menu.

    maintenant, s'il n'y as que 2 niveaux à trier, il suffit de modifier la macro et de retirer key3:=range("xx")

    j'attends des precisions lol

    Ps: je suis au boulot et meme si je suis connecté, je ne suis pas forcement disponible

    bon journée

  17. #17
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 85
    Par défaut Plus clair.
    Désolée si ma question n'a pas été très claire.

    En fait, pour faire très simple ma question était : comment faire si je veux ajouter de nouveaux champs dans mon arborescence ? J'ai essayé plusieurs choses et je suis arrivée à une réponse bête mais qui marche.

    Dans l'onglet "Bases", j'ai ajouté à la suite des autres champs, le nouveau champ en lui affectant un code n'existant pas déjà (incrémenté par rapport aux autres). Ensuite, j'ai fermé mon fichier. Puis je l'ai ré-ouvert pour relancer la macro. Dans l'onglet "Menu", le nouveau champ est alors apparu avec un numéro WilIndex n'existant pas déjà (incrémenté par rapport aux autres).

    J'ai maintenant deux nouvelles questions sans doute très simples :
    1. Est-on obligé de fermer puis ré-ouvrir le fichier pour relancer la macro ?
    2. Comment l'onglet "Menu" sait-il qu'à chaque modification de l'onglet "Bases", il doit se mettre à jour et créer un nouveau numéro WilIndex ? Est-ce dans le code prep_menu ?

    Désolée si ces questions sont un peu naïves. J'avance pas à pas. En tout cas, merci pour vos réponses.

  18. #18
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    En l'absence de Wilfried, je peux peut-être te répondre :
    1 - Non
    2 - C'est la ligne suivante qui fixe le nombre de champs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            nbc_menu = .Range("IV1").End(xlToLeft).Column - 2
    Tes champs commencent colonne C, donc le nbre de champs est N° de dernière colonne renseignée - 2
    Et ensuite, pour affecter ces champs au menu, c'est
    Comme ma réponse sur 1 - est un peu laconique, pour mettre à jour les menus, il suffit de relancer Workbook_Open ou de mettre ces deux lignes derrière un bouton placé quelque part dans l'une des feuilles de calculs
    Wilfried me corrigera

  19. #19
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 85
    Par défaut C'est plus clair.
    Merci beaucoup d'avoir pris le temps de m'expliquer tout ça. Petit à petit, j'avance.

  20. #20
    Membre Expert Avatar de wilfried_42
    Homme Profil pro
    Auto-entrepreneur
    Inscrit en
    Novembre 2006
    Messages
    1 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Auto-entrepreneur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 427
    Par défaut
    re: a tous

    Merci ouskel'n'or, etant au boulot hier, je manquais de disponibilité,

    je n'ai rien à ajouter à part que prep_menu lance cre_menu, à l'origine, dans la feuille MENU, un bouton existait lancant prep_menu

    L'arborescence peut continuer j'y ai ajouté un niveau il y peu de temps, le seul probleme est qu'avant la version 2007 d'excel, seulement 3 criteres de tri, ce qui ne me permet pas de trier au dessus de 3 niveaux

    ps: J'ai un collegue qui est en cours de tester le fichier sur un arborescence à 16 niveaux, j'attends de ses nouvelles

    La colonne Wilindex est une colonne qui ne fonctionne pas sur la base de données directement, elle rescence les n° de lignes de chaque enregistrement pour connaitre l'emplacement de la ligne de menu choisie

    Le tri ne se fait pas sur la feuille Bases, mais sur la Feuille Menu, ce qui permet d'ajouter des enregistrements au bout de la base, sans obliger l'utilisateur de la trier

    bonne journée

Discussions similaires

  1. Comment exprimer une condition en html ?
    Par razily dans le forum Débuter
    Réponses: 4
    Dernier message: 04/04/2012, 21h01
  2. comment exprimer une condition sous un fichier xml?
    Par n_adou dans le forum XML/XSL et SOAP
    Réponses: 5
    Dernier message: 28/05/2008, 21h28
  3. Exprimer une condition sur des sous-formulaires.
    Par Julieta dans le forum VBA Access
    Réponses: 2
    Dernier message: 08/12/2007, 16h11
  4. Réponses: 4
    Dernier message: 08/12/2007, 16h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo