Chercher première ligne vide

Fermé
Alexandre - Modifié par Alexandre le 27/04/2012 à 11:11
 Alexandre - 27 avril 2012 à 17:12
Bonjour,

J'ai créé une macro dans Excel 2007 pour copier des lignes qui on un certain critère dans la colonne B dans une autre feuille.

Ca marche super bien, mais que je veux faire un deuxième traitement sur la colonne C et je n'arrive pas à sélectionner la dernière ligne vide ...

Tableau source :
Colone A : Date
Colone B : compte débité
Colone C : compte crédité
Colone D : montant

Le but étant de recopier toutes les ligne ou le compte désiré est débité, puis ensuite les lignes ou il est crédité

Ou si vous pouvez mixier pour mettre un critère de selection "ou" ça va aussi ! :-)

Un grand merci d'avance


Voici le script :

Sub ImpressionGrandLivre()

Sheets(Array("Journal 2011", "Journal 2012", "Grand Livre")).Select
Sheets("Journal 2011").Activate

Dim Lig As Long
Dim Col As String
Dim NbrLig As Long
Dim NumLig As Long

Sheets("Grand Livre").Activate ' feuille destination

Col = "B" ' colonne de la donnée non vide à tester
NumLig = 0
With Sheets("Journal 2011") ' feuille source
NbrLig = .Cells(65536, Col).End(xlUp).Row
For Lig = 1 To NbrLig ' numéro de la prmière ligne de données à copier
If .Cells(Lig, Col).Value = "1010" Then
.Cells(Lig, Col).EntireRow.Copy
NumLig = NumLig + 1
Cells(NumLig + 6, 1).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End If
Next
End With


Col = "C" ' colonne de la donnée non vide à tester
NumLig = 0
With Sheets("Journal 2011") ' feuille source
NbrLig = .Cells(65536, Col).End(xlUp).Row
For Lig = 1 To NbrLig ' numéro de la prmière ligne de données à copier
If .Cells(Lig, Col).Value = "1010" Then
.Cells(Lig, Col).EntireRow.Copy
NumLig = NumLig + 1
Cells(NumLig + Range(A65536).End(xlUp).Offset(1, 0), 1).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End If
Next
End With

End Sub
A voir également:

1 réponse

bonjour,

a priori pour chaque date en colonne A on a une information en colonne B ou en colonne C . on peut alors balayer toute la colonne A, tester si en col B ou en col C on a 1010 et copier la ligne dans l'autre feuille. Si la toute première ligne copiée est bien positionnée les autres vont être copiées à la suite


....... 
NumLig = 0 
Col = 1 ' colonne A 
With Sheets("Journal 2011") ' feuille source 
NbrLig = .Cells(65536, Col).End(xlUp).Row ' attention à partir de Excel 2007 on peut avoir plus de 1000000 lignes 
For Lig = 1 To NbrLig ' numéro de la prmière ligne de données à copier 
   If .Cells(Lig, Col+1).Value = "1010" or .Cells(Lig, Col+2).Value = "1010" Then 'si en colonne B...ou en colonne C 
     .Cells(Lig, Col).EntireRow.Copy 
     NumLig = NumLig + 1 
     Sheets("Grand Livre").Cells(NumLig + 6, 1).Select  
     Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
:=False, Transpose:=False 
   end if 
Next 
End With 
...


(Pas sûr d'avoir répondu a tout le problème !)
A+
1
Super merci ...

Mais je dois avoir quelque chose qui bloque, car j'ai toujours le message "erreur d'exécution '1004' sans que la macro ne tourne.

Est-ce que vous auriez quand même la solution pour trouver la ligne vide, car dans l'optique ou ça marche bien, je voudrais mettre plusieurs macro à la suite avec des critères différents.

L'erreur est dans la 7ème ligne avant la fin "Cells(NumLig + Range(A65536).End(xlUp).Offset(1, 0), 1).Select "

A+
0
J'ai trouvé quelque chose ...

Cells(NumLig + WorksheetFunction.CountA(Range("A:A")), 1).Select
Mais au bout de quelques lignes, Excel m'insert des lignes vides ...

Par contre je n'arrive pas encore à maîtriser le "OU" ...

Sheets(Array("Journal 2011", "Journal 2012", "Grand Livre")).Select
Sheets("Journal 2011").Activate

Dim Lig As Long
Dim Col As String
Dim NbrLig As Long
Dim NumLig As Long

Sheets("Grand Livre").Activate ' feuille destination

Col = "B" ' colonne de la donnée non vide à tester
NumLig = 0
With Sheets("Journal 2011") ' feuille source
NbrLig = .Cells(65536, Col).End(xlUp).Row
For Lig = 1 To NbrLig ' numéro de la prmière ligne de données à copier
If .Cells(Lig, Col).Value = "1010" Then
.Cells(Lig, Col).EntireRow.Copy
NumLig = NumLig + 1
Cells(NumLig + 6, 1).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End If
Next
End With


Col = "C" ' colonne de la donnée non vide à tester
NumLig = 0
With Sheets("Journal 2011") ' feuille source
NbrLig = .Cells(65536, Col).End(xlUp).Row
For Lig = 1 To NbrLig ' numéro de la prmière ligne de données à copier
If .Cells(Lig, Col).Value = "1010" Then
.Cells(Lig, Col).EntireRow.Copy
NumLig = NumLig + 1
Cells(NumLig + WorksheetFunction.CountA(Range("A:A")), 1).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End If
Next
End With

End Sub
0