Problème avec le retour d'une fonction VB

  • Initiateur de la discussion Initiateur de la discussion i0raek
  • 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 !

i0raek

XLDnaute Occasionnel
Problème avec le retour d'une fonction VB [Résolu]

Bonjour Forum !

voila, j'utilise une fonction dont le code est le suivant :
Code:
Function FctControleHideShow(ShowIf As Range, NextEtiq As String) As String

    For i = shtArchi.Range("I19").Value To shtArchi.Range("I19").Value + shtArchi.Range("D19").Value
        If shtExtraction.Cells(i, TargetCol).Value = ShowIf.Value Then
            FctControleHideShow = "Goto " & NextEtiq
            Exit For
        End If
    Next

MsgBox FctControleHideShow

End Function

Cette fonction est insérer dans une procédure de type Sub et est appellée comme ceci :
Code:
Call FctControleHideShow(shtArchi.Range("F9"), "Etiq_fin")

Lorsque j'exécute la fonction, la msgbox me retourne bien GoTo Etiq_fin au bon moment mais mon problème est que le GoTo ne s'effectue pas... 😡

Si quelqu'un avait une idée sur la manière de procéder...

Merci d'avance pour votre aide !!!
 
Dernière édition:
Re : Problème avec le retour d'une fonction VB

salut i0raek et Bonne Année,

une fonction est sensée renvoyer une valeur qui peut être utilisée pour renseigner une variable, une cellule excel, etc.
Mais là, afficher "Goto Etiq_fin" dans un msgbox ne peut en aucun cas renvoyer à Etiq_fin ! Je suppose que Etiq_fin est une étiquette dans une procédure VBA, c'est bien ça ?
 
Re : Problème avec le retour d'une fonction VB

dans ce cas, il vaudrait mieux procéder comme ceci :
Code:
Sub test()
    MsgBox FctControleHideShow(shtArchi.Range("F9"), "Etiq_fin")
End Sub
Function FctControleHideShow(ShowIf As Range, NextEtiq As String) As String
    For i = shtArchi.Range("I19").Value To shtArchi.Range("I19").Value + shtArchi.Range("D19").Value
        If shtExtraction.Cells(i, TargetCol).Value = ShowIf.Value Then
            FctControleHideShow = "Goto " & NextEtiq
            Exit For
        End If
    Next
End Function
 
Re : Problème avec le retour d'une fonction VB

D'accord !

Toutefois, la fonction ne joue toujours pas son rôle : elle ne va pas rejoindre l'étiquette... 🙁

Est ce que cela provient de la façon de l'appeller ? faut-il rajouter une ligne de code afin de forcer son retour ?
 
Re : Problème avec le retour d'une fonction VB

je ne suis pas très sûr de comprendre ce que tu veux faire !
tu veux sauter à l'étiquette si celle-ci existe dans une liste prédéfinie, c'est ça ?

ne peux-tu pas poster ton fichier ?
 
Re : Problème avec le retour d'une fonction VB

bonjour iOraek

Salut Kobaya

A mon avis l'utilisation de la fonction devrait etre du genre

Code:
Sub test()
    Select Case FctControleHideShow(shtArchi.Range("F9"), "Etiq_fin")
      Case "Goto etiq1"
           Goto etiq1
      Case "Goto etiq2"
           Goto etiq2
      Case else
           Goto ailleurs
      End select
      Exit sub
      etiq1:
      .......
      exit sub
      etiq2:
      .......
      exit sub
      ailleurs 
      .........
 
End Sub

mais tout a fait d'accoerd avec Kobaya un fichier exemple permettrait de mieux resoudre ton probleme
 
Re : Problème avec le retour d'une fonction VB

Euh,

je suis assez embêté... la fonction tourne parfaitement sur mon exemple... alors que j'ai fait un copier coller de code !!! 😱

Je vais du coup regarder de plus près le fichier source...
 
Re : Problème avec le retour d'une fonction VB

Non en fait ça aurait été trop beau... il y avait une erreur dans le code...

Donc voici un fichier d'exemple... qui ne tourne pas !

En fait dans la colonne A, on indique si l'on veut masquer la colonne B. Si toutes les cellules de la plages A2:A4 sont sur "oui" on masque la colonne et si l'une est sur "non" la colonne B reste affichée...

Enfin c'est ce que je souhaiterais obtenir !!! 😀

Le problème c'est que dès que l'on rentre "Oui" la colonne se masque d'ou l'existance de cette petite fonction qui devrait permettre de stopper la procédure en cas de "Oui" dans la plage A2:A4...

Si vous avez une idée...
 

Pièces jointes

Re : Problème avec le retour d'une fonction VB

Code:
Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("A2:A4")) Is Nothing Then
        If Range("A2").Value = "Oui" And Range("A3").Value = "Oui" And Range("A4").Value = "Oui" Then
            Columns("B:B").Hidden = True
        Else
            Columns("B:B").Hidden = False
        End If
    End If
End Sub
🙂
 
Re : Problème avec le retour d'une fonction VB

Re forum
Re Pierrejean & Kobaya !

En fait j'avais omis de vous signaler que le nombre de ligne était amené à varier (de 1 à plus de 200...) a posteriori de l'écriture du code... je ne pensais pas que ça pourrait etre important... désolé 😱

Ainsi je ne peux utiliser une méthode qui dépende du nombre de ligne initial ou d'une boucle pour ne pas rendre le fichier trop lourd...

Mais la méthode de Pierrejean me convient parfaitement !!!

Merci beaucoup pour votre aide précieuse ainsi que pour votre disponibilité !!! 🙂

ps : doit-on indiquer le post comme résolu ou cela se fait automatiquement ou pas du tout ???
 
- 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

Discussions similaires

Réponses
5
Affichages
909
  • Question Question
XL 2021 VBA excel
Réponses
4
Affichages
450
Retour