Recherche de Textes dans matrices
Bonjour,
Je souhaite extraire les numéros de ligne d'un texte prédéfinie dans une base de donnée dispose en 1 seul colonne.
Exemple:
Benjamin
Aline
Alfred
Gerard
Gladis
Aline
Fred
Aline
...
Je peux utiliser la fonction Equivalent =EQUIV("Aline"; A:A; 0) et je vais recevoir mon numéro de ligne "2" dans la case ;
Dans une autre case je voudrais faire la meme chose mais recevoir le résultat "6". Puis dans la case suivante "8".
Je pense qu'il doit y avoir un moyen en jouant sur le debut de la matrice A:A (Ou A1:A10000) en la décalant mais impossible de trouver comment.
Bonjour Ratus et bienvenu, bonjour le forum,
Par formule je ne sais pas faire. Si une proposition VBA t'intéresse, le code ci-dessous devrait convenir. Les données sont placés à partir de A1, clique sur le bouton Action...
Sub Macro1()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)
Dim K As Integer 'déclare la variable K (incrément)
Dim TMP As Variant 'déclare la variable TMP (tableau TeMPoraire)
Dim TL() As Variant 'déclare la variable TL (Tableau des Lignes)
Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)
Set O = Worksheets("Feuil1") 'définit l'onglet O
TV = O.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
O.Range("D1").CurrentRegion.ClearContents 'efface les éventuelles anciennes valeurs
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
For I = 1 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV
D(TV(I, 1)) = "" 'alimente le dictionnaire D avec les données en colonne 1 de TV
Next I 'prochaine ligne de la boucle
TMP = D.keys 'récupère dans le tableau temporaire TMP la liste des éléments du dictionnaire D sans doublons (les clés)
O.Range("D1").Resize(D.Count, 1).Value = Application.Transpose(TMP) 'renvoie le tableau temporaire TMP dans la cellule redimensionnée D1
For J = 0 To UBound(TMP) 'boucle 1 : sur tous les éléments du tableau temporaire TMP
K = 0: Erase TL 'réinisialise K, efface le tableau des lignes TL
For I = 1 To UBound(TV, 1) 'boucle 2 : sur toutes ls lignes I du tableau des valeurs TV
If TV(I, 1) = TMP(J) Then 'condition si la donnée ligne I colonne 1 de TV est égale à l'élément J de TMP
K = K + 1 'incrémente K
ReDim Preserve TL(1 To K) 'redimensionne le tableau des lignes TL (K lignes)
TL(K) = I 'récupère dans l'élément K de TL le numéro de la ligne I
End If 'fin de la condition
Next I 'prochaine ligne de la boucle 2
'définit la cellue destination DEST (E1 si E1 est vide, sinon la première cellule vide de la colonne E)
If O.Range("E1") = "" Then Set DEST = O.Range("E1") Else Set DEST = O.Cells(Application.Rows.Count, "E").End(xlUp).Offset(1, 0)
DEST.Resize(1, UBound(TL)).Value = TL 'renvoie le tableau TL dans la cellule DEST redimensionnée
Next J 'prochain élément de la boucle 1
End Sub
Merci ThauThème,
Oui par Vba ca doit pouvoir le faire aussi.
Cependant je n'ai pas joué avec ca depuis X années. De ce fait je ne sais pas comment modifiés ton code.
Je voudrais seulement les résultats pour Aline et en colonne.
Si tu pouvais aussi m'expliquer comment change la colonne d'arrivé (E) ce sera génial.
Merci beaucoup
Re,
Le code modifié et adapté :
Sub Macro1()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)
Dim K As Integer 'déclare la variable K (incrément)
Dim TL() As Variant 'déclare la variable TL (Tableau des Lignes)
Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)
Set O = Worksheets("Feuil1") 'définit l'onglet O
TV = O.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
O.Range("E1").CurrentRegion.ClearContents 'efface les éventuelles anciennes valeurs
For I = 1 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV
If TV(I, 1) = "Aline" Then 'condition si la donnée ligne I colonne 1 de TV est égale à "Aline"
K = K + 1 'incrémente K
ReDim Preserve TL(1 To K) 'redimensionne le tableau des lignes TL (K lignes)
TL(K) = I 'récupère dans l'élément K de TL le numéro de la ligne I
End If 'fin de la condition
Next I 'prochaine ligne de la boucle
O.Range("E1").Resize(K, 1) = Application.Transpose(TL) 'renvoie le tableau TL transposé dans la cellule E1 redimensionnée
End SubBonjour,
Après plusieurs tentatives pour modifier la Macro afin de la faire marcher sur mon excel, impossible, je n'y arrive pas.
Ci joint le fichier excel en question.
Dans le tab "BDD cargo", dans la colonne A j'ai à plusieurs reprise "Euro Airport" qui apparait.
Je souhaiterais que sur la colonne R j'obtienne le numéro de ligne de chaque "Euro Airport".
Topissime! Merci!
Sais tu pourquoi la première valeur renvoie une erreur?