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

Résolu/Fermé
Ecrelinf Messages postés 36 Date d'inscription mercredi 12 mars 2014 Statut Membre Dernière intervention 26 février 2015 - 19 mars 2014 à 11:04
Ecrelinf Messages postés 36 Date d'inscription mercredi 12 mars 2014 Statut Membre Dernière intervention 26 février 2015 - 19 mars 2014 à 11:52
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

A voir également:

2 réponses

Zoul67 Messages postés 1959 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 149
19 mars 2014 à 11:17
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
Ecrelinf Messages postés 36 Date d'inscription mercredi 12 mars 2014 Statut Membre Dernière intervention 26 février 2015
19 mars 2014 à 11:41
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
Zoul67 Messages postés 1959 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 149
19 mars 2014 à 11:48
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
Ecrelinf Messages postés 36 Date d'inscription mercredi 12 mars 2014 Statut Membre Dernière intervention 26 février 2015
19 mars 2014 à 11:52
Hmm ok merci pour l'astuce !
0