Rechercher : dans
Par :

Vba excel copier lignes avec condition

Dernière réponse le 4 avr 2008 à 00:42:03 lulu37, le 4 sep 2006 à 11:22:45 
 Signaler ce message aux modérateurs

Bonjour,
J'ai beau chercher, je ne trouve pas ...
J'ai 2 feuilles dans 1 classeur
Je souhaite copier chaque ligne de la feuille 1 qui contient une valeur dans la colonne C, vers la feuille 2
J'ai bien pensé aux filtres..., mais je préfererai un code qui permette de prendre en compte toutes les lignes meme si j'ai des filtres actifs sur la feuille

Configuration: excel97 vba6 sous windows


Avez vous la solution?

1

JF, le 4 sep 2006 à 13:18:06

Ce que je ferai:
'début
-stocker le filtre actuel de la feuille 1 dans une var
-filtrer le feuille 1 pour qu'elle ne contienne que les lignes avec valeur non null dans la colonne C.
-copier la feuille 1 entière dans la feuille 2
-appliquer le filtre sauvegardé auparavant

et c'est terminé (c'est ce qu'il y a de plus simple)

Répondre à JF

2

lulu37, le 4 sep 2006 à 14:04:39

Le pb c'est que ça:
stocker le filtre actuel de la feuille 1 dans une var
je sais pas faire...

Répondre à lulu37

3

Armojax, le 4 sep 2006 à 14:22:10
  • +3

Re, ludivine,

Une petite macro...

Sub FiltreLulu()

  Dim Lig     As Long
  Dim Col     As String
  Dim NbrLig  As Long
  Dim NumLig  As Long
  
  Sheets("Feuil2").Activate ' feuille de destination
  
  Col = "C"                 ' colonne de la donnée non vide à tester
  NumLig = 0
  With Sheets("Feuil1")     ' feuille source
  NbrLig = .Cells(65536, Col).End(xlUp).Row
  For Lig = 1 To NbrLig
    If .Cells(Lig, Col).Value <> "" Then
      .Cells(Lig, Col).EntireRow.Copy
      NumLig = NumLig + 1
      Cells(NumLig, 1).Select
      ActiveSheet.Paste
    End If
  Next
  End With
    
End Sub

Répondre à Armojax

4

lulu37, le 4 sep 2006 à 15:25:13
  • +1

Coucou

Ca échoue en fin de procédure :
Cells(NumLig, 1).Select
erreur exe 1004
Ca n'a apparemment rien à voir avec mes lignes d entete, j'ai testé sans (au cas où...j'ai 2 lignes d'entete sur chaque feuille)

Répondre à lulu37

5

Armojax, le 4 sep 2006 à 15:46:14
  • +1

Hmm... bizarre.
Tu as bien adapté les 3 paramètres : nom de la feuille source, nom de la feuille de destination, colonne à tester ?

Répondre à Armojax

6

lulu37, le 4 sep 2006 à 16:53:36
  • +1

Et voui...

Répondre à lulu37

7

lulu37, le 5 sep 2006 à 16:03:33
  • +1

Et la procédure est arrêtée sur la sélection de la 2eme ligne de la feuille 1 (source données)

Répondre à lulu37

8

Armojax, le 6 sep 2006 à 08:26:02
  • +1

Désolé, j'étais pas là hier...
A distance c'est un peu dur... Analyse toi-même le contexte. Quand ça plante, et que tu as la ligne surlignée en jaune, n'arrête pas tout, et analyse le contexte :

1) Affiche la fenêtre des Variables locales, et regarde les valeurs des variables. Pour que ça plante sur un Select, le NumLig a peut-être une gueule bizarre...

2) Affiche aussi la fenêtre Exécution. Tu peux y taper des commandes. Par exemple, demander quelle est la feuille active, en faisant Print ActiveSheet.Name, etc. (tu peux taper un ? à la place de Print, ça fait pareil).

