IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Appeler une fonction dans une procédure [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2018
    Messages : 116
    Par défaut Appeler une fonction dans une procédure
    Bonjour,

    J'ai une colonne excel dans laquelle j'ai des noms de fichier (D22812100-1 ; D22812100-2 ; D22812100-3.... jusqu'à A12). J'ai crée un programme grâce auquel j'arrive à récupérer la valeur de la cellule pour laquelle je tape mon nom de fichier dans un inpu box (voir code 1). Par exemple, si je tape D22812100-3, un msgbox s'affiche "$A$3". J'ai en plus un autre code avec une fonction like qui me permettrait de ne rentrer que le numéro de mon fichier (code 2) plutôt que d'entrer tous le nom. Comment puis-je faire pour faire communiquer mes 2 codes ensembles ?

    Code 1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    Sub recherche_dans_la_feuille()
        Dim valeur As Variant
        Dim premiere As Variant
        Dim liste As String
        Dim Wsh As Worksheet
        Dim cellule As Range
        valeur = InputBox("Veuillez entrer le numéro de votre Part Number")
        If valeur <> "" Then
            For Each Wsh In ThisWorkbook.Worksheets
            With Sheets(Wsh.Name).Cells
                Set cellule = .Find(valeur, LookIn:=xlValues)
                If Not cellule Is Nothing Then
                    premiere = cellule.Address
                    Do
                        liste = liste & vbCrLf & Wsh.Name & " " & cellule.Address
                        Set cellule = .FindNext(cellule)
                    Loop While Not cellule Is Nothing And cellule.Address <> premiere
                End If
            End With
            Next
        End If
        MsgBox liste
    End Sub
    Code 2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Function Case_True_Like(mot As String) As Boolean
    Select Case True
        Case mot Like "D22812100"
            Case_True_Like = True
        Case Else
            Case_True_Like = False
    End Select
    End Function
    La procédure qui appelle ce code 2 est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub Test()
    InputBox ("Veuillez entrer votre PN")
    MsgBox Case_True_Like("D22812100")
    End Sub

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour,

    de la même façon qu'une fonction native :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If Case_True_Like(mot) Then
        ' action si True
    Else
        ' action si False
    End If
    Mais si avais regardé l'aide (F1) sur Like, tu aurais vu que ta fonction ne met True que si la chaine passée est exactement "D22812100"
    De plus elle peut être réduite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Function Case_True_Like(mot As String) As Boolean
        Case_True_Like = mot Like "D########"
    End Function
    Si ta fonction ne vraiment que ça (True/False), ça ne vaut pas le coup pour une seule ligne. Autant l'écrire directement dans le Sub :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If mot Like "D########" Then
    eric

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2018
    Messages : 116
    Par défaut
    Bonjour,

    J'ai réussi à obtenir ce que je voulais lorsque j'entre un numéro de Part Number dans mon inputbox. Par exemple si je mets D22812100-5, ça me colore les cellules de 1 à 5 en orange et les autres en bleu. ça c'est ok.
    Par contre je n'arrive pas à utiliser ce que vous venez de me montrer :/
    En gros j'aimerai que mon like détecte "D22812100" pour que j'ai juste besoin de rentrer "-5" dans mon inputbox par ex

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    Sub COLOR_CASE()
        Dim DernLigne As Long
        Dim ligne As Integer
        Dim valeur As String
        DernLigne = Range("A1048576").End(xlUp).Row
        valeur = InputBox("Veuillez entrer le numéro de votre Part Number")
        If valeur <> "" Then
            For j = 1 To DernLigne
                If Range("A" & j).Value = valeur Then
                    ligne = j + 1
                    Exit For
                End If
            Next j
        End If
        For i = 1 To ligne
        Range("A" & i).Select
             With Selection.Interior
            .Pattern = xlSolid
            .PatternColorIndex = xlAutomatic
            .Color = 49407
            .TintAndShade = 0
            .PatternTintAndShade = 0
        End With
        Next i
        For i = ligne To DernLigne
            Range("A" & i).Select
            With Selection.Interior
            .Pattern = xlSolid
            .PatternColorIndex = xlAutomatic
            .Color = 12611584
            .TintAndShade = 0
            .PatternTintAndShade = 0
        End With
        Next i
    End Sub

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    j'aimerai que mon like détecte "D22812100"
    As-tu lu ce que je t'ai écris ? Je ne saurais l'expliquer autrement.
    "D22812100" et uniquement ça ? Et bien teste avec =, ce n'est plus un Like.

    Plutôt que de balayer toutes les lignes regarde l'aide sur Range.Find et avoir directement celle qui t'intéresse

    Par ailleurs il faut utiliser la balise code (icône #), sinon c'est difficilement lisible et je n'essaie même pas.
    eric

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Appel d'une fonction dans une fonction d'une même classe
    Par script73 dans le forum Général Python
    Réponses: 3
    Dernier message: 06/03/2015, 10h18
  2. portée d'une variable dans une fonction dans une méthode
    Par laurentg2003 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 29/06/2009, 19h05
  3. Appel d'une fonction dans une fonction (sql server 2005)
    Par catchouse dans le forum Développement
    Réponses: 10
    Dernier message: 06/05/2009, 12h03
  4. Réponses: 1
    Dernier message: 25/10/2007, 18h04
  5. Appeler une fonction dans une fonction
    Par bryanstaubin dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 18/06/2007, 09h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo