[VBA] Excel première colonne vide

Résolu
drikce06 Messages postés 2237 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 - 29 nov. 2006 à 10:47
drikce06 Messages postés 2237 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 - 30 nov. 2006 à 11:07
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

jrivet Messages postés 7393 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
29 nov. 2006 à 11:46
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
3
drikce06 Messages postés 2237 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 11
29 nov. 2006 à 14:44
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:
3
jrivet Messages postés 7393 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
29 nov. 2006 à 11:10
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
0
drikce06 Messages postés 2237 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 11
29 nov. 2006 à 11:14
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:
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
drikce06 Messages postés 2237 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 11
29 nov. 2006 à 11:19
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:
0
drikce06 Messages postés 2237 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 11
29 nov. 2006 à 11:54
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:
0
jrivet Messages postés 7393 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
29 nov. 2006 à 11:59
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
0
jrivet Messages postés 7393 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
29 nov. 2006 à 12:02
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
0
drikce06 Messages postés 2237 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 11
29 nov. 2006 à 12:03
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:
0
jrivet Messages postés 7393 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
29 nov. 2006 à 14:01
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
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 17
29 nov. 2006 à 17:32
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>
0
drikce06 Messages postés 2237 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 11
29 nov. 2006 à 17:39
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:
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 21
29 nov. 2006 à 23:26
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
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 17
29 nov. 2006 à 23:32
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"
<!--
0
drikce06 Messages postés 2237 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 11
30 nov. 2006 à 11:07
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:
0
Rejoignez-nous