drikce06
Messages postés2236Date d'inscriptionlundi 29 mai 2006StatutMembreDernière intervention29 mai 2008
-
29 nov. 2006 à 10:47
drikce06
Messages postés2236Date d'inscriptionlundi 29 mai 2006StatutMembreDernière intervention29 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:
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 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
drikce06
Messages postés2236Date d'inscriptionlundi 29 mai 2006StatutMembreDernière intervention29 mai 200810 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:
drikce06
Messages postés2236Date d'inscriptionlundi 29 mai 2006StatutMembreDernière intervention29 mai 200810 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:
drikce06
Messages postés2236Date d'inscriptionlundi 29 mai 2006StatutMembreDernière intervention29 mai 200810 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:
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 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à...
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 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>
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 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 ?
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 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"
<!--