Filtrer et copier/coller des données

Bonjour tout le monde !

Je souhaiterais créer une macro pour trier des données contenues dans un tableau.

Dans l'exemple que je joins (

, le tableau en question se trouve sur l'onglet "Feuil3", celui ci évolue en fonction du nombre de personne se trouvant dans l'onglet "Feuil1", mais il est toujours fait de la manière suivante :

  • la dernière colonne avant les colonnes "total" s'appelle toujours "résultats", mais n'est pas toujours située au même endroit (pas toujours en colonne D comme c'est le cas ici).
  • Pour un prénom il y a toujours un colonne "total 1" et une colonne"total 2" à la suite.

Pour l'heure, une macro crée des nouveaux onglets en fonction du nombre de prénoms contenue en feuille 1.

Je voudrais que ma macro dans un premier temps identifie la place de la colonne "résultats" dans le tableau, puis je voudrais filter la colonne "total 2" concernant Martin, pour ne garder que les résultats supérieur à 0, puis ensuite copier/coller le tableau correspondant dans l'onglet "Martin" qui avait été crée au préalable ... Puis faire de même avec Clara ... (La colonne "total1" ne m'intéresse pas dans un premier temps)

J'espère avoir été aussi clair que possible, ce n'est pas très simple à expliquer !

Merci d'avance pour votre aide

Jeremulus

Bonjour Jeremulus,

je te retourne ton fichier modifié :

* à l'ouverture du fichier, tu peux voir "Feuil1"

