XL 2013 copier coller des plages de données selon critere dans une autre feuille selon de la feuille

titil97

XLDnaute Nouveau
Bonjour,

J'ai trouvé cette macro qui marche bien. Mais il me manque un truc (je ne veux pas que la colonne "nom" soi exporté bien que c'est ma référence et je voudrais aussi que le début de la plage copiée atterrisse en B64.

Pouvez vous m'aider?
 

Pièces jointes

  • Copie de TESTv1 fonctionne.xls
    190.5 KB · Affichages: 9

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour et bienvenue sur le forum.

Demande éffectuée à 11:28 et rappel à 12:18. Va falloir apprendre à être patient...;) on est pas aux pièces.

voici ce qu'est devenue votre macro2 après avoir supprimé les colonnes 'Nom' des feuilles.
AdvancedFilter ne copie pas les données des colonnes dont il ne trouve pas l'étiquette dans la destination.

VB:
Sub Macro2()
    Dim pl As Range
    Set pl = Sheets("Feuil1").Range("base")
    pl.Name = "base"
    For Each sh In Sheets
        If sh.Name <> "Feuil1" Then
            With sh
                .[K1] = "Nom"
                .[K2] = sh.Name
                pl.AdvancedFilter Action:=xlFilterCopy, _
                                  CriteriaRange:=.[K1:K2], CopyToRange:=.Range("A1:i1"), Unique:=False
                .[K1:K2].ClearContents
            End With
        End If
    Next sh
End Sub

P.S. vous avez excel 2013, pourquoi ne pas enregistrer vos fichier en .xlsx, format existant depuis la version 2007 plus léger et répondant aux normes d'aujourd'hui.

Bon après-midi, que je vous souhaite pleine d'attentes diverses...
 

Pièces jointes

  • Copie de TESTv1 fonctionne.xls
    214.5 KB · Affichages: 14

titil97

XLDnaute Nouveau
J'ai essayé ça mais ça marche pas

Je vous avouerai que c'est pas trop mon truc les macros :)

Si je change l emplacement des étiquettes ça marche?

VB:
VB:Copier dans le presse-papier

Sub Macro2()
    Dim pl As Range
    Set pl = Sheets("Feuil1").Range("base")
    pl.Name = "base"
    For Each sh In Sheets
        If sh.Name <> "Feuil1" Then
            With sh
                .[K1] = "Nom"
                .[K2] = sh.Name
                pl.AdvancedFilter Action:=xlFilterCopy, _
                                  CriteriaRange:=.[K1:K2], CopyToRange:=.Range("B64"), [/COLOR]Unique:=False
                .[K1:K2].ClearContents
            End With
        End If
    Next sh
End Sub
 
Dernière édition:

Hasco

XLDnaute Barbatruc
Repose en paix
Re,
Ce que je vous disais au post #2
AdvancedFilter ne copie pas les données des colonnes dont il ne trouve pas l'étiquette dans la destination.

Cela suppose que vous mettiez les étiquettes (entêtes) de colonnes désirées dans la plage de destination (B64:J64).

Que vous mettiez l'addresse complète en tant que destination et le . (point) devant qui se rapportera à l'objet référencé par la ligne With, à savoir 'sh' qui est la feuille de destination.

si vous ne mettez que B64 sans les entêtes sur la feuille de destination, il vous remettra TOUTES les entêtes y compris 'Nom'

donc CopyToRange:= .Range("B64;J64") 'Ne pas oublier le point devant Range

Et si cela ne va pas. Plutôt que de dire 'cà marche pas', décrivez ce qui se passe lorsque vous lancez votre macro, avec éventuellement les messages d'erreur et sur quelle ligne vous renvoie le debogueur

A+
 
Dernière édition:

titil97

XLDnaute Nouveau
je reviens sur le sujet j 'ai appliqué la macro à un tableau et j'ai une erreur

Code:
Set pl = Sheets("Feuil1").Range("base")

ça me met erreur définie par l'application ou l'objet

VB:
Sub Macro2()
    Dim pl As Range
    Set pl = Sheets("Feuil1").Range("base")
    pl.Name = "base"
    For Each Sh In Sheets
        If Sh.Name <> "Feuil1" Then
            With Sh
                .[K1] = "Nom"
                .[K2] = Sh.Name
                pl.AdvancedFilter Action:=xlFilterCopy, _
                                  CriteriaRange:=.[K1:K2], CopyToRange:=.Range("D63:L63"), Unique:=False
                .[K1:K2].ClearContents
            End With
        End If
    Next Sh
End Sub

Merci pour votre aide
 

titil97

XLDnaute Nouveau
Roblochon,

Tout d'abord merci pour ton aide.

J'ai du supprimer des onglets car le fichier était trop gros

Voilà le Fichier tel qu'il doit être au final.

Merci par avance
 

Pièces jointes

  • test v2000.xls
    738 KB · Affichages: 6
Dernière édition:

Hasco

XLDnaute Barbatruc
Repose en paix
Re,

En fait il manquait des informations essentielles dans votre demande. Notamment sur le nom des feuilles à traiter. En examinant votre fichier j'en ai déduis que seules les feuilles dont le nom est dans la colonne A de la feuille 'nom' (cachée) était à traiter.

Tâchez la prochaine fois d'être plus précis.
Et pourquoi vous n'enregistrez pas vos classeur en XLSX. A moins de travailler sous une version excel <2007 le format .xls n'a plus lieu d'être

Cordialement
 

Pièces jointes

  • test v2000.xls
    744.5 KB · Affichages: 9

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Ici il s'agissait d'un filtre avancé, pour faire ce que vous désirez, soit il faut affiner le filtre soit faire tout à fait autre chose.
Aussi comme il s'agit d'autre chose, ouvrez une nouvelle discussion en expliquant en long et en travers (notamment tous les critères permettant de sélectionner la ligne désirée) et ce que vous voulez exactement en faire.
Joignez un fichier exemple à votre nouvelle discussion.

Cordialement
 

Discussions similaires