Filtre, copier et coller dans un autre classe

Résolu
Papillon34 -  
 Papillon34 -
Bonjour,

Je suis nouvelle dans ce forum et surtout débutante en vba!!!
Pour mon travail, mon patron m'a demandé de réaliser un programme qui va permettre d'un fichier nommé " Holding" de réaliser des filtres puis copier les données filtrées dans un autre classeur nommé "Ventilation"! Le problème que je rencontre c'est que le début fonction jusqu'au copier où ca ne fonctionne plus!!! Ca fait une semain que j'y suis dessus mais je ne trouve pas l'erreur et la macro a rajouté!!!!

Voici le code que j'ai fais

Sub Macro1()
'Macro1 Macro
' Macro enregistrée le 09/10/2007

    Windows("Balance holding.xls").Activate 'J'active ma feuille hoding
    ActiveSheet.Range("A1").AutoFilter , Field:=1, Criteria1:="<70601000>", VisibleDropDown:=False  'je réalise mon filtre en ne voulant que le compte 70601000.
    Dim i As Integer
    i = 1
    While Cells(i, 1) <> "" '1 représente ici la colonne
    Cells(i, 1).Copy ' je veux copier les données (seulement ce n'est pas la ligne deux mais une ligne n
    
    Windows("Ventilation des charges.xls").Activate
    Feuil3.Range("A12:c12").PasteSpecial ' Je veux le coller sur la colonne A et ligne 12!
    Operation = xlPasteSpecialOperationAdd
    
Wend
End Sub


Je sais que pour le coller j'ai faux mais je ne vois pas quoi mettre!!!

Merci de bien vouloir m'aider!!!!
Configuration: Windows XP
Internet Explorer 7.0

7 réponses

  1. Papillon34
     
    HELP ME... PLEASE!!!!

    Je suis désespérée!!!!
    0
  2. Polux31 Messages postés 7219 Statut Membre 1 204
     
    bonjour,

    En jetant un oeil vite fait, je constate que tu déclares un index i mais tu ne l'incrémentes pas dans la boucle du while ??? i garde donc toujours la valeur de 1. La ligne avant le Wend ajoute : i = i + 1.
    Pour le reste je ne sais pas, je ne suis pas spécialiste des macros excel :o(
    0
  3. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonjour,

    invrementer comme dit polux31 et aussi reactiver ta feuille "Balance holding.xls" en debut de boucle.

    Mais si tu dois faire ça avec tout les comptes regarde 'Données / Consolider..." (regarde l'aide excel sur 'consolider') si ce n'est pas adapté à ton problème.
    eric
    0
  4. Papou93 Messages postés 146 Date d'inscription   Statut Membre Dernière intervention   59
     
    Bonjour,

    Polux31 et eriiic ont parfaitement raison.
    Toutefois, il n'est pas indispensable d'activer les classeurs et les feuilles dans les opérations de filtrage ou de copier-coller : mentionner le nom du classeur suivi du nom (ou de l'index' de la feuille fonctionne tout aussi bien. Celà a l'avantage d'accélérer l'éxécution du code.
    Workbooks("Balance holding").Sheets(1).Columns("A:A").AutoFilter Field:=1, Criteria1:="=70601000", Operator:=xlAnd

    Par contre, tu ne peux pas utilier le filtre dans ta boucle de recopie, car les lignes cachées sont "intégrées dans le While...Wend. Il te faut donc tester chaque valeur dans la colonne A:A, et faire le copier-coller si la valeur est "70601000".
    Je te propose donc la macro suivante :
    Sub Macro1()
    With WorkBooks("Balance holding").sheets(1)
      .Range("A:A").AutoFilter , Field:=1, Criteria1:="<70601000>", Operator:= xlAnd
      Dim i As Integer
      i = 1
      While .Cells(i, 1) <> "" '1 représente ici la colonne
        If .Cells(i,1)="70601000" Then .Cells(i, 1).Copy
        WorkBooks("Ventilation des charges").Range("A12:c12").PasteSpecial
        Operation = xlPasteSpecialOperationAdd
      Wend
    End With
    End Sub

    J'espère que ces explications t'aideront, sinon n'hésites pas à en redemander.
    Cordialement.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Papillon34
     
    Bonjour,

    Merci à vous...
    Hier en faite j'ai continué à chercher et j'ai trouvé :

    Private Sub Transfert_donnees_Click()
    Windows("Balance holding.xls").Activate
    Sheets("Feuil1").Select
    Selection.AutoFilter Field:=1, Criteria1:="=70601000", Operator:=xlAnd
    Cells(1, 1).Select
    Range(Selection, Selection.End(xlToRight)).Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    Windows("Ventilation des charges.xls").Activate
    Feuil1.Range("A12:A12").PasteSpecial
    Operation = xlPasteSpecialOperationNone
    End Sub

    Ca fonctionne mais le suel problème c'est que ça me prend la première ligne...
    Et lorsque je met Cells (2,1) Ca ma prend bien que le compte 70601000 mais cependant ne me prend pas les colonnes C et D car dans la C il y a un vide...
    0
  7. Papou93 Messages postés 146 Date d'inscription   Statut Membre Dernière intervention   59
     
    Re-bonjour,

    Essaies en remplaçant :
    Cells(1, 1).Select 
    Range(Selection, Selection.End(xlToRight)).Select 
    Range(Selection, Selection.End(xlDown)).Select 
    Selection.Copy 

    par :
    Range(Cells(1, 1), Cells(Cells(1, 1).End(xlDown).Row, Cells(1, 1).End(xlToRight).Column)).copy

    Cordialement.
    0
  8. Papillon34
     
    Ca fonctionne pas mais j'ai un peu magouillé, en faite j'ai masqué la ligne que je ne voulais pas!
    0