* regarde aussi "Feuil4" et "Feuil2" (prénom seulement, rien d'autre)

* va sur "Feuil3" ; ton tableau est inchangé ; fais Ctrl e ; rien ?

* regarde tes 2 feuilles précédentes.

ça marche quelle que soit la position des feuilles dans le classeur

➯ tu peux les déplacer là où tu veux.

Alt F11 pour voir le code VBA, puis revenir sur Excel

si besoin, tu peux demander une adaptation.

merci de me dire si ça te convient.

dhany

Bonjour Dhany !

Merci beaucoup pour ta réponse et ton super travail

Je me permets de compliquer un peu le problème ... Car en fait le fichier contient d'autres colonnes "Total1" "Total2", mais que je ne veux pas copier, celles qui m'intéressent sont celles qui sont plus foncées ( Je joins un nouveau fichier ce sera plus simple )

Aussi, je souhaiterais copier dans les onglets le tableau dans son intégralité .. Est ce que cela est possible ?

Merci encore, à bientôt !

Jeremulus

nouvelle version :

(même utilisation)

dhany

Merci Dhany c'est génial !

Est ce que tu pourrais m'expliquer ce que font ces lignes s'il te plait ? Car j'ai du mal à les adapter au fichier sur lequel je travaille ...

For Each FX In Worksheets

If FX.[A1] = nom Then

Cells(3, col).Resize(, 2).Copy FX.[A3]: lg2 = 4: lg1 = 4

Do

With Cells(lg1, col)

If IsEmpty(.Value) Then Exit Do

If .Value > 0 Or .Offset(, 1) > 0 Then

.Resize(, 2).Copy FX.Cells(lg2, 1): lg2 = lg2 + 1

End If

lg1 = lg1 + 1

End With

Du coup ce n'est pas possible de copier coller le tableau dans son intégralité ?

Aussi, dès que j'adapte le nom de la colonne "Résultats" et le nom de l'onglet "Feuil3" la macro ne marche plus, comment cela se fait ?

@Jeremulus

    For Each FX In Worksheets 'pour chaque feuille du classeur, FX sera l'une d'elle
      If FX.[A1] = nom Then 'si la cellule A1 de la feuille FX contient nom, faire la suite
        Cells(3, col).Resize(, 2).Copy FX.[A3]: lg2 = 4: lg1 = 4 'Cells(3, col) : cellule de la ligne 3, colonne col ;
        '.Resize(, 2) : colonne col + colonne à droite ; .Copy FX.[A3] copie des entêtes en feuille FX, cellule A3
        Do
          With Cells(lg1, col) 'pour la cellule en ligne lg1, colonne col (au départ : lg1 = 4)
            If IsEmpty(.Value) Then Exit Do 'si la cellule est vide : sortir de la boucle Do
            If .Value > 0 Or .Offset(, 1) > 0 Then 'si la cellule est > 0 (ou celle à sa droite), faire la suite
              .Resize(, 2).Copy FX.Cells(lg2, 1): lg2 = lg2 + 1 'copie des 2 cellules en FX, ligne lg2, colonne 1
            End If
            lg1 = lg1 + 1
          End With
        Loop
      End If
    Next FX

dhany

@Jeremulus

lis d'abord mon post précédent : https://forum.excel-pratique.com/viewtopic.php?p=674059#p674059


Tu a écrit :

dès que j'adapte le nom de la colonne "Résultats" et le nom de l'onglet "Feuil3" la macro ne marche plus

pour "Feuil3", seule cette ligne est concernée : If ActiveSheet.Name <> "Feuil3" Then Exit Sub

donc si tu renommes l'onglet en "Données" : If ActiveSheet.Name <> "Données" Then Exit Sub

tu dois obligatoirement lancer la macro à partir de cette feuille !


pour le nom de la colonne "Résultats", c'est ici : Loop Until Cells(3, col) = "Résultats"

donc si tu mets "Trucmuche" à la place : Loop Until Cells(3, col) = "Trucmuche"


Tu a écrit :

Du coup ce n'est pas possible de copier coller le tableau dans son intégralité ?

que veux-tu dire par là ? que t'aimerais avoir aussi les 3 premières colonnes "Col1", "Col2", "Résultats" ?

ou autre chose ? prends l'habitude de désigner clairement ce dont tu parles ; note aussi la position,

comme quand je mets C3 pour la cellule qui contient "Résultats".

dhany

Bonjour Dhany !

Merci pour ton aide et tes explications, c'est plus clair, notamment pour renommer "Feuil3" et "Résultats"

Je n'arrive cependant pas à appliquer la macro à mon fichier ... J'en joins un qui s'en approche le plus possible

6exemple-3.xlsm (27.67 Ko)

Si tu pouvais jeter un œil ce serait super !

Pour ce qui concerne la copie du tableau dans son intégralité, je m'excuse si je n'ai pas été assez clair ...

En fait oui j'aimerais également copier les colonnes "Titre1" (en B10) jusqu'à "Données de la classification ou calculées" (en AX10) dans les nouveaux onglets !

A bientôt

Jeremulus

voici ton fichier corrigé :

11exemple-3.xlsm (29.80 Ko)

c'était juste un p'tit problème de numéros de lignes : sur ta 1ère feuille "Rapport detaille", ton tableau était plus bas que dans ton fichier exemple, car il commence en ligne 10 et pas en ligne 3 ; de plus, les noms sont 2 lignes au-dessus de la ligne d'entêtes alors qu'avant c'était 1 seule ligne au-dessus.

voilà c'qui arrive, quand le demandeur ne joint pas un fichier représentatif ! tu aurais dû transmettre un fichier exemple dont le tableau commence en ligne 10, avec des noms en ligne 8 ; alors bien sûr après, tu t'retrouves coincé car tu sais pas comment faire toutes les adaptations nécessaires !

alors à toi d'faire ce p'tit jeu : compare le nouveau code VBA avec le précédent pour trouver tout c'que j'ai modifié ; courage !


oh j'oubliais un p'tit détail : pour la copie des premières colonnes, c'est fait aussi !

dhany h-animaux10

C'est parfait ! Milles merci Dhany !

Et en effet ça aurait été plus simple d'envoyer directement un fichier correspondant à mon fichier final ....

Hello Dhany,

Je souhaiterais modifier légèrement le code, mais je ne vois pas comment procéder

Il y a désormais dans mon tableau ( dans le "Rapport detaille" ) une colonne A qui est remplie, et que je souhaiterais copier dans les onglets avec le reste du tableau ...

J'aimerais aussi copier dans les nouveaux onglets les lignes 8 et 9

5exemple3bis.xlsm (30.96 Ko)

Une idée ?

Merci !

Bonjour Jeremulus,

tu a écrit :

Une idée ?

si, si, j'ai souvent d'bonnes idées !


voici la nouvelle version :

8exemple3bis.xlsm (33.81 Ko)

j'te laisse tout vérifier (comme d'hab, quoi : c'est moi qui fait tout l'boulot, et toi t'as juste à contrôler les résultats).


pour ton autre sujet « Filtrer, copier/coller, supprimer les doublons », c'est pas trop mon rayon, et j'suis débordé !

j'essayerai d'le voir quand j'pourrai, et si j'arrive à trouver une solution, mais vraiment, j'te promets rien !

dhany

Salut Dhany !

De très bonnes idées en effet

Merci pour le fichier, c'est top !

J'aimerais aussi ajouter dans les nouveaux onglets les noms au dessus des colonnes foncées, par exemple, pour l'onglet "Feuil7", ajouter "Martin" en case AY2 et AZ2, et ainsi de suite pour les autres onglets ....

( Effectivement c'est plutôt toi qui fait le travail ... Mais si toutefois tu as plus de temps tu pourrais m'expliquer comment arriver à ce genre de code )

A bientôt,

Jeremulus

Bonjour Jeremulus,

autre version du fichier :

6exemple3bis.xlsm (34.01 Ko)

tu a écrit :

comment arriver à ce genre de code

c'est en pratiquant ; on progresse au fur et à mesure ; tu pourrais commencer par là :

cours vba xlp

tu peux aussi faire une recherche google avec ces 3 mots : « cours vba gratuit »

bonne chance pour ton apprentissage du VBA !

dhany

Rechercher des sujets similaires à "filtrer copier coller donnees"