Un peu bestialement, j'analyse toutes les lignes de la feuille source, y compris les lignes d'entête. Tu peux modifier ça en changeant la ligne de départ dans le For... Et de la même façon, j'écris à partir de la première ligne de la feuille de destination. Si tu as des entêtes, augmente d'autant la valeur initiale de NumLig. Et il faudrait sans doute, avant tout ça, effacer dans la feuille de destination les lignes du résultat précédent. C'est juste un modèle, qu'il faut adapter...

Répondre à Armojax

9

lulu37, le 11 sep 2006 à 16:49:04
  • +5

Salut,
Finalement ça marche bien, je n'avais pas du adapter les paramètres comme il fallait... en tout cas merci Armojax

pour ceux que ca interesse , le code final :

  
  Dim Lig     As Long
  Dim Col     As String
  Dim NbrLig  As Long
  Dim NumLig  As Long
  
  Sheets("feuil2").Activate ' feuille de destination
  
  Col = "i"                 ' colonne données non vides à tester'
  NumLig = 2          'alors là ca doit etre le N° de la 1er ligne de données en comptant la ligne 1 = 0 .... ? '
  With Sheets("feuil1")     ' feuille source'
  NbrLig = .Cells(65536, Col).End(xlUp).Row
  For Lig = 3 To NbrLig             'n° de la 1ere ligne de données'
    If .Cells(Lig, Col).Value <> "" Then
      .Cells(Lig, Col).EntireRow.Copy
      NumLig = NumLig + 1
      Sheets("feuil2").Cells(NumLig, 1).Insert Shift:=xlDown
            'ici pour insérer ou  .Paste pour coller' 
    End If
  Next
  End With
     


a+

Répondre à lulu37

12

 kifsyl, le 4 avr 2008 à 00:42:03
  • +1

Bonsoir je suis novice en vba et si tu pouvait m 'eclairer sur ton code ca marrangerait bien.


Voila les modification que j'ai essaiyé de faire sur ton code mais ca ne marche pas.


Dim Lig As Long
Dim Col As String
Dim NbrLig As Long
Dim NumLig As Long

Sheets("feuil15").Activate ' feuille de destination

""""" Col = "g" ' colonne données non vides à tester'
NumLig = 0 'alors là ca doit etre le N° de la 1er ligne de données en comptant la ligne 1 = 0 .... ? '
""""" With Sheets("feuil11") ' feuille source'
NbrLig = .Cells(65536, Col).End(xlUp).Row
"""""" For Lig = 1 To NbrLig 'n° de la 1ere ligne de données'
If .Cells(Lig, Col).Value <> "" Then
.Cells(Lig, Col).EntireRow.Copy
NumLig = NumLig + 1
""""" Sheets("feuil15").Cells(NumLig, 1).Insert Shift:=xlDown
'ici pour insérer ou .Paste pour coller'
End If
Next
End With

Ca me donne " proprieté ou methode non gereé par cette objet"
Je nai que 415 ligne a verifier ,et ne pas copier la ligne entire jusqu'a la col. H .
Voila j'espere que tu va s t'en sortir et merci d'avance..

Répondre à kifsyl

10

lulu37, le 11 sep 2006 à 17:01:14
  • +1

Au fait, j suis qd meme obligée d enlever mes filtres, mais ca tourne qd meme
ciao

Répondre à lulu37

11

momo, le 8 mar 2008 à 20:58:10
  • +1

J'ai 6 feuilles dans un classeur, je souhaiterai copier les lignes des feuilles 1à 5 de la colonne I dans les lignes de la feuille 6 colonneF
F1: 62 lignes colonne C
F2: 47 lignes colonne C
F3: 43 lignes colonne C vers lignes de la feuille 6 colonne F (feuille 6: 232 lignes).



F4: 32 lignes colonne C
F5: 43 lignes colonne C

Répondre à momo