Posez votre question Signaler

Vba excel copier lignes avec condition [Résolu]

lulu37 75Messages postés jeudi 24 août 2006Date d'inscription 15 octobre 2013 Dernière intervention - Dernière réponse le 4 avril 2008 à 00:42
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?
Lire la suite 
Réponse
+21
moins plus
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
lulu37 75Messages postés jeudi 24 août 2006Date d'inscription 15 octobre 2013 Dernière intervention - 4 sept. 2006 à 15:25
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
Ajouter un commentaire
Réponse
+1
moins plus
Hmm... bizarre.
Tu as bien adapté les 3 paramètres : nom de la feuille source, nom de la feuille de destination, colonne à tester ?
lulu37 75Messages postés jeudi 24 août 2006Date d'inscription 15 octobre 2013 Dernière intervention - 4 sept. 2006 à 16:53
et voui...
Répondre
lulu37 75Messages postés jeudi 24 août 2006Date d'inscription 15 octobre 2013 Dernière intervention - 5 sept. 2006 à 16:03
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
Ajouter un commentaire
Réponse
+1
moins plus
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...
lulu37 75Messages postés jeudi 24 août 2006Date d'inscription 15 octobre 2013 Dernière intervention - 11 sept. 2006 à 16:49
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
kifsyl- 4 avril 2008 à 00:42
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
lulu37 75Messages postés jeudi 24 août 2006Date d'inscription 15 octobre 2013 Dernière intervention - 11 sept. 2006 à 17:01
au fait, j suis qd meme obligée d enlever mes filtres, mais ca tourne qd meme
ciao
Répondre
Ajouter un commentaire
Réponse
+1
moins plus
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
Ajouter un commentaire
Réponse
+0
moins plus
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)
lulu37 75Messages postés jeudi 24 août 2006Date d'inscription 15 octobre 2013 Dernière intervention - 4 sept. 2006 à 14:04
le pb c'est que ça:
stocker le filtre actuel de la feuille 1 dans une var
je sais pas faire...
Répondre
Ajouter un commentaire
Ce document intitulé «  vba excel copier lignes avec condition  » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.