Vba excel copier lignes avec condition [Résolu/Fermé]

Signaler
Messages postés
76
Date d'inscription
jeudi 24 août 2006
Statut
Membre
Dernière intervention
8 avril 2016
-
 Gpierron -
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

Avez vous la solution?

5 réponses

Messages postés
1842
Date d'inscription
mercredi 19 janvier 2005
Statut
Membre
Dernière intervention
9 juin 2020
1 382
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
24
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60511 internautes nous ont dit merci ce mois-ci

Messages postés
76
Date d'inscription
jeudi 24 août 2006
Statut
Membre
Dernière intervention
8 avril 2016
13
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)
Merci mille fois !
Messages postés
1842
Date d'inscription
mercredi 19 janvier 2005
Statut
Membre
Dernière intervention
9 juin 2020
1 382
Hmm... bizarre.
Tu as bien adapté les 3 paramètres : nom de la feuille source, nom de la feuille de destination, colonne à tester ?
Messages postés
76
Date d'inscription
jeudi 24 août 2006
Statut
Membre
Dernière intervention
8 avril 2016
13
et voui...
Messages postés
76
Date d'inscription
jeudi 24 août 2006
Statut
Membre
Dernière intervention
8 avril 2016
13
et la procédure est arrêtée sur la sélection de la 2eme ligne de la feuille 1 (source données)
Messages postés
1842
Date d'inscription
mercredi 19 janvier 2005
Statut
Membre
Dernière intervention
9 juin 2020
1 382
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...
Messages postés
76
Date d'inscription
jeudi 24 août 2006
Statut
Membre
Dernière intervention
8 avril 2016
13
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+
>
Messages postés
76
Date d'inscription
jeudi 24 août 2006
Statut
Membre
Dernière intervention
8 avril 2016

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..
Messages postés
76
Date d'inscription
jeudi 24 août 2006
Statut
Membre
Dernière intervention
8 avril 2016
13
au fait, j suis qd meme obligée d enlever mes filtres, mais ca tourne qd meme
ciao
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
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)
Messages postés
76
Date d'inscription
jeudi 24 août 2006
Statut
Membre
Dernière intervention
8 avril 2016
13
le pb c'est que ça:
stocker le filtre actuel de la feuille 1 dans une var
je sais pas faire...