Compter nombre de cellules non vides entre deux vides
Bonjour à tous,
Je rencontre un problème pour automatiser une procédure dans un fichier excel ayant beaucoup de lignes.
Ce que je souhaite faire est de compter les cellules pleines entre deux cellules vides.
Ex :
[cellule vide]
valeur 1
valeur2
valeur 3
[cellule vide]
valeur 4
valeur 5
[cellule vide]
valeur 6
valeur 7
valeur 8
valeur 9
[cellule vide]
Ma colonne se présente comme ci-dessus, et j'aimerais en VBA pouvoir créer une fonction qui me renvoie, soit dans les cases vides ou soit dans une colonne à côté, le nombre de lignes entre deux cellules vides pour chaque série de valeurs.
Dans l'exemple ci-dessus, je souhaite obtenir donc comme résultat : 3, 2, 4 (correspondant respectivement aux nombres de valeurs ou lignes entre les cellules vides)
Est-ce que quelqu'un a une idée de comment automatiser l'opération? J'ai mis en PJ, un fichier pour illustrer le problème.
J'ai peur que cela soit difficile à faire par une fonction VBA car le résultat retourné doit être différent à chaque fois (renvoi matriciel?).
Merci à tous pour votre aide.
Hubert41
Je ne sais pas si le post est toujours d'actualité puisqu'il date un peu.
si oui, tu peux essayer ça:
Sub comptvide()
Dim NB As Integer
NB = 0
For i = 3 To 29
If Cells(i, 2) <> "" Then
NB = NB + 1
Else
Cells(i, 3).Value = NB
NB = 0
End If
Next i
End Sub
En remplaçant 29 par le numéro de la dernière ligne que tu souhaite traiter.
Mais ca veut dire que soit tu dois changer la valeur a chaque fois que la dernière ligne change, soit tu met un nombre très élevé mais tu va avoir plein de 0 dans les cases inutilisées, et la procédure mettra plus de temps.
l'autre solution que je trouve mieux c'est d'arrêter la macro si deux cellules adjacentes sont vides.
Cela implique qu'il n'y ait qu'une seule cellule vide entre chaque liste de valeur.
Et dans ce cas le code serait:
Sub comptvide()
Dim NB As Integer
NB = 0
For i = 3 To 65536
If Cells(i, 2) <> "" Then
NB = NB + 1
Else
If Cells(i + 1, 2) <> "" Then
Cells(i, 3).Value = NB
NB = 0
Else
Cells(i, 3).Value = NB
NB = 0
Exit Sub
End If
End If
Next i
End Sub
Dans la version 2010 de Excel, on peut changer 65536 par 1048576
Bonjour tulipe_3 et 11235813,
Merci à vous deux pour vos réponses, vos deux méthodes sont très efficaces et c'est exactement ce que je recherchais.
Bonne journée
Hubert41
Bonjour,
Je déterre ce post un peu ancien, au cas où quelqu'un traînerait par là aujourd'hui...
Je cherche en fait à faire exactement le contraire d'Hubert, c'est-à-dire compter le nombre de cellules nulles entre deux valeurs non nulles.
J'ai essayé le code suivant, mais sans succès : toute ma colonne C se remplit de 0...
Sub comptnonvide()
Dim NB As Long
NB = 0
For i = 1 To 35192
If Cells(i, 2) = "" Then
NB = NB + 1
Else
Cells(i, 3).Value = NB
NB = 0
End If
Next i
End Sub
EDIT : En fin de compte je viens de réaliser que les pas de temps des dates rentrés dans ma première colonne ne sont pas réguliers, donc ça devient beaucoup plus compliqué... En effet, l'objectif est de calculer les "durées" durant lesquelles les valeurs de la colonne 2 sont nulles, il ne suffit plus de compter le nombre de cellule et de multiplier par une constante.
Si quelqu'un a une idée, je suis preneur...
Merci beaucoup à vous en tous cas, je vais quand même continuer à chercher !