Liste déroulante 2 colonnes

Bonjour,

J’ai créé un fichier de caisse pour mon entreprise pour lequel j’ai des difficultés pour créer une liste déroulante et qui insérerai des informations sur 2 colonnes. Je sais faire une liste déroulante mais pour 1 colonne !

Pour être plus clair, j’ai un onglet de caisse par mois et je dois sélectionner dans une liste déroulante un libellé de compte et ca rajouterai automatiquement dans une autre colonne un numéro de compte en fonction de mon choix. Pour cela, j’ai créé un onglet BdD sur lequel est mentionné :

  • Colonne 1 : Numéro de compte (ex : 602 879)
  • Colonne 2 : Libellé de compte (ex : Frais de déplacement)

Comment faire pour « relier » les 2 onglets ?

Je vous remercie pour votre aide.
Sandrine

Modèle livre de caisse - Copie.xlsx (42,2 Ko)

Bonjour
Ci-joint ma proposition
Onglet « Caisse physique » en colonne J et K sélectionnes en colonne K dans la liste déroulante un libellé
En colonne J automatiquement se met le compte récupéré de l’onglet « BdD »
les libellés doivent tous être unique une procédure recherche en colonne B de l’onglet « BdD » le libellé choisi et ramène le 1° numéro de compte trouvé
Il ne faut donc pas qu’il y en ai plusieurs pour un même libellé
Les liste déroulantes ont été mise de la ligne 6 à 18 colonne K
Tu peux par copier/collage spéciale validation dans cette colonne la prolonger plus bas cela fonctionnera
Ce classeur est en version xlsm et non xslx car il y a du code VBA
J’espère que cela te conviens
Dis moi

Modèle livre de caisse - Copie.xlsm (52,5 Ko)

Bonjour,

A tester
Modèle livre de caisse - Copie.xlsx (49,9 Ko)

Bonjour,

Merci vraiment pour ta réponse.
Effectivement ta réponse est très clair et c’est ce que je souhaitais.
Je vais essayé de décaler au bon onglet car la liste déroulante doit se faire dans les onglets du mois et non dans onglet physique. Par contre pourrais-tu me dire comment faire pour arriver à ce résultat pour que je puisses comprendre et apprendre?
Merci beaucoup en tout cas de ton aide.

Bonjour,

Merci beaucoup pour ta réponse.
C’est exactement ce que je souhaitais pour mon tableau.
Comme je l’ai demandé à FFO, pourrais-tu me dire comment tu as procédé? J’aimerai apprendre.

Merci beaucoup et bonne journée.

Bonjour et merci pour ton retour
Pour déplacer la liste déroulante et la

