Se déplaver en colonne dans une recherche

Le
martine.leport
Bonjour,
Je cherche en vba comment trouver la première cellule vide dans une pl=
age de plusieurs colonnes et plusieurs lignes. Par défaut le dépl=
acement d'excel est vers la droite je voudrais qu'il cherche vers le bas

Merci beaucoup pour vos idées
Caroual
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
MichD
Le #26512661
Bonjour,
Dim DerLig As Long
'Nom de l'onglet de la feuille à adapter
With Worksheets("Feuil1")
DerLig = .Range("A:C").Find("*", LookIn:=xlFormulas, _
SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
End With
MichD

Le 2019-03-21 à 05:12, a écrit :
Bonjour,
Je cherche en vba comment trouver la première cellule vide dans une plage de plusieurs colonnes et plusieurs lignes. Par défaut le déplacement d'excel est vers la droite je voudrais qu'il cherche vers le bas
Merci beaucoup pour vos idées
Caroual
MichD
Le #26512660
Le 2019-03-21 à 07:09, MichD a écrit :
Bonjour,
Dim DerLig As Long
'Nom de l'onglet de la feuille à adapter
With Worksheets("Feuil1")
    DerLig = .Range("A:C").Find("*", LookIn:=xlFormulas, _
        SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
End With
MichD

Précision :
La procédure retourne la dernière ligne occupée de la plage A:C.
Si tu veux avoir la première ligne vide, tu dois ajouter 1
With Worksheets("Feuil1")
DerLig = .Range("A:C").Find("*", LookIn:=xlFormulas, _
SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row + 1
End With
MichD
MichD
Le #26512662
J'ai mal lu ta question :
Dans la plage A1:C8, procédure pour trouver la première ligne vide
totalement vide :
'------------------------------
Sub test()
Dim DerLig As Long
With Worksheets("Feuil1")
DerLig = .Range("A1:C9").Find("", LookIn:=xlFormulas, _
SearchOrder:=xlByRows, SearchDirection:=xlNext).Row
End With
If DerLig = 9 Then
MsgBox "Aucune ligne vide dans la plage de A1:C8"
Else
MsgBox "Première ligne totalement vide dans la plage ""A1:C8 = """
& DerLig
End If
End Sub
'------------------------------
Si tu cherches la dernière ligne vide dans la même plage de cellule en
supposant qu'il y en ait plus qu'une, modifie le paramètre dans la
procédure.
SearchDirection:=xlNext
Par
SearchDirection:=xlPrevious
MichD
martine.leport
Le #26512700
Le jeudi 21 mars 2019 12:32:18 UTC+1, MichD a écrit :
J'ai mal lu ta question :
Dans la plage A1:C8, procédure pour trouver la première ligne v ide
totalement vide :
'------------------------------
Sub test()
Dim DerLig As Long
With Worksheets("Feuil1")
DerLig = .Range("A1:C9").Find("", LookIn:=xlFormulas, _
SearchOrder:=xlByRows, SearchDirection:=xlNext).Row
End With
If DerLig = 9 Then
MsgBox "Aucune ligne vide dans la plage de A1:C8"
Else
MsgBox "Première ligne totalement vide dans la plage ""A1:C8 = """
& DerLig
End If
End Sub
'------------------------------
Si tu cherches la dernière ligne vide dans la même plage de cel lule en
supposant qu'il y en ait plus qu'une, modifie le paramètre dans la
procédure.
SearchDirection:=xlNext
Par
SearchDirection:=xlPrevious
MichD

Ma demande n'était pas bien formulée
Dans ma plage A1:C8
je cherche si a1 est vide puis a2 puis a3 a4 a5 a6 a7 a8 b1 b2 etc
je veux trouver 3 cellules vides à suivre
Si j'ai quelque chose en a1 et a3, a2 est seul vide donc ne m'intéress e pas si la première cellule vide est a7 et que a8 et b1 sont vides au ssi alors c'est OK sachant qu'il peut y avoir d'autres cellules remplies en suite.
Je veux une suite de 3 cellules vides en commençant à regarder en a1 puis a2 a3 jusqu'à a8 puis b1 b2 jusqu'à b8 puis c1 c2 jusq u'à c8
Caroual
Jacquouille
Le #26512709
Bonjour,
Va falloir que Denis stimule sa boule de cristal car Excel balaie d'abord la
ligne A1,B1,C1 puis, descend ensuite en A2,B2,C2, puis descend en A3,B3,C3
....
Je me réjouis de voir le résultat. Pure curiosité scientifique (???) -))
Jacques
" Le vin est au repas ce que le parfum est à la femme."
.
a écrit dans le message de groupe de discussion :

Le jeudi 21 mars 2019 12:32:18 UTC+1, MichD a écrit :
J'ai mal lu ta question :
Dans la plage A1:C8, procédure pour trouver la première ligne vide
totalement vide :
'------------------------------
Sub test()
Dim DerLig As Long
With Worksheets("Feuil1")
DerLig = .Range("A1:C9").Find("", LookIn:=xlFormulas, _
SearchOrder:=xlByRows, SearchDirection:=xlNext).Row
End With
If DerLig = 9 Then
MsgBox "Aucune ligne vide dans la plage de A1:C8"
Else
MsgBox "Première ligne totalement vide dans la plage ""A1:C8 = """
& DerLig
End If
End Sub
'------------------------------
Si tu cherches la dernière ligne vide dans la même plage de cellule en
supposant qu'il y en ait plus qu'une, modifie le paramètre dans la
procédure.
SearchDirection:=xlNext
Par
SearchDirection:=xlPrevious
MichD

Ma demande n'était pas bien formulée
Dans ma plage A1:C8
je cherche si a1 est vide puis a2 puis a3 a4 a5 a6 a7 a8 b1 b2 etc
je veux trouver 3 cellules vides à suivre
Si j'ai quelque chose en a1 et a3, a2 est seul vide donc ne m'intéresse pas
si la première cellule vide est a7 et que a8 et b1 sont vides aussi alors
c'est OK sachant qu'il peut y avoir d'autres cellules remplies ensuite.
Je veux une suite de 3 cellules vides en commençant à regarder en a1 puis
a2 a3 jusqu'à a8 puis b1 b2 jusqu'à b8 puis c1 c2 jusqu'à c8
Caroual
MichD
Le #26512723
Bonjour,
Essaie ceci. Cette procédure énumère toutes les plages de cellules qui
ont au moins 3 cellules consécutives vides, colonne par colonne.
'-------------------------------------------------
Sub test()
Dim Rg As Range, Plg As Range, Are As Range, B As Long
Dim A As Long, Nb As Long, R As Range, N As Long
Dim P As Range, S As Long, Message As String
'adapte le nom de l'onglet de la feuille
With Worksheets("Feuil1")
'La plage initiale.
Set Rg = .Range("A1:C8")
End With
For A = 1 To Rg.Columns.Count
Set Plg = Rg.Columns(A).SpecialCells(xlCellTypeBlanks)
Nb = Plg.Areas.Count
If Nb > 0 Then
Set Are = Plg.Areas(1)
End If
If Not R Is Nothing And Are.Cells(1, 1).Row = 1 Then
Set P = Union(Are, R)
Set R = Nothing
Message = Message & P.Address & vbCrLf
N = 1
End If
If N = 0 Then
N = 1
Else
N = N + 1
End If
For B = N To Nb
Set Are = Plg.Areas(B)
If Are.Cells.Count >= 3 Then
Message = Message & Are.Address & vbCrLf
If Not R Is Nothing Then Set R = Nothing
Else
Set R = Are
End If
Next
B = 0: N = 0
Next
If Message <> "" Then
MsgBox "Voici les plages qui ont au moins " & vbCrLf & _
"3 Cellules consécutives vides." & vbCrLf & vbCrLf & Message
Else
MsgBox "Aucune plage n'a 3 cellules consécutives vides."
End If
End Sub
'-------------------------------------------------
MichD
MichD
Le #26512725
Une petite modification mineure. Donne un résultat plus homogène!
La procédure retourne toutes les plages de cellules qui ont au moins 3
cellules consécutives vides et ce, colonne par colonne.
'----------------------------------------
Sub Test()
Dim Rg As Range, Plg As Range, Are As Range, B As Long
Dim A As Long, Nb As Long, R As Range, N As Long
Dim P As Range, S As Long, Message As String
'adapte le nom de l'onglet de la feuille
With Worksheets("Feuil1")
'La plage initiale.
Set Rg = .Range("A1:C8")
End With
For A = 1 To Rg.Columns.Count
Set Plg = Rg.Columns(A).SpecialCells(xlCellTypeBlanks)
Nb = Plg.Areas.Count
If Nb > 0 Then
Set Are = Plg.Areas(1)
End If
If Not R Is Nothing And Are.Cells(1, 1).Row = 1 Then
Set P = Union(R, Are)
Set R = Nothing
Message = Message & P.Address & vbCrLf
N = 1
End If
If N = 0 Then
N = 1
Else
N = N + 1
End If
For B = N To Nb
Set Are = Plg.Areas(B)
If Are.Cells.Count >= 3 Then
Message = Message & Are.Address & vbCrLf
Set R = Are
End If
Next
B = 0: N = 0
Next
If Message <> "" Then
MsgBox "Voici les plages qui ont au moins " & vbCrLf & _
"3 Cellules consécutives vides." & vbCrLf & vbCrLf & Message
Else
MsgBox "Aucune plage n'a 3 cellules consécutives vides."
End If
End Sub
'----------------------------------------
MichD
MichD
Le #26512741
Un fichier exemple : https://www.cjoint.com/c/ICwsNK8XD2j
Prendre le temps de lire le commentaire dans la feuille de calcul.
MichD
MichD
Le #26512743
Le 2019-03-22 à 05:08, Jacquouille a écrit :
Bonjour,
Va falloir que Denis stimule sa boule de cristal car Excel balaie
d'abord la ligne A1,B1,C1 puis, descend ensuite en A2,B2,C2, puis
descend en A3,B3,C3 ....
Je me réjouis de voir le résultat.  Pure curiosité scientifique (???)  -))

Une version pour la vieille version de Jacquoille
https://www.cjoint.com/c/ICwsYih0fZj
Il faut apporter un bémol au commentaire, il est plus ou moins adapté à
cette version d'Excel.
N.B. Excel peut balayer dans le sens que l'on désire pourvu qu'on le lui
demande gentiment!
MichD
MichD
Le #26512751
Le 2019-03-22 à 14:41, MichD a écrit :
Un fichier exemple : https://www.cjoint.com/c/ICwsNK8XD2j
Prendre le temps de lire le commentaire dans la feuille de calcul.
MichD


Encore une toute petite correction, ça demande beaucoup de petits tests
afin de s'assurer de couvrir tous les cas de figures!
https://www.cjoint.com/c/ICxaaG1oQIj
MichD
Publicité
Poster une réponse
Anonyme