Identifiant associé à une phrase dans une liste déroulante

Résolu/Fermé
Nashimok Messages postés 19 Date d'inscription mercredi 10 août 2016 Statut Membre Dernière intervention 16 juin 2017 - 10 août 2016 à 16:28
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 - 19 sept. 2016 à 18:15
Bonjour à tous,

pour un document de travail, j'ai fait une liste déroulante de phrases qui me permet de choisir dans ma colonne G la phrase qui convient.

Pour traiter mes données, je suis en train d'écrire un code en VBA qui me permettra de compter le nombre d’occurrence de chaque phrase. Dans ce code, pour éviter de réécrire toutes les phrases, j'aimerais utiliser des identifiants associés à chaque phrase.

(Comme j'ai déjà tout le travail de fait avec les phrases, ça m'arrangerait de ne pas avoir à reprendre chaque phrase pour lui associer son identifiant ... sachant que le classeur compte 16 feuilles ...)

Ce que j'aimerais faire, c'est que lorsque je sélectionne une phrase dans la liste déroulante, le code associé apparaisse automatiquement dans la colonne précédente (colonne F dans mon cas).

En PJ, mes références pour les phrases et leurs identifiants, et mon tableur avec la colonne en liste déroulante.

Merci d'avance pour votre aide !



A voir également:

2 réponses

gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 685
10 août 2016 à 21:50
Bonjour,

un code en VBA qui me permettra de compter le nombre d’occurrence de chaque phrase
Tu écris parce qu'il n'a pas encore assez de fonctions excel pour le faire ?

le code associé apparaisse automatiquement dans la colonne précédente
Avec cette formule par exemple :
=DECALER(Feuil2!$C$1;EQUIV(G2;Feuil2!E:E;0)-1;0)
0
Raymond PENTIER Messages postés 58397 Date d'inscription lundi 13 août 2007 Statut Contributeur Dernière intervention 26 avril 2024 17 094
11 août 2016 à 00:57
... ou avec la fonction INDEX
0
Nashimok Messages postés 19 Date d'inscription mercredi 10 août 2016 Statut Membre Dernière intervention 16 juin 2017
11 août 2016 à 16:41
Super, ça marche avec DECALER et INDEX, j'ai choisi d'utiliser INDEX car je la trouve plus facile à comprendre, comme ce n'est pas moi qui va utiliser le document.

@gbinforme : en fait, j'écris un code VBA qui me permet de générer un graphique en fonction du nombre d'occurrences de chaque phrase quand je clique sur un bouton.

J'ai choisi le VBA parce que je sais faire, mais je t'avoue que je ne sais pas compter le nombre d'occurrences avec une formule Excel ... Je veux bien avoir l'astuce si tu l'as :)

Merci @gbinforme et @RaymondPENTIER en tout cas !
0
Raymond PENTIER Messages postés 58397 Date d'inscription lundi 13 août 2007 Statut Contributeur Dernière intervention 26 avril 2024 17 094
11 août 2016 à 18:30
Pour le nombre d'occurrences, c'est la fonction NB.SI qui convient ...
0
Nashimok Messages postés 19 Date d'inscription mercredi 10 août 2016 Statut Membre Dernière intervention 16 juin 2017
13 août 2016 à 12:01
Effectivement, c'est très simple avec NB.SI, merci Raymond !

Je reviens sur mon code VBA :
j'écris ce code qui me permet de générer un graphique en fonction du nombre d'occurrences de chaque phrase de la feuille de référence ("Risques élevés") quand je clique sur un bouton.

Etant donné que la feuille de référence est amenée à être modifiée régulièrement, pas toujours avec le même nombre de lignes, je fais une boucle en VBA pour être sûre d'avoir toutes les lignes à chaque fois.

J'ai fait un enregistrement de macro avec la fonction NB.SI pour pouvoir mettre le code correspondant dans ma boucle, mais je ne comprends pas bien comment la fonction COUNTIF fonctionne ...

Dans mon tableur excel, j'écris :
=NB.SI('Risques élevés'!G:G;"901")


et le code qui sort est :
ActiveCell.FormulaR1C1 = "=COUNTIF('Risques élevés'!C[-5],""901"")"


Je ne comprends pas bien à quoi correspond la partie C[-5]... Quel est le rapport avec ma colonne G que j'ai utilisée dans mon tableur ?!
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 685 > Nashimok Messages postés 19 Date d'inscription mercredi 10 août 2016 Statut Membre Dernière intervention 16 juin 2017
13 août 2016 à 19:08
Bonjour,

C[-5] est une référence relative que l'enregistreur a déduit de ta position pour créer ta fonction.
Tu dois l'avoir en colonne L et donc la colonne -5 est G
si tu mets la formule ainsi tu as des références absolues et cela devrait fonctionner :
ActiveCell.FormulaR1C1 = "=COUNTIF('Risques élevés'!C7,""901"")"

Cependant, pour éviter toute la gymnastique avec les fonctions en anglais et les références en L1C1, je te conseille d'écrire :
ActiveCell.FormulaLocal = "=NB.SI('Risques élevés'!G:G;""901"")"

ce qui abouti au même résultat mais c'est excel qui se débrouille avec ses traductions !

n'est-ce pas plus simple ?
0
Nashimok Messages postés 19 Date d'inscription mercredi 10 août 2016 Statut Membre Dernière intervention 16 juin 2017
17 août 2016 à 18:40
Merci pour l'astuce !
Comme j'ai eu une coupure d'internet, j'ai fini par trouver une autre solution très similaire qui fonctionne aussi (un peu un mix de tes 2 solutions finalement).

Puisque je voulais attribuer la valeur du nombre d'occurrences à une variable occ, j'ai écrit en VBA :
occ=Application.CountIf(Worksheets("Risques élevés").Range("G:G"), "901")

mais peut-être que c'est trop compliqué ? Je suis preneuse de toute astuce pour simplifier mon code !

En tout cas, cette méthode me permet de supprimer un paquet de lignes de code et donc de simplifier le tout, ça c'est top !
Et justement, j'aimerais appliquer cette méthode à un autre critère pour créer un autre graphique.
Sauf que ce critère est la présence d'un chiffre dans ma cellule : si il y a un 1 dans le texte, occ=occ+1. Le 1 (ou 2 ou 16, puisque j'ai 16 catégories) se trouve toujours en première position dans le texte.

À l'heure actuelle, j'ai écrit les choses comme suit :
If UCase(Cells(ligne, "A")) Like "1-" & "*" Then
            nb_récep_expé = nb_récep_expé + 1
        End If


J'aimerais appliquer la fonction COUNTIF, sauf que je ne trouve pas comment faire pour écrire l'équivalent du
Like "1-" & "*"

dans le COUNTIF ...

Une idée ?
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 685
17 août 2016 à 21:58
Bonjour,

mais peut-être que c'est trop compliqué ?
non c'est très bien !

j'aimerais appliquer cette méthode à un autre critère
Si j'ai compris ton but tu peux écrire :
nb_récep_expé = Application.CountIf(Worksheets("Risques élevés").Range("A:A"), "1-*")
0