rss
Rechercher : dans
Par : Pertinence Date Nom d'utilisateur
Statut : Résolu

Vba excel copier lignes avec condition

Posté par lulu37, le lundi 4 septembre 2006 à 11:22:45
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?
Répondre à lulu37  Signaler ce message aux modérateurs Aller au dernier message

1


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
JF, le lundi 4 septembre 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


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
lulu37, le lundi 4 septembre 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


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Armojax, le lundi 4 septembre 2006 à 14:22:10
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


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
lulu37, le lundi 4 septembre 2006 à 15:25: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)
Répondre à lulu37

5


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Armojax, le lundi 4 septembre 2006 à 15:46:14
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


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
lulu37, le lundi 4 septembre 2006 à 16:53:36
et voui...
Répondre à lulu37

7


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
lulu37, le mardi 5 septembre 2006 à 16:03:33
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


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Armojax, le mercredi 6 septembre 2006 à 08:26:02
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


  • 2
    Ce message vous semble utile, votez !
  • Ce message ne vous semble pas utile, votez !
  • Signaler ce message aux modérateurs
lulu37, le lundi 11 septembre 2006 à 16:49:04
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


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
 kifsyl, le vendredi 4 avril 2008 à 00:42:03
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


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
lulu37, le lundi 11 septembre 2006 à 17:01:14
au fait, j suis qd meme obligée d enlever mes filtres, mais ca tourne qd meme
ciao
Répondre à lulu37

11


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
momo, le samedi 8 mars 2008 à 20:58:10
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
Logiciels pertinents trouvés dans les téléchargements
Télécharger Excel Viewer 2003Excel Viewer - Avec Microsoft Office Excel Viewer 2003, vous pouvez ouvrir, afficher et imprimer des classeurs Excel (fichiers XLS ), même...Catégorie: Tableur
Licence: Freeware/gratuit
Télécharger Real Alternative 1.8.0Real Alternative - Real Alternative permet de lire des fichiers RealMedia sans avoir à installer RealPlayer. Ainsi, tous les formats...Catégorie: Codecs
Licence: Freeware/gratuit
Télécharger GANTT Project 2.0.7GANTT Project - GanttProject est un outil de gestion de projet libre, permettant de réaliser des diagrammes de GANTT afin de planifier un...Catégorie: Gestion de projet
Licence: Open Source
Télécharger Coloriage 1.1.4Coloriage - Coloriage est un logiciel de coloriage pour jeunes enfants, à la manière de Tux Paint . Il répertorie quelque 220 dessins à...Catégorie: Dessin
Licence: Freeware/gratuit
Plus de logiciels gratuits sur « vba excel copier lignes avec condition »