[VBA] Excel première colonne vide

Résolu
Signaler
Messages postés
2237
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
-
Messages postés
2237
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
-
Bonjour, cette question s'adresse particulièrement à mortalino  (auteur de ce snippet et qui m'a oublié  lol!), mais si quelqu'un à part lui peut m'aider, ce sera avec plaisir!

Cette fonction donne la première ligne ou colonne vide dans une feuille excel! Mon problème : ça fonctionne très bien pour trouver la ligne vide, mais pas pour la colonne :

Pour chercher la colonne vide, voici l'appel de fonction que je fais:
PremiereVide(MaCellule, xlByColumns, xlNext)

Merci pour les réponses.

Code de la fonction :

Public Function PremiereVide(CelluleDepart As Range, _
    MonOrdre As XlSearchOrder, MaDirection As XlSearchDirection) As Long
    
     If MonOrdre = xlByRows Then
        PremiereVide = _
        Columns(MaCellule.Column).Find("", MaCellule, , , MonOrdre, MaDirection).Row
    Else
        PremiereVide = _
        Columns(MaCellule.Column).Find("", MaCellule, , , MonOrdre, MaDirection).Column
    End If
    
End Function

Private Sub CommandButton1_Click()

Sheets(1).Select
Set MaCellule = [A1]

'première ligne vide
MsgBox PremiereVide(MaCellule, xlByRows, xlNext)

'première colonne vide
MsgBox PremiereVide(MaCellule, xlByColumns, xlNext)

End Sub

 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:

15 réponses

Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
RE,

Tiens teste ceci
Si tu veux une Ligne il faut faire une recherche par colonne (tordu Excel mais c'est comme) j'ai testé avec l'enregistreur de Macro et si tu recherche dans le sens Par Ligne et bien il va aller a la premiere cellule vide Sur la MEME ligne donc ce qui t'interresse la dedans c'est la colonne de la cellule retourne.... (j'sais pas si je suis clair...)

Public Function PremiereVide(CelluleDepart As Range, _ 
    MonOrdre As XlSearchOrder, MaDirection As XlSearchDirection) As Long 
    If MonOrdre = xlByRows Then 
        PremiereVide = Cells.Find(Empty, CelluleDepart, , , MonOrdre, MaDirection).Column 
    Else 
        PremiereVide = Cells.Find(Empty, CelluleDepart, , , MonOrdre, MaDirection).Row 
    End If 
End Function 

Private Sub CommandButton1_Click() 
Sheets(1).Select 
'Colonne de la premiere cellule vide dans la MEME LIGNE que la cellule sélectionnée
MsgBox "Colonne: " & PremiereVide(ActiveCell, xlByRows, xlNext) 
'Ligne de la premiere cellule vide dans la MEME COLONNE que la cellule sélectionnée
MsgBox "Colonne: " & PremiereVide(ActiveCell, xlByColumns, xlNext) 
End Sub 

Mais je ne sais pas si c'est ce que tu cherches à faire.
@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
2237
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
11
Rectification je ne m'étais pas attardé dessus: mais cela fonctionne, merci de m'avoir relancé 89254 Ju£i?n !

Dim MaCellule As Range


Public Function PremiereVide(CelluleDepart As Range, _
    MonOrdre As XlSearchOrder, MaDirection As XlSearchDirection) As Long
    If MonOrdre = xlByRows Then
        PremiereVide = Cells.Find(Empty, CelluleDepart, , , MonOrdre, MaDirection).Column
    Else
        PremiereVide = Cells.Find(Empty, CelluleDepart, , , MonOrdre, MaDirection).Row
    End If
End Function




Private Sub CommandButton1_Click()
Sheets(1).Select
Set MaCellule = [A1]
'Colonne de la premiere cellule vide dans la MEME LIGNE que la cellule sélectionnée
MsgBox "Colonne: " & PremiereVide(MaCellule, xlByRows, xlNext)
'Ligne de la premiere cellule vide dans la MEME COLONNE que la cellule sélectionnée
MsgBox "Colonne: " & PremiereVide(MaCellule, xlByColumns, xlNext)
End Sub

 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
Salut,
Déjà pour que cela me donne un résultat (juste ou faux) Il y a fallut que je modifie le code comme suit

