Copier colonne filtrée

Bonjour à tous,

Malgré de nombreuses recherches je n'ai pas trouvé de solutions à mon problème.

Je veux filtrer une page de mon excel (ça c'est bon). Ensuite j'aimerai copier les cellules d'une colonne en particulier (c'est bon aussi) en m'assurant de n'en avoir aucune en double et enfin de les copier dans une même cellule (c'est plutôt cette partie le problème).

Voici un schéma (le premier tableau c'est ma page filtrée avec uniquement janvier en colonne 1) :

Colonne 1Colonne 2
JanvierA
JanvierB
JanvierA
JanvierC

Et donc j'aimerais mettre dans une cellule d'une autre page (avec un espace entre les lettres si possible pour que cela soit plus lisible) :

A B C

Voici le code que j'ai pour le moment :

'Dernière ligne de Data
    lastRow = WbAColler.Worksheets("Data").Range("A" & WbAColler.Worksheets("Data").Rows.Count).End(xlUp).Row

'Filtres
    reseau = WbAColler.Worksheets("Trames absentes").Range("A2").Value
    trame = WbAColler.Worksheets("Trames absentes").Range("C2").Value

    WbAColler.Worksheets("Data").Range("A1").AutoFilter Field:=4, Criteria1:=Array(synoptic(reseau)), Operator:=xlFilterValues
    WbAColler.Worksheets("Data").Range("A1").AutoFilter Field:=5, Criteria1:=Array(trame), Operator:=xlFilterValues

'Affichage ECU destinataire
    WbAColler.Worksheets("Data").Range("D2:D" & lastRow).SpecialCells(xlCellTypeVisible).Copy
    WbAColler.Worksheets("Trames absentes").Range("I4").PasteSpecial Paste:=xlPasteAll
    Application.CutCopyMode = False

Si ce n'est pas clair, n'hésitez pas à me demander des précisions.

Merci d'avance pour votre aide

Hello,

La façon la + simple d'avoir une liste sans doublon est d'utiliser la méthode .RemoveDuplicates.

L'inconvénient de cette méthode c'est qu'elle s'utilise sur une feuille et non en mémoire.

Mais si tu n'es pas contre rajouter une feuille de travail dans ton fichier, utilise la !

Puisque tu as un feuille de travail, tu peux utiliser une formule pour concaténer ton résultat en une cellule

=CONCAT(TRANSPOSE(A1:A3)&" ") 

Plage à modifier

Pour résumer :

1 tu ajoutes une feuille vierge dans ton fichier

2 tu fais le filtre sur le mois

3 copier la colonne 2 dans ta feuille de travail

4 removeduplicate

5 tu utilises la formule avec la plage de doublons.

le tout en vba

7tayrok.xlsx (16.66 Ko)
=JOINDRE.TEXTE(" ";;UNIQUE(FILTRE(B2:B5;A2:A5="janvier")))
ou sans ce filtre
=JOINDRE.TEXTE(" ";;UNIQUE(B2:B5))

Merci pour vos réponses rapides.

Effectivement j'ai une feuille de travail que je créée plus tôt dans la macro mais je souhaite la supprimer à la fin. C'est pour cela que je voulais faire cela en mémoire et non directement avec une formule dans les cellules.

Là j'en suis à avoir réussi à copier les cellules qui m'intéressent (donc déjà filtrée) dans une plage. Maintenant j'aimerai (en mémoire) copier ces cellules (en évitant les doublons) et ensuite les mettre dans une seule et même string (avec des espaces entre les lettres) et les afficher dans ma cellule souhaitée.

Pour cela j'avais l'idée suivante que je n'arrive pas à réaliser :

1) Prendre la première cellule et l'ajouter dans un tableau en même temps que dans une string (avec un espace à la fin pour avoir un espace entre chaque lettre)

2) Passer à la cellule suivante, vérifier si elle n'est pas dans déjà dans la string (en utilisant le tableau, c'est pour cela que je pensais en faire un). Si elle n'est pas dedans, l'ajouter à la string

3) Faire cela jusqu'à la fin de ma liste de lettre

4) Afficher la string avec les lettres dans la cellule que je veux

La difficulté majeure que j'ai rencontrée est pour compter le nombre de fois que je dois faire l'étape 2 (je voulais faire une boucle for mais je n'arrive pas à compter le nombre de cellules)

Que pensez-vous tout d'abord de mon raisonnement ? Et comment compter le nombre de cellule non vide dans une colonne (sachant qu'il y a des cellules occupées dans le reste de la page)

Merci d'avance pour vos réponses

bonjour, vous pouvez faire tout cela en mémoire avec un dictionaire

Sub test()
     Dim c     As Range, Dict, c0, s, WbAColler, lastrow

     'ceci est déjà dans votre macro
     Set WbAColler = ActiveWorkbook
     lastrow = WbAColler.Worksheets("Data").Range("A" & WbAColler.Worksheets("Data").Rows.Count).End(xlUp).Row

     'à partir d'ici nouveau
     On Error Resume Next
     Set c = Nothing
     Set c = WbAColler.Worksheets("Data").Range("D2:D" & lastrow).SpecialCells(xlCellTypeVisible)     'plage avec les cellules visible (s'il y en a !)
     On Error GoTo 0
     If Not c Is Nothing Then     'il y a des cellules visibles
          Set Dict = CreateObject("scripting.dictionary")     'cahier de brouillon
          Dict.comparemode = vbTextCompare     'majuscules et miniscules sont traités égal
          For Each c0 In c.Cells     'boucle
               If Len(c0.Value) > 0 Then Dict(c0.Value) = vbEmpty     'si cellule n'est pas vide, ajouter valeur UNIQUE au dictionaire
          Next
          If Dict.Count Then     'dictionaire n'est pas vide
               s = Join(Dict.keys)     'joindre les clefs du dictionaire
               MsgBox s
          End If
     End If
End Sub

Merci pour vos réponses

J'ai réussi à avancer avec vos conseils et aussi à ma sauce.

Concernant le sujet de mon poste, j'ai bien réussi à copier ma colonne filtrée.

Voici le code si certains en ont besoin :

'Dernière ligne de Data
lastRow = WbAColler.Worksheets("Data").Range("A" & WbAColler.Worksheets("Data").Rows.Count).End(xlUp).Row

'Copie colonne filtrée
WbAColler.Worksheets("Data").Range("D2:D" & lastRow).SpecialCells(xlCellTypeVisible).Copy
WbAColler.Worksheets("Data").Range("Z1").PasteSpecial Paste:=xlPasteAll

Cela copie la colonne D qui est filtrée dans la colonne Z.

Si vous voulez voir le reste de ce dont l'on a discuté dans ces messages, n'hésitez pas.

Bonne journée

Bonjour,

Vous l'avez essayé ?

  • Ce n'est pas nécessaire de coller vers la colonne Z, vous prenez la partie "à partir d'ici ...".
  • Cela met tout les valeurs dans un dictionaire, de manière qu'il n'y a pas de doublons.

Oui je l'ai essayé et cela fonctionne.

Pour les doublons, je le fais plus loin dans mon programme mais je ne l'ai pas inclu dans mon message car ce n'était pas le titre du sujet que j'ai ouvert

Si vous ne voulez pas un message, mais mettre a jour une cellule ...
WbAColler.Worksheets("Data").Range("A10").value = Join(Dict.keys) 'joindre les clefs du dictionaire
Rechercher des sujets similaires à "copier colonne filtree"