Repérer une ligne, la copier et la coller dans une autre feuille

Résolu
Ecrelinf Messages postés 36 Statut Membre -  
Ecrelinf Messages postés 36 Statut Membre -
Bonjour à tous, c'est encore moi !

Je rencontre quelques difficultés sur VBA. En effet, j'ai deux feuilles : feuille1 et feuille2.
Je souhaiterais réaliser une macro qui me permettrait de :
- Dans la feuille1 : Copier les lignes dont : A<>"" ET K=""
- Dans la feuille2 : Coller ces lignes les unes après les autres.

Actuellement j'ai essayé ça :
Dim p As Long
With Worksheets("Feuille1")
For p = 2 To j - 1 'j-1 est la dernière ligne du tableau qui
'm'intéresse, j'ai déjà fait le nécessaire
If Range("K" & p).Value = "" And Range("A" & p) <> "" Then
Rows(p).Copy
Sheets("Feuille2").Select
Range("A2").Select
ActiveSheet.Paste
End If
Next p
End With

Lorsque j'exécute, la dernière ligne qui remplit les conditions voulues est alors copiée sur la ligne 2 de ma feuille2, bien que j'aie plusieurs ligne qui remplissent les-dites conditions.
J'ai donc tenté autre chose :

Dim p As Long
Dim a As Long
With Worksheets("Feuille1")
For p = 2 To j - 1 'j-1 est la dernière ligne du tableau qui
'm'intéresse, j'ai déjà fait le nécessaire
If Range("K" & p).Value = "" And Range("A" & p) <> "" Then
Rows(p).Copy
Sheets("Feuille2").Select
For a = 1 To 100
If Range("A" & a).Value = "" Then
Rows(a).Select
ActiveSheet.Paste
End If
Next a
End If
Next p
End With

Et donc là lorsque j'exécute, ce n'est plus la dernière mais la première ligne remplissant les conditions qui est copiée dans les lignes 2 à 100 ...

Quelqu'un aurait-il une idée de comment résoudre ce mic-mac ? Ah et je suis débutant sur vba donc je passe très certainement à côté de quelque chose d'énorme hein ^^'

Merci d'avance !

Ecrelinf

2 réponses

  1. Zoul67 Messages postés 2001 Statut Membre 149
     
    Bonjour,

    Tu dois gérer l'incrémentation au niveau de la feuille 2 en fonction de la réalisation des conditions sur la feuille 1 (tu collais la même ligne sur les lignes 1 à 100) :

    Dim ligne_copier As Long
    Dim ligne_coller As Long
    ligne_coller = 2
    With Worksheets("Feuille1")
    For ligne_copier = 2 To j - 1 'j-1 est la dernière ligne du tableau qui
    'm'intéresse, j'ai déjà fait le nécessaire
    If .Range("K" & ligne_copier).Value = "" And .Range("A" & ligne_copier) <> "" Then
    .Rows(ligne_copier).Copy
    Sheets("Feuille2").Select
    Rows(ligne_coller).Select
    ActiveSheet.Paste
    ligne_coller = ligne_coller + 1
    End If
    End If
    Next p
    End With

    A+
    1
  2. Ecrelinf Messages postés 36 Statut Membre
     
    Décidemment Zoul, toujours là pour me tirer d'affaires ! :) Heureusement que tu ne bosses pas avec moi sinon je te serai redevable à vie en café !

    Merci tout fonctionne nickel !
    Mais ma curiosité me pousse à te demander quelle est la différence entre un .Range et un Range (en gros à quoi sert le point devant le range ? ou le rows)
    0
    1. Zoul67 Messages postés 2001 Statut Membre 149
       
      Bien vu pour le point.
      Quand tu utilises With Worksheets("Feuille1"), c'est pour éviter d'écrire Worksheets("Feuille1"), donc dans un With le point indique que c'est un attribut du Worksheet. Si tu ne mets pas le point, je crois que c'est la feuille active.

      With Worksheets("Feuille1")
      If .Range("K" & ligne_copier).Value = "" And .Range("A" & ligne_copier) <> "" Then .Rows(ligne_copier).Copy
      End With

      <=>

      If Worksheets("Feuille1").Range("K" & ligne_copier).Value = "" And Worksheets("Feuille1").Range("A" & ligne_copier) <> "" Then Worksheets("Feuille1").Rows(ligne_copier).Copy
      0
    2. Ecrelinf Messages postés 36 Statut Membre
       
      Hmm ok merci pour l'astuce !
      0