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)
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
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.
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.
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 :
Choisir visualiser le code :
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
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.
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 ?
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
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
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
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?
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
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.
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