Bonjour,
Comment peut on faire un filtre sur des colonnes non contigues pour une extraction sans doublon vers un autre emplacement.
![]()
Bonjour,
Comment peut on faire un filtre sur des colonnes non contigues pour une extraction sans doublon vers un autre emplacement.
![]()
Avec les filtres élaborés
tu définis ta base, une zone de critères (qui correspond aux colonnes que tu veux filtrer (même si elles ne sont pas contigües) puis tu définis une zone de destination et coche Extraction sans doublon.
recherche dans cette direction
Merci de la réponse, mais voici quelques précisions sur ce que je veux faire (Voir PJ).
Colonnes A, B, C, contiennent des critères, D des quantités.
Je cherche à créer en colonnes F et G les combinaisons uniques des données en A et C (pas la colonne B) , de manière à pouvoir faire en H un sommeprod de la colonne D. exemple du contenu de la cellule H2
Le sommeprod marche bien, je dois juste réussir à créer ma plage de critères en F et G.
Code : Sélectionner tout - Visualiser dans une fenêtre à part = SOMMEPROD(($A$2:$A$15=F2)*($C$2:$C$15=G2);$D$2:$D$15)
Je fais un filtre élaboré, avec
Plages :Zone de critères : vide
Code : Sélectionner tout - Visualiser dans une fenêtre à part Feuil1!$A$2:$A$15;Feuil1!$C$2:$C$15
Copier dans :Extraction sans doublon
Code : Sélectionner tout - Visualiser dans une fenêtre à part Feuil1!$F$2
Et j'obtiensPlage de base de données ou liste non valide
Evidemment le format des colonnes initiales est imposé, et plus complexe que dans l'exemple !
Je pourrais contourner en créant une feuille de travail, mais j'espère trouver une solution sur le forum.
Merci.
Bonjour,
ça serait tellement plus simple avec un tableau croisé dynamique non ?
Sinon il faut passé par vba pour générer F et G
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 Private Sub CommandButton1_Click() For Each CelA In Range("A2:A15") Derligne = Application.WorksheetFunction.CountA(Range("F:F")) + 1 For Each celF In Range("F2:F" & Derligne) If CelA = celF And CelA.Offset(0, 2) = celF.Offset(0, 1) Then GoTo suite End If Next Range("F" & Derligne) = CelA Range("G" & Derligne) = CelA.Offset(0, 2) suite: Next End Sub
Bonsoir
Je pense qu'on peut se passer de code et utiliser le filtre élaboré
Une zone de critères doit contenir au minimum deux cellules superposées. Dans ton cas ce sera un bloc de deux sur deux avec en intitulé de colonne les libellés DATA1 et DATA3 et en critère deux cellules vides.
L'emplacement de destination doit contenir le nom de colonnes que tu veux récupérer et il ne faut pas oublier de cocher sans doublon. Ca marche très simplement. Tu peux réaliser la manipulation du filtre en macro puis affecter un bouton à cette macro pour la lancer à la demande.
Je te remets en PJ ton fichier avec l'application d'un filtre élaboré et l'impression d'écran des paramètres du filtre élaboré.
Bonjour et,
Je retiens la solution de ouisansdoute qui correspond exactement à ce que je souhaitais faire, et a comblé mes carences en filtres élaborés, à savoir qu'une extraction sans critères peut se faire avec des entêtes de colonne suivis d'une cellule vide et que la sélection des colonnes résultat dépend des noms définis en tête de zones de résultat. C'étaient les 2 points qui me bloquaient.
Pour David2304, merci de ta solution, j'avais également après avoir soumis ma question une solution traitant ma plage de données en Recordset avec une clause Select distinct ...., qui marche également, mais je préfère la première, plus facile à expliquer à des non développeurs.
Pour les tableaux dynamiques croisés, j'avoue mon ignorance crassesur le sujet notamment leur manip en VBA.
Encore merci et bravo pour le forum.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager