Chercher première ligne vide

Alexandre -  
 Alexandre -
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

1 réponse

  1. Paf
     
    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
    1. Alexandre
       
      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
    2. Alexandre
       
      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