Extraire une liste avec des critères évolutifs et sans doublons

Bonjour,

J'ai une liste de données correspondant à un code sous la forme d'une lettre fixe (A, B, C, D ou E) et d'un chiffre qui est évolutif en fonction de la base de données.

Pour cette raison je cherche à extraire d'une liste de données sous la forme (A3, A2, A7, B2, B4, C1, D1, E5, E6), les données commençant par A, B, C et D mais pas les données commençant par E d'une façon automatisée.

J'ai tenté de travailler avec les fonctions index et equiv imbriquées, mais je n'arrive pas à introduire les 4 conditions dans la fonction equiv.

De plus, même pour une seule condition (exemple, extraire les données commençant par A), j'ai des doublons lorsque que j'étend ma formule pour toutes les données ne commençant pas par A ...

J'ai joins un fichier excel où les cadres en jaune sont le résultat que j'aimerais atteindre .. Ce sera plus facile à comprendre je pense...

En vous remerciant par avance si vous réussissez à m'éclairer,

Bonne journée,

Bonjour lucie74, le forum,

Regarde ici: https://tssperformance.com/extraire-tous-les-noms-commencant-par-a-et-dun-certain-lieu/

La zone de critères H13 à H16 doit être remplie....si tu veux supprimer un critère, remplace-le par un caractère (exemple un point)...

Cela semble fonctionner même sans le *.......

Cordialement,

Bonjour le fil, bonjour le forum,

Si une solution VBA t'intéresse :

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 KA As Integer 'déclare la variable KA (incrément pour les A...)
Dim KE As Integer 'déclare la variable KE (incrément pour les E)
Dim I As Integer 'déclare la variable I (Incrément)
Dim TLA() As Variant 'déclare la variable TLA (Tableau des Lignes poue les A...)
Dim TLE() As Variant 'déclare la variable TLE (Tableau des Lignes pour les E)

Set O = Worksheets("Feuil1") 'définit l'onglet O (à adapter à ton cas
TV = O.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
KA = 1: KE = 1 'initialise les variables KA et KE
For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
    Select Case Left(TV(I, 1), 1) 'agit en fonction de la premiere lettre de la donnée de la boucle en colonne 1
        Case "E" 'cas E
            ReDim Preserve TLE(1 To 2, 1 To KE) 'redimensionne le tableau des lignes TLE (2 lignes KE colonnes)
            TLE(1, KE) = TV(I, 1) 'récupère dans la ligne 1 de TLE la donnée en colonne 1 de TV (=> transposition)
            TLE(2, KE) = TV(I, 2) 'récupère dans la ligne 2 de TLE la donnée en colonne 2 de TV (=> transposition)
            KE = KE + 1 'incrémente KE (ajoute une colonne au tableau des lignes TLE)
        Case Else 'tous les autre cas
            ReDim Preserve TLA(1 To 2, 1 To KA) 'redimensionne le tableau des lignes TLE (2 lignes KE colonnes)
            TLA(1, KA) = TV(I, 1) 'récupère dans la ligne 1 de TLA la donnée en colonne 1 de TV (=> transposition)
            TLA(2, KA) = TV(I, 2) 'récupère dans la ligne 2 de TLA la donnée en colonne 1 de TV (=> transposition)
            KA = KA + 1 'incrémente KE (ajoute une colonne au tableau des lignes TLA)
    End Select 'fin de l'action en fonction de la premiere lettre de la donnée de la boucle en colonne 1
Next I 'prochaine ligne de la boucle
O.Range("D1").CurrentRegion.Offset(1, 0).ClearContents 'efface d'éventuelles anciennes données en D2
O.Range("H1").CurrentRegion.Offset(1, 0).ClearContents 'efface d'éventuelles anciennes données en H2
If KA > 1 Then O.Range("D2").Resize(UBound(TLA, 2), 2).Value = Application.Transpose(TLA) 'renvoie en D2 redimensionnée le tableau TLA transposé
If KE > 1 Then O.Range("H2").Resize(UBound(TLE, 2), 2).Value = Application.Transpose(TLE) 'renvoie en H2 redimensionnée le tableau TLE transposé
End Sub

bonjour

2 propositions / contribution

les formules sont matricielles ( validation : Ctrl MAJ Entrée en simultané )

22lucie74.xlsx (10.70 Ko)

cordialement

Bonjour à tous, merci pour vos retours rapides !!

Je n'essaie pas la solution VBA car je suis vraiment trop nulle pour le moment ...

Je suis surtout intéressée par les formules matricielles, mais j'ai encore une question tulipe_4, je n'ai pas compris d'où vient le 68 (cas avec les conditions A, B, C et D) ou 69 (cas du E) .. J'ai essayé de transposer votre formule sur mon excel mais je ne comprends pas, elle ne fonctionne pas, alors je me demande si c'est en raison de ces chiffres qu'il faut ajuster ..

Dernier point, xorsankukai , j'ai aussi essayé les filtres avancés, vraiment bonne technique ! Mais comment faut-il faire pour créer la cellule "extraction" permettant de mettre à jour ?

Je m'excuse du dérangement ..

Re,

Merci pour ton retour, bravo ThauThème et tulipe_4 pour vos propositions,

Mais comment faut-il faire pour créer la cellule "extraction" permettant de mettre à jour ?

Il ne s'agit pas d'une cellule mais d'un bouton auquel j'ai associé cette macro :

Sub Extraction()
    Range("A1").Select
    Range("A1:B10").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _
        "H12:H16"), CopyToRange:=Range("D13:E13"), Unique:=False
End Sub

ALT + F11 pour y accéder...

Cordialement,

re

explication

les valeurs: 65;66 67 ;68...... correspondent au Code de la première lettre :A ,B,C .......

fait l'essai pour t'apprendre ;

en A1 tu saisis un mot et en b1 tu saisis = code(a1) ;tu vas obtenir un N° , chaque carractère employé dans Excel possède son code

donc si il n'y a pas d'espace (ça peut arriver) Code donnera le n° de chaque première lettre de la plage

c'est ce qui sert de critère pour l'extraction le tout est de savoir que le code de A c'est 65 et B 66 ........... Z = 90

Si l'une ou l'autre des fonctions ne fonctionnent pas

1) tu n'as pas validé avec les 3 touches

2) lors de l'adaptation ,tu n'as pas compensé le decalage du N° de ligne dans la partie LIGNE( a2:A12) -1

si ton tableau source( hors entete) commence à la ligne n°5 il faut deduire 4 pour indiquer à Index que se sera la 1ere de ce tableau

tu ne dois pas oublier que le n° de ligne ne correspond pas toujours à une position dans un tableau

cordialement

Un immense merci !!

J'ai enfin réussi, je n'avais en effet pas bien décalé mes numéros de ligne ..

Je prends note de toutes vos explications ... qui me sont vraiment précieuses

Bonne soirée.

Rechercher des sujets similaires à "extraire liste criteres evolutifs doublons"