VBA portée function

  • Initiateur de la discussion Initiateur de la discussion kevin_44
  • Date de début Date de début

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 !

K

kevin_44

Guest
Bonjour,

je ne parviens pas à exécuter une fonction personnalisée, je suis sûr que c'est tout bête mais je débute en VBA...

1/ Je créé une fonction qui liste des positions de caractères dans une chaîne, l'objectif étant de les supprimer s'ils sont doublés. Le but est un peu d'opérer comme une fonction SUPPRESPACE mais en choisissant les caractères que je traite (en l’occurrence, les espaces puis les sauts de ligne)

VB:
Public Function sup_car(txt As String) As String

' Tableau : liste des caractères à traiter
Dim caractere(1)
caractere(0) = chr(32) ' espace
caractere(1) = chr(10) ' saut de ligne


For x = LBound(caractere) To UBound(caractere) Step 1

    ' Position des caractères à supprimer
    ReDim car(Len(txt)) As String

    For a = 1 To Len(txt) Step 1
        If Right(Left(txt, a), 1) = caractere(x) And Right(Left(txt, a - 1), 1) = caractere(x) Then car(a) = a
    Next a

    ' Suppression des caractères aux positions déterminées
    For b = Len(txt) To 1 Step -1
        If car(b) <> "" Then
        txt = Left(txt, b - 1) & Right(txt, Len(txt) - b)
        End If
    Next b

    ' Suppression des espaces de début et fin de chaîne
    If Left(txt, 1) = caractere(x) Then txt = Right(txt, Len(txt) - 1)
    If Right(txt, 1) = caractere(x) Then txt = Left(txt, Len(txt) - 1)

Next x

End Function

2/ J'appelle cette fonction dans un autre module (dans un MsgBox pour le test)

VB:
Sub test()

    MsgBox sup_car("  xx   x x   x   x  x x x  x")

End Sub

Malgré cela, le MsgBox est vide.

Savez-vous me dire où je me trompe ?

En utilisant un point d'arrêt dans ma fonction, je constate que je rentre bien dedans pourtant (voir pièce jointe)...

Merci 🙂
 

Pièces jointes

  • point arret.jpg
    point arret.jpg
    137.5 KB · Affichages: 20
Bonjour Kevin,
Il me semble que dans votre fonction il manque la ligne la plus importante : le retour de valeur.
A la fin d'une fonction, on doit attribuer la valeur calculée à la function.
VB:
sup_car = txt
End Function
Bonjour Laurent.
 
Bonjour le fil

Essaies avec ce petit ajout
VB:
Public Function sup_car(txt As String) As String
' Tableau : liste des caractères à traiter
Dim caractere(1)
caractere(0) = Chr(32) ' espace
caractere(1) = Chr(10) ' saut de ligne
For x = LBound(caractere) To UBound(caractere) Step 1

    ' Position des caractères à supprimer
    ReDim car(Len(txt)) As String

    For a = 1 To Len(txt) Step 1
        If Right(Left(txt, a), 1) = caractere(x) And Right(Left(txt, a - 1), 1) = caractere(x) Then car(a) = a
    Next a

    ' Suppression des caractères aux positions déterminées
    For b = Len(txt) To 1 Step -1
        If car(b) <> "" Then
        txt = Left(txt, b - 1) & Right(txt, Len(txt) - b)
        End If
    Next b

    ' Suppression des espaces de début et fin de chaîne
    If Left(txt, 1) = caractere(x) Then txt = Right(txt, Len(txt) - 1)
    If Right(txt, 1) = caractere(x) Then txt = Left(txt, Len(txt) - 1)

Next x
sup_car = txt
End Function
EDITION: Désolé pour le double télescopage, je n'avais pas rafraîchi la page.
Bonjour sylvanu , bonjour laurent3372
 
Ah quelle nouille je fais 🙂 Merci beaucoup laurent3372 !

Je mets en résolu.

(juste pour ceux qui reliraient ce message, une petite coquille --> c'est avant le "end function" et non le "end sub" qu'il faut ajouter "sup_car = txt")
 
- 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.

Discussions similaires

Réponses
4
Affichages
263
Réponses
2
Affichages
235
Réponses
3
Affichages
408
Réponses
15
Affichages
662
Retour