Fonction : recherche de cellule vide sur plage

  • Initiateur de la discussion CactusX
  • Date de début
C

CactusX

Guest
Bonjour le Forum,

Cette fonction permet d'identifier la première cellule vide à partir d'une plage indiquée et de retourner le résultat dans une autre cellule. Ca fonctionne, cependant il doit y avoir + simple pour le code.

Certainement une histoire de déclaration de variable.
Quelqu'un a t-il autre chose à proposer sous XL97 ?

Merci à vous.


Sub MEdercel(colonne As String, debut As Byte, fin As Byte, Rxy As String)

' Appelé par :
' Call MEdercel("A", 10, 100, "B1")
' soit : Colonne de recherche, Ligne de début de recherche, Ligne de fin de recherche, cellule pour le retour

Dim z As String
For x = debut To fin
z = colonne & Trim(Str(x))
If Range(z) <> "" Then
x = x + 1
Range(colonne & x).Select
If Range(colonne & x) = "" Then
Range(Rxy) = ActiveCell.Row
Exit Sub
End If
End If
Next
End Sub
 
@

@+Thierry

Guest
SAlut Cactus, le Forum

Oui il y a plus simple, ici par exemple on retourne la Liste des Cellules Vide dans une MsgBox :

Sub Blank()
Dim Cell As Range
Dim Msg As String
For Each Cell In Range("A1:A100")
If Cell = "" Then Msg = Msg & Cell.Address & vbCrLf
Next Cell
MsgBox "Les Celulles Suivante sont Vides : " & vbCrLf & Msg
End Sub


Et là on retourne la quantité de cellules vides entre la dernière cellule contenant des données dans la plage et le départ de celle-ci..... :

Sub SpecialBlank()
Dim ValVide As Integer
On Error GoTo Fin
ValVide = Range("A10:A100").SpecialCells(xlCellTypeBlanks).Count
MsgBox "Il y a " & ValVide & " cellules vides"
Exit Sub
Fin:
MsgBox "Il n'y a aucune donnée dans la plage"
End Sub

Et pour sélectionner la première cellule vide dans la plage avec un message :

Sub FirstBlank()
Dim Cell As Range
Dim Msg As String

For Each Cell In Range("A10:A100")
If Cell = "" Then
MsgBox "Première Cellule Vide " & Cell.Address
Cell.Activate
Exit For
End If
Next Cell
End Sub

Je crois que c'est cette dernière macro que tu cherches...
On pourait faire écrire l'adresse de la cellule en "B1" par exemple au lieu de faire un message comme ceci :

Sub FirstBlank()
Dim Cell As Range
Dim Msg As String

For Each Cell In Range("A10:A100")
If Cell = "" Then
Range("B1") = Cell.Address
Cell.Activate
Exit For
End If
Next Cell
End Sub

Et pour avoir exactement la même chose que dans ta macro de base ce serait ceci :
Sub FirstBlank()
Dim Cell As Range
Dim Msg As String
For Each Cell In Range("A10:A100")
If Cell = "" Then
Range("B1") = Cell.Row
Cell.Activate
Exit For
End If
Next Cell
End Sub

Donc tu as de quoi faire en ce bon long Week End CactusX

@+Thierry
 
C

CactusX

Guest
Bonsoir Thierry, le Forum,

Que de choix dans cette réponse. Merci.

Celle que j'attendais était bien la dernière. Ce qui donne maintenant :

Function MEdercel(Plage, Retour As String)
'Call MEdercel("A10:A100","B1")
'Plage de recherche, cellule pour le retour

Dim Cell As Range
Dim Msg As String

For Each Cell In Range(Plage)
If Cell = "" Then
Range(Retour) = Cell.Row
Cell.Activate
Exit For
End If
Next Cell
End Function


Fonctionnement Ok dans mon application mais lorsque je saisis cette formule dans la barre des formules, elle est reconnue mais ne donne rien en B1.

Que ce soit avec : =medercel("A19:A100";"B1")
ou avec : =medercel(A19:A100;B1) => dans cette version les cellules de la col. A s'affichent.

Que manque t-il ?

Encore Merci.
 

Statistiques des forums

Discussions
312 775
Messages
2 092 023
Membres
105 152
dernier inscrit
pago