Copier données filtrées dans un tableau selon critère

Bonjour à tous,

J'ai besoin de votre aide. Je souhaite automatiser une tâche assez chronophage puisque répétée plusieurs fois sur un même fichier, mais je suis novice en VBA. Je m'explique :

  1. A partir de l'onglet "ExportInterface", j'effectue un filtre sur la colonne "Code element", par exemple "8131" (donnée qui se trouve également dans chaque onglet en A1) .
  2. Dans l'onglet "8131", je copie colle les données obtenues avec la 1ère étape, à partir de la cellule A4.
  3. Je répète l'opération avec toutes les valeurs "Code element" ayant un onglet correspondant.
  4. J'effectue ensuite mes contrôles avec des formules excel.

L'idée sera soit en plusieurs clics sur chaque onglet, copier coller les données filtrées avec un critère différent par onglet (étant donné mon niveau en VBA je partais de cette option).

Ou en 1 clic, effectuer les filtres /copier/coller enchainés les uns après les autres

Je pensais partir du code suivant mais je n'obtiens pas le résultat espéré puisque cela copie l'ensemble du tableau de l'onglet "ExportInterface" au lieu de copier mon tableau filtré.

Sub Bouton8131()
    Range("ExportInterface").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _
        "A1"), CopyToRange:=Range("A4"), Unique:=True
End Sub

Quelqu'un pourrait il m'expliquer où est l'erreur dans ce code ? ou si vous avez une meilleur idée je suis preneuse !

En vous remerciant par avance pour votre aide !

15trame-variables.xlsm (105.26 Ko)

Bonjour

Seul l'onglet ExportInterface est identifié comme source mais, ni l'onglet des critères, ni celui de destination, ne le sont

Range("ExportInterface").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Worksheets("Nom_feuille_critères").Range( _
        "A1"), CopyToRange:=Worksheets("Nom_feuille_destination").Range("A4"), Unique:=True

Bonsoir

Une version qui fait tout.

Bonjour à tous,

Merci pour vos retours.

Yal, votre proposition m'a l'air au top. J'ai essayé de la dupliquer dans mon fichier final (où j'ai plus d'onglets que dans la trame transmise), et j'ai un bug. Je n'arrive pas à comprendre d'où peut venir le problème, sachant que mes onglets sur lesquels je souhaite faire les copier/coller, ont les mêmes noms que ceux du fichier transmis. Est ce que cela pourrait provenir de mes autres onglets ?

Lorsque je lance la macro, excel m'indique à un bug à partir de "ReDim tbOut(1 To n, 1 To 7)"

Quelle est la valeur de n au moment du bug. S'il n'y a aucun code correspondant à celui recherché n = 0 et ça coince.

Voici une correction qui devrait résoudre le problème si c'est bien ce que je pense.

Avec la correction, toutes les données se collent dans les différents onglets (je ferai un test grandeur nature pour vérifier que j'ai bien toutes les données attendues mais à première vue ca me parait top !).

Par contre, j'ai une dernière question, si je souhaite conserver le format initial texte "000.00" pour les valeurs qui sont en colonne G, est ce qu'il y a un code particulier à mettre ? Je ne suis pas encore très sûre de préférer le format "000.00" plutôt que le format nombre classique "0,0"

En tout cas merci infiniment pour votre aide ! Nous allons gagner un temps fou dans notre traitement mensuel !

En y regardant de plus près j'ai identifié un problème potentiel.

Si le résultat du filtre compte moins de ligne que ce qu'il y en a avant l'exécution de la macro le résultat sera faux. J'ai donc apporté une correction. J'efface les données avant d'écrire le résultat.

Bonjour Yal,

Pour le coup en testant cette nouvelle version, le résultat obtenu est un peu bizarre : les données du tableau "ExportInterface" de la cellule A4:G33 disparaissent, et la copie des données dans les autres onglets ne se fait que sur le 1er onglet "8131".

Oups, je regarde ça.

Rien de grave, juste une erreur d'inattention. Quelques "." oubliés

J'ai testé cette nouvelle version en augmentant et en diminuant ma base de données du tableau "ExportInterface", et tout est ok

Bonjour,

Depuis les derniers échanges et la proposition de Yal qui correspondait à mes attentes, j'ai mis à jour mes tableaux en rajoutant des formules automatiques à partir des colonnes H. Mon problème, c'est que lorsque j’exécute la macro pour copier les valeurs de l'onglet "ExportInterface" vers chaque onglet, cela efface automatiquement toutes les valeurs que j'ai à partir de la colonne H.

Je n'ai pas réussi à trouver comment modifier le code pour résoudre mon problème, alors je me retourne vers vous.

Quelqu'un aurait il une idée ?

Cordialement

Bonjour

Pour que les formules ne soient plus effacées il suffit de remplacer le 11 par 7 dans la ligne :

Range(Cells(4, 1), Cells(n, 11)).ClearContents
Range(Cells(4, 1), Cells(n, 7)).ClearContents

mais cela ne règlera pas le souci parce que bien que présente la formule sera en erreur #REF!

Pour le moment tes formules ressemble à ça :

=RECHERCHEV(TEXTE($A4;"standard");#REF!;2;FAUX)
=RECHERCHEV(TEXTE($A4;"standard");#REF!;3;FAUX)
=RECHERCHEV(CNUM($A4);#REF!;8;FAUX)
=J4-CNUM(SUBSTITUE($G4;".";","))

Peux tu me donner leur syntaxe exacte. Qu'est ce qu'il y a à la place des #REF!

Je viens de modifier cette zone avec un test en grandeur nature et tout est ok !!

Je pensais que c'était cette zone qui déterminait la fin du tableau à obtenir :

ReDim tbOut(1 To n, 1 To 7)

Pour la formule en erreur, je ne vous avais pas mis tous les onglets dans le fichier, du coup cela créait une anomalie dans les formules car il y a des liens avec les onglets absents.

En tout cas merci pour votre retour rapide et votre aide

ReDim tbOut(1 To n, 1 To 7)

les formules sont à partir de la colonne h donc 8 donc cette ligne ne touche pas aux formules.

Rechercher des sujets similaires à "copier donnees filtrees tableau critere"