Désolé erreur de manipulation j’ai posté ma réponse avant qu’elle ne soit terminée
Donc pour déplacer la liste déroulante et son traitement qui récupère en cellule gauche le numéro du compte pas compliqué
Fais un copier de la cellule qui a la liste déroulante et dans l’onglet et cellule souhaité pour avoir cette même liste collage spécial et cocher validation OK
Pour le traitement ramener la procédure qui se trouve dans le VBA de la feuille (clique droit sur le nom de l’onglet :

image

Choisir visualiser le code :

image

Selectionner toutes les lignes puis copier

Onglet de destination même manipulation et coller

Attention en fonction des cellules de libellé adapter cette ligne de code :

If Target.Column = 11 Then

qui représente le numéro de la colonne

Onglet « Caisse physique » la colonne libellé est en K donc 11° colonne

Onglet Mois un libellé en C 3° colonne un libellé en I 9° colonne

Pour un traitement des 2 la ligne de code sera :

If Target.Column = 3 Or Target.Column = 9 Then

Pour une seule colonne il faut supprimer le Or Target.Column = 9 et garder que le 1° avec le bon numéro de colonne

Surtout garder l’instruction « Then »

A ta disposition si souci

En pièce jointe ton fichier avec l’onglet « Janvier » adapter pour les 2 colonnes libellé C et I

Modèle livre de caisse - Copie.xlsm (54,0 Ko)

Il va falloir que je regarde le code attentivement pour comprendre la manipulation.
En tout cas merci beaucoup pour ton aide très clair et compréhensible.

Bonne journée.
Sandrine

Bonjour,

J’ai de nouveau un soucis.
Je n’arrive pas à comprendre et appliquer le code.
On me demande maintenant de séparer l’onglet « mois » en 2 (1 onglet production et 1 onglet social). Je me retrouve donc avec 2 onglet pour le même mois.
J’ai donc copié la cellule de la liste déroulante (onglet 1), et j’ai effectué le collage spécial « validation » sur l’onglet 2.
J’ai fait de même avec le code en essayant de changer le numéro de l’onglet mais cela ne marche pas. J’ai toujours la liste déroulante de l’onglet 1.
J’avoue que j’ai énormément de mal à comprendre la logique de ce code (je n’ai pas de logique moi-même donc difficile!!!).
Livre de caisse - Copie.xlsx (37,9 Ko)

Pouvez-vous m’indiquer ou se trouve mon erreur pour que je comprenne ?

Merci beaucoup!

La liste déroulante a bien été recopié dans les 2 onglets de demi mois en colonne C
C’est nickel
Reste le code à mettre dans chacun d’eux dans leur VBA respectif comme je l’ai indiqué pour récupérer en fonction du choix effectué cellule en colonne C le numéro du compte
Le code à intégrer :
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 3 Then
libellé = Target.Value
ligne = 0
ligne = Sheets(« BdD »).Columns(« B:B »).Find(What:=libell?, after:=Sheets(« BdD »).Range(« B1 »), LookIn:=xlValues, LooKAt:=xlWhole).Row
Target.Offset(0, -1) = Sheets(« BdD »).Cells(ligne, 1).Value
End If
End Sub

Seulement reste une opération particulière à réaliser pour maintenir ce code dans les VBA des onglets c’est d’enregistrer le fichier non pas en xlsx mais en xlsm car c’est le format qui fonctionne avec les macros le premier est lui une version sans macro

Donc attention au format d’enregistrement pour conserver les lignes de code du traitement

C’est corrigé et fonctionne nickel

Ces 2 onglets n’ont qu’une colonne « libellé » donc la ligne :

If Target.Column = 3 Then

convient parfaitement

Si plusieurs colonne « libellé » il faudra l’adapté comme pour colonne C et colonne I :

If Target.Column = 3 Or Target.Column = 9 Then

3 est le numéro de la colonne C 9 celui de la colonne I

J’espère que tu vas t’en sortir

Ci-joint ton dernier fichier transmis adapté en format xlsm

Je croise les doigts !!!

Livre de caisse - Copie.xlsm (47,9 Ko)

Bonjour,
Explications:
J’ai d’abord créé deux gestionnaires de noms (que l’on peut voir dans le menu FORMULES / Gestionnaire de noms). Ils se nomment « Cpt_Produc » et « Cpt_Social » et sont dynamiques. Cela veut dire que si tu rajoutes ou ôtes des compte dans la feuille BdD, ils sont pris en compte.
Ensuite dans chaque mois colonne C, j’ai sélectionné les cellules pour lui ajouter une liste déroulante avec comme plage le gestionnaire de nom « Cpt_Produc » et pour la colonne I, le gestionnaire de nom « Cpt_Social »
En colonne B la formule

=SIERREUR(INDEX(BdD!A:A;EQUIV(C10;BdD!B:B;0));"")

Index correspond à la plage que l’on veut afficher dans BdD
Equiv pour l’équivalent de la valeur colonne du libellé du compte par rapport à la plage dans BdD
le chiffre « 0 » pour la valeur juste
et la fonction SIERREUR() si il n’y à pas de correspondance et éviter les #N/A
Même formule pour la partie Social en modifiant les plages de recherche

Bonjour,

Merci encore pour vos réponses.
J’essaie de comprendre la logique des lignes de code, mais ce n’est pas évident pour moi.

FFO, je n’avais pas fait attention a cette « subtilité » pour l’enregistrement des macros mais je vais y faire attention. Merci :slight_smile:

Mimimathy tu parles de compte social et prod. Effectivement je le vois bien dans le gestionnaire de nom pour effectuer la liste déroulante, mais je ne vois pas la formule :
=SIERREUR(INDEX(BdD!A:A;EQUIV(C10;BdD!B:B;0));"")

Du coup je n’arrive toujours pas à intégrer mes numéros de compte avec le choix de liste déroulante dans mon fichier.
Livre de caisse ESAT.xlsm (37,9 Ko)

Autre question, sauriez-vous s’il est possible d’effectuer une liste déroulante mais que ce qui s’affiche soit différent?
Je m’explique! Sur les onglets de production (JanvierP), je dois renseigner la colonne « atelier » (colonne D). Dans la liste déroulante que j’ai créé avec les infos de l’onglet « analytique », il est plus simple pour moi de choisir un atelier mais la comptabilité me demande d’afficher le numéro de compte de l’atelier dans la colonne. Est ce possible?

Bonjour

Ton fichier adapté
Onglet « JanvierP »
Colonne D liste par atelier
Après sélection de l’atelier mis en place de son code
J’espère que cela te conviens
Dis moi

Livre de caisse ESAT.xlsm (47,4 Ko)

Merci beaucoup, tu es au top, c’est exactement ce que je souhaitais pour la liste déroulante!
Comment s’appelle cette fonction?

Il me reste à régler mon problème pour l’onglet social est ca sera tout bon!!!

Merci en tout cas :slight_smile:

Heureux que cela te conviennes
Ce n’est pas une fonction c’est toujours le code :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 4 Then
Application.EnableEvents = False
libell? = Target.Value
ligne = 0
ligne = Sheets(« Analytique »).Columns(« B:B »).Find(What:=libell?, after:=Sheets(« Analytique »).Range(« B1 »), LookIn:=xlValues, LooKAt:=xlWhole).Row
Target = Sheets(« Analytique »).Cells(ligne, 1).Value
Application.EnableEvents = True
End If
End Sub

dés que la colonne D c’est à dire n°4 est touchée :

If Target.Column = 4 Then

Je vais chercher dans l’onglet « Analytique » le libellé choisi dans la liste déroulante et je récupère son code en colonne A que je mets à la place du libellé c’est tout :

Je cherche :
ligne = Sheets(« Analytique »).Columns(« B:B »).Find(What:=libellé, after:=Sheets(« Analytique »).Range(« B1 »), LookIn:=xlValues, LooKAt:=xlWhole).Row

Je remplace :
Target = Sheets(« Analytique »).Cells(ligne, 1).Value

Juste j’ajoute ces lignes de code pour ne pas redéclencher tout le traitement au remplacement du libellé :
En début j’inhibe

Application.EnableEvents = False

En fin je réactive :
Application.EnableEvents = True

Voilà pour les explications

Ce code est dans le VBA de la feuille

Attention au format du fichier en xlsm impérativement

Ca m’a l’air très complexe mais très intéressant.
Je ne savais pas qu’on pouvait faire autant de choses avec Excel! C’est passionnant (et effrayant aussi!!!)

Aurais-tu une solution à apporter à mon problème de liste déroulante sur le 2eme onglet? J’ai bien ma liste déroulante (colonne C) mais cela ne me remplis pas la colonne B.

Merci!

Dans le dernier fichier que tu m as transmis il n y a aucun code dans le VBA des onglets donc aucun traitement pour permettre de compléter la colonne B en fonction du choix effectué en colonne C
Sur le nom du deuxième onglet clique droit choisir Visualiser le code et recopier ce code :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 3 Then
libellé = Target.Value
ligne = 0
ligne = Sheets(« BdD »).Columns(« B:B »).Find(What:=libell?, after:=Sheets(« BdD »).Range(« B1 »), LookIn:=xlValues, LooKAt:=xlWhole).Row
Target.Offset(0, -1) = Sheets(« BdD »).Cells(ligne, 1).Value
End If
End Sub

Attention les guillemets ne sont pas les bons les supprimer tous et les resaisir au clavier au plus proche de la donnée

Fermer l éditeur de macro et faire un essai

À ta disposition pour toute difficulté

Merci pour ton retour;
J’ai cependant un problème lorsque j’insère ton code dans le 2eme onglet.

Pourrais-tu me dire si tu sais d’où vient le problème?

Ici corriges :

What:=libell?

Mets

What:=libellé

Le forum n aime pas les guillemets et les accents

Il faut impérativement à la place du point d interrogation un é

Corrigés et dis moi

J’ai ce message d’erreur
Sans titre

et quand je clique sur débocage j’ai ca :