Copier coller des données d'une colonne d'une feuille vers une autres

Bonjour à tous,

Ne trouvant pas les réponse à mes questions je me permet de poster ce sujet.

Le problème est le suivant:

Je cherche une formule VBA qui me permets d'aller chercher toutes les cellules d'une colonne (N) dans laquelle certain de mes nom clients apparaissent.

Exemple : Le client s'appelle Dupont. Mais Dupont m'achète plein de produits. Du coup, dans ma base de donnée, dans ma colonne client j'ai : Dupont "Peinture", Dupont "Crayon", Dupont "verre"... Il y aussi d'autre clients : Marque, Pascale, Henri ...

1) Je souhaite uniquement extraire les cellules d'une colonne (N) ou apparait Dupont "..." .

2) Je souhaite supprimer les doublons. J'ai beaucoup de Dupont "Peinture".

3) Les noms de mes clients, seront redirigés vers une colonne (B) d'un autre tableau dans une autre feuille. Comme la quantité de client Dupont "..." va varier, le nombre de ligne va varier aussi. Je souhaite que le nombre de lignes s'adapte en fonction du nombre de valeur que la formule trouvera.

Est-ce que quelqu'un peut m'aider s'il vous plaît? Le zone dont je parle sont en jaune.

Je suis à votre disposition si vous avez des questions.

Bien cordialement,

Bonjour

Pourquoi pas un filtre avancé https://philippetulliez.developpez.com/tutoriels/advancedfilter/

qui extrait avec ou sans doublons

J'ai regardé et la solution est pas mal mais c'est vraiment sous forme VBA que j'en ai besoin.

Il faut que mon tableau se remplisse automatiquement quand je viendrai coller mon tableau de vente mensuel dans le fichier.

Bien cordialement,

RE

Si tu as bien regardé ce qui est expliqué dans le lien, c'est bien sûr automatisable par VBA

Le filtre avancé est ce qui est plus rapide pour les extractions...

Du coup, j'ai écris ce code mais il me met des erreurs rouge partout. Je suis novice je ne comprends pas très bien ce qui ne va pas. Est-ce que vous pouvez m'aiguiller s'il vous plaît?

Sub FiltrerClientDupont()

Worksheet:="Export ventes"

Range("O3:O500").AdvancedFilter _

Action:=xlFilterCopy, _

CriteriaRange:="Dupont", _

CopyToworksheet:= Détail du C.A,_

Range:=Range("B7:B14"), _

Unique:=False

End Sub

Bonjour

Déjà tu n'as pas du lire attentivement. Pour un filtre avancé il faut :

  1. une plage de critères avec un titre et en dessous la ou les valeurs souhaitées : tu ne peux te référer à une valeur mais bien à cette plage
  2. une plage de destination constituée ou bien d'une unique ligne de titres ou bien de colonnes entières dont la 1ère ligne est un titre.
  3. les titres de la plage de destination doivent être identiques à ceux de la source : ici rien ne concorde.
  4. la plage à filtrer doit inclure les titres : seuls liens entre les 3 plages pour qu'Excel comprenne ce qui doit être fait
image

Il serait préférable que la source commence en ligne 1 ou soit un tableau structuré afin que le code puisse soit considéré des colonnes entières, soit le tableau et suive donc l'évolution de nombre de lignes.

Cependant si on regarde ton fichier :

  • la notion de doublon n'existe pas ici puisque tu as plusieurs lignes à extraire pour Dupont peinture mais qui sont différentes sur les autres colonnes
  • tu ne veux pas simplement extraire mais croiser la partie Produit (ou sur une ligne tu as mis le client et non le produit) pour passer de lignes en colonnes

Donc ce n'est pas très clair. Il faudrait compléter ton exemple pour y indiquer ce que devrait contenir Détail du C.A et par exemple d'où vient N° FACT. absent de la source...

Bonjour à tous, grace à vos conseils, j'ai trouvé la solution à une partie de mon problème. Le code marche. Le voici.

Sub Filtrer""()

Sheets("Nom de Feuille").Range("O2:O5000") _

.AdvancedFilter _

Action:=xlFilterCopy, _

CriteriaRange:=Sheets("Détail C.A") _

.Range("F1:F3"), _

CopyToRange:=Sheets("Détail C.A") _

.Range("B8:B16"), _

Unique:=True

End Sub

Cependant, la liste de mes clients peut varier. Hors, il y a une ligne de total dessous. Donc, je dois trouver un moyen de m'assurer que suffisamment de ligne se crées afin de faire de la place pour insérer mes données et donc de décaler ma ligne total vers le bas. Est-ce que quelqu'un peut m'indiquer quel formule VBA fait ça s'il vous plaît?

Bien cordialement,

Bonjour

une plage de destination constituée ou bien d'une unique ligne de titres ou bien de colonnes entières dont la 1ère ligne est un titre.

C'est pour laisser se dérouler l'extrait sur autant de lignes que nécessaire

Ce n'est pas le cas de Range("B8:B16")

Cela ne marcherait pas du tout sur une version Excel antérieure et cela ne marchera pas si tu as plus de 8 lignes.

Il serait préférable que la source commence en ligne 1 ou soit un tableau structuré afin que le code puisse soit considéré des colonnes entières, soit le tableau et suive donc l'évolution de nombre de lignes.

Ce n'est pas le cas de Range("O2:O5000")

Dans ce type de cas on place le total au dessus pour éviter de compliquer inutilement, d'autant que le filtre avancé supprime les lignes non extraites

Sinon comme évoqué travaille en tableaux structurés...

Ton code ne correspond pas à l'exemple initialement fourni...

Rechercher des sujets similaires à "copier coller donnees colonne feuille"