Compter nombre ligne vide jusqu'à prochaine non vide

Bonjour à tous,

Voici ma problématique (image en PJ pour illustrer) :

A partir de Range(G13:H13) je voudrais compter le nombre de ligne vide jusqu'à la prochaine non vide. Dans l'exemple, les msgbox devrait afficher 3, 2 puis 5.

Merci d'avance pour votre aide.

exemple

bonjour,

une proposition

Sub test()
    dl1 = Cells(Rows.Count, "G").End(xlUp).Row
    dl2 = Cells(Rows.Count, "H").End(xlUp).Row
    If dl1 > dl2 Then dl = dl1 Else dl = dl2
    i = 13
    c = 1
    Do
        Do
            i = i + 1
            c = c + 1
        Loop While Cells(i, "G") = "" And Cells(i, "H") = ""
        MsgBox c
        c = 0
    Loop Until i >= dl
End Sub

Parfait h2so4 cela fonctionne parfaitement.

Merci beaucoup !

J'aurais une dernière petite question concernant cet exemple :

Je voudrais qu'à la place du nombre de lignes indiqué dans le msgbox on retrouve le numéro de ligne traité ainsi que les numéros de ligne associés au groupe :

Voici un exemple des msg pour illustrer tout ca :

13, 14, 15

14, 13, 15

15, 13, 14

16, 17

17, 16

18, 19, 20, 21, 22

19, 18, 20, 21, 22

20, 18, 19, 21, 22

21, 18, 19, 20, 22

22, 18, 19, 20, 21

etc ...

Merci d'avance !

bonjour,

à tester

Sub test()
    dl1 = Cells(Rows.Count, "G").End(xlUp).Row
    dl2 = Cells(Rows.Count, "H").End(xlUp).Row
    If dl1 > dl2 Then dl = dl1 Else dl = dl2
    i = 13
    s = i & ""
    Do
        Do
            i = i + 1
            If s <> "" Then s = s & "," & i Else s = i & ""
        Loop While Cells(i, "G") = "" And Cells(i, "H") = ""

        t = Split(s, ",")
        s = ":" & s & "."
        For k = LBound(t) To UBound(t)
        MsgBox t(k) & Replace(Replace(Replace(Replace(s, t(k), ""), ",,", ","), ",.", "."), ":,", ":")
        Next k
        s = ""
    Loop Until i >= dl
End Sub

Encore une fois cela fonctionne du premier coups !

Est-il possible de stocker sous une variable les nombres contenu dans la msgbox afin de les utiliser dans une autre macro (ceci dans le but de faire appel à ces lignes)?

Encore merci h2so4 !!!

re-bonjour,

j'ai adapté la procédure pour en faire une fonction avec un paramètre (le numéro de ligne pour lequel il faut retourner les autres lignes du même groupe)

Function lignes(nl)
    dl1 = Cells(Rows.Count, "G").End(xlUp).Row
    dl2 = Cells(Rows.Count, "H").End(xlUp).Row
    If dl1 > dl2 Then dl = dl1 Else dl = dl2
    i = 13
    s = i & ""
    Do
        Do
            i = i + 1
            If s <> "" Then s = s & "," & i Else s = i & ""
        Loop While Cells(i, "G") = "" And Cells(i, "H") = ""

        t = Split(s, ",")
        s = ":" & s & "."
        For k = LBound(t) To UBound(t)
        If Val(t(k)) = nl Then lignes = t(k) & Replace(Replace(Replace(Replace(s, t(k), ""), ",,", ","), ",.", "."), ":,", ":"): Exit Function
        Next k
        s = ""
    Loop Until i >= dl
End Function

exemple d'appel de la fonction

Sub test()
MsgBox lignes(15) 'retourne les lignes du groupe auquel appartient la ligne 15
End Sub

Est-il possible de stocker les numéros correspondant à la ligne 15 (ou autre ligne) dans un tableau?

Merci pour ton aide h2so4, tu m'es d'un grand secours

Function lignes(nl)
    dl1 = Cells(Rows.Count, "G").End(xlUp).Row
    dl2 = Cells(Rows.Count, "H").End(xlUp).Row
    If dl1 > dl2 Then dl = dl1 Else dl = dl2
    i = 13
    s = i & ""
    Do
        Do
            i = i + 1
            If s <> "" Then s = s & "," & i Else s = i & ""
        Loop While Cells(i, "G") = "" And Cells(i, "H") = ""

        t = Split(s, ",")
        s = ":" & s & "."
        For k = LBound(t) To UBound(t)
        If Val(t(k)) = nl Then lignes = Replace(Replace(Replace(Replace(Replace(Replace(s, t(k), ""), ",,", ","), ",.", "."), ":,", ":"), ":", ""), ".", ""): Exit Function
        Next k
        s = ""
    Loop Until i >= dl
End Function

Sub test()
t = Split(lignes(15), ",") 'charge les valeurs dans le tableau t
For i = LBound(t) To UBound(t)
MsgBox t(i)
Next i
End Sub
Rechercher des sujets similaires à "compter nombre ligne vide prochaine"