Filtre, copier et coller dans un autre classe

Résolu/Fermé
Papillon34 - 15 oct. 2007 à 14:01
 Papillon34 - 17 oct. 2007 à 11:50
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!!!!
A voir également:

7 réponses

HELP ME... PLEASE!!!!

Je suis désespérée!!!!
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
17 oct. 2007 à 04:40
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
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 212
17 oct. 2007 à 07:42
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
Papou93 Messages postés 146 Date d'inscription mercredi 4 avril 2007 Statut Membre Dernière intervention 5 juin 2012 59
17 oct. 2007 à 10:41
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
Papou93 Messages postés 146 Date d'inscription mercredi 4 avril 2007 Statut Membre Dernière intervention 5 juin 2012 59
17 oct. 2007 à 11:39
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
Ca fonctionne pas mais j'ai un peu magouillé, en faite j'ai masqué la ligne que je ne voulais pas!
0