Public Function PremiereVide(CelluleDepart As Range, _ 
    MonOrdre As XlSearchOrder, MaDirection As XlSearchDirection) As Long 

     If MonOrdre =  xlByRows Then 
        PremiereVide = _ 
        Columns( CelluleDepart .Column).Find("", CelluleDepart, , , MonOrdre, MaDirection).Row 
    Else 
        PremiereVide  = _ 
        Columns(CelluleDepart.Column).Find("", CelluleDepart, , , MonOrdre, MaDirection).Column 
    End If 

End Function 

Private Sub CommandButton1_Click() 
Dim MaCellule As Range 
Sheets(1).Select 
Set MaCellule = [A1] 

'première ligne vide
MsgBox PremiereVide(MaCellule, xlByRows, xlNext) 

'première colonne vide
MsgBox PremiereVide(MaCellule, xlByColumns, xlNext) 

End Sub 

Ensuite Est ce que tu cherches une colonne ou une ligne Entièrement vide ?

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
2237
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
11
Salut jrivet je vais tester ton code, sinon je cherche la premiere cellule vide d'une colonne par rapport à une ligne!

 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
Messages postés
2237
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
11
Pour tester j'ai mis la même valeur dans les cellule de A1 à L22

'première ligne vide
MsgBox PremiereVide(MaCellule, xlByRows, xlNext) 
Résultat = 23 c'est bon pour la ligne

'première colonne vide
MsgBox PremiereVide(MaCellule, xlByColumns, xlNext) 

Résultat = 1 c'est pas bon pour la colonne

J'ai essayé de modifier les paramètres avec xlPrevious etc, mais pas moyen ça fonctionne pas! Je suis perdu! Je comprends pas pourquoi avec la ligne c'est bon et pas avec la colonne!

 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
Messages postés
2237
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
11
Merci jrivet ça fonctionne! Mais, il y a toujours un mais, ça m'embête un peu de devoir activer une cellule avant! Mais au moins ça marche, si quelqu'un trouve sans devoir sélectionner une cellule!

 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
Salut,
Il y auras peu etre des erreurs.
En revanche j'ai remarqué un truc bizarre (c'est Excel tu me diras...) Parfois Excel meme avec Ctrl + F ne trouve pas la cellule => d'ailleurs lorsque Excel ne trouve pas , ma macro plante....

Si Excel trouve, (apres avoir redémarrer Excel=> alors la macro aussi...)
Bizarre je ne sais pas de quoi cela peu venir...
Si un Expert Excel passe par là...

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
Salut,
Remplace ActiveCell par ce que tu veux

Dim MaCellule As Range 
Set MaCellule = [A1]

Ou Bien auter chose./..

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
2237
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
11
j'ai essayé et j'ai eu une erreur!

 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
Tu devrais être habitué au forum....
.. j'ai une erreur.... oui mais Laquelle.

Essaie de passer par Ctrl + F lorsque tu as cette erreur , et si c'est la meme que celle décrit dans mon post précédent ...

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Salut les gars, et oui, je suis mauvais...

Désolé Drikce, je confirme, j'ai complêtement zappé et je m'en excuse. Mais je vois que Julien t'a bien aidé (et merci Julien).
Je referai le snippet, il est effectivement erroné à la base.

C'est pas faux !

@++

<hr width="100%" size="2" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
/DIV>
Messages postés
2237
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
11
Ha Ok! Tu me rassures mortalino!

 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
19
N'y aurait-il pas inversement de Column et de Row ???

Public Function PremiereVide(CelluleDepart As Range, _
    MonOrdre As XlSearchOrder, MaDirection As XlSearchDirection) As Long
    If MonOrdre = xlByRows Then
        PremiereVide = Cells.Find(Empty, CelluleDepart, , , MonOrdre, MaDirection).Column
    Else
        PremiereVide = Cells.Find(Empty, CelluleDepart, , , MonOrdre, MaDirection).Row
    End If
End Function

Si MonOrdre est xlByRows, c'est donc qu'on cherche une ligne et non une colonne... et inversement... non ?

MPi
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Salut Mpi, comme précisé plus haut, je me suis loupé sur ce snippet, je le remettrai à jour dans qques instants, là je finie une class. Je vous préviendrai en vous mettant une copie.

@++


  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
Messages postés
2237
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
11
Tiens 647037 mortalino tu voir pour passer par cela aussi pour le snippet:

Worksheets("Feuil1").Activate
ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Activate
DerniereLigne = Selection.SpecialCells(xlCellTypeLastCell).Row
DermierColonne = Selection.SpecialCells(xlCellTypeLastCell).Column

 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas: