Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force.
Apprenez, échangez, progressez – et tout ça gratuitement !
👉 Inscrivez-vous maintenant !
Bonjour tout le monde !
Voilà je suis novice dans ce domaine, je voudrai de l'aide 🙂
Voici ma fonction :
Code:
Public Function Longueur(ByRef A As Integer, ByRef B As Integer) As Integer
' Boucle pour déterminer la 1. ligne de données de la colonne "(mm)"
A = 1
Do While Range(Colonne & A).Value <> "Usure (mm)"
A = A + 1
Loop
Close
A = A + 1
B = A
' Boucle pour déterminer la dernière ligne de données de la colonne "(mm)"
Do While Range(Colonne & B).Value <> ""
B = B + 1
Loop
Close
B = B - 1
End Function
Et dans mon sub je l'appelle comme ceci :
Code:
Public Ligne_début As Integer
Public Ligne_fin As Integer
Public Colonne As String
[...]
Colonne = "A"
Call Longueur(Ligne_début, Ligne_fin)
[...]
Voilà dites moi tout ce qui ne va pas, j'aimerai comprendre ce satané langage 🙂
Edit : la macro s'arrête à Call Longueur(Ligne_début, Ligne_fin)
Erreur : Type d'argument byref incompatible
Heu comprend plus rien moi tu as modifié entre temps c'est pas possible ??? Tu avais écris Call Longueur(Ligne_début, Ligne_dernier), et en modifiant Ligne_dernier par Ligne_fin chez moi ça marche. Après avoir testé (tu aurais pu mettre le début de la macro...), je viens pour te répondre et tu as déjà corrigé... Et tu dis que ça ne marche toujours pas... C'est pas clair ton histoire.
En premier lieu une procédure Function est sensée retournée une valeur. Or celle que tu as ecrite ne renvoie rien.
Il faut donc la déclarer comme procedure Sub(Arg1,Arg2)
Quand une variable est passée comme argument byRef, en fait, vba passe une référence à la variable et non une valeur.
Donc A ou B ne contiennent pas de valeur mais une référence à Ligne_Debut et Ligne_Fin. A l'interieur de ta 'fonction' tu modifies Ligne_Debut et Ligne_Fin extérieures à la fonction, en passant par leur référence. C'est un cas que VBA n'aime pas et te le signale. Donc si tu veux modifier des variables Public il ne faut pas les passer en argument par référence et tu pourrais ecrire:
Code:
Public Sub Longueur()
' Boucle pour déterminer la 1. ligne de données de la colonne "(mm)"
Ligne_Debut = 1
Do While Range(Colonne & Ligne_Debut).Value <> "Usure (mm)"
Ligne_Debut= Ligne_Debut + 1
Loop
Close
Ligne_Debut=Ligne_Debut+1
'.....etc
End Sub
Ligne_Debut et Ligne_Fin en serait modifié à l'extérieur de ta procédure.
Si tu ne veux pas modifier les variables public Ligne_Debut et Ligne_fin il
faut les passer en argument par valeur par le mot clef ByVal.
Code:
Public Sub Longueur(ByVal A as Integer, ByVal B as Integer)
'......
A=A+1
'......
End Sub
Ainsi ce ne sont plus des références qui sont passées à la procédure mais des valeurs. La Ligne A=A+1 ne modifie pas Ligne_Debut.
Ceci dit, Pour déterminer la ligne d'une cellule d'une colonne, contenant une certaine valeur tu peux faire
Code:
Dim c As Range
'Chercher "Usure (mm)" dans la colonne A de la feuille
Set c= Range("A:A") .Find(What:="Usure (mm)", LookIn:=xlValues)
If not c is nothing then
Ligne_Debut=c.row
Ligne_Fin=c.row.End(XlDown).row
end if
Cette methode est bien plus rapide qu'une boucle, surtout si la plage contient beaucoup de lignes.
Oula quelle réactivité ! 🙂 J'aurai jamais pensé avoir une réponse si rapide mais aussi si complète 😀.
En fait oui Robert tu as raison j'ai changé entre temps car je me suis aperçu de mon erreur 😛 c'était bien ça.
Hasco, je veux utiliser ta méthode rapide (car j'ai 20.000 lignes à traiter 😀)
Pour trouver la première de la colonne c'est ok, je recherche "Usure (mm)", mais comment puis-je faire pour trouver la fin; c-a-d la première case vide que je rencontre dans cette colonne Usure (mm)?
Dim c As Range
'Chercher "Usure (mm)" dans la colonne A de la feuille et la dernière ligne non vide si "Usure (mm)" est trouvé
Set c= Range("A:A") .Find(What:="Usure (mm)", LookIn:=xlValues)
If not c is nothing then
Ligne_Debut=c.row
[COLOR=red][B]Ligne_Fin=c.row.End(XlDown).row 'Dernière ligne non vide
[/B][/COLOR]end if
- Navigue sans publicité - Accède à Cléa, notre assistante IA experte Excel... et pas que... - Profite de fonctionnalités exclusives Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel. Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.