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 :

Condition à humeur variable [XL-2013]


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
    Inscrit en
    Août 2012
    Messages
    187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2012
    Messages : 187
    Par défaut Condition à humeur variable
    Bonjour,

    Je ne comprends pas le comportement de ma variable Result.
    Lorsque je sors de ma fonction, sa valeur est True et lorsqu'elle arrive dans la sub qui l'appelle, sa valeur est False.
    Voici le code :

    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
     
    Public Function TestNum(strTest As String)
    Dim Result As Boolean, i As Integer
     
        Result = True
     
        For i = 1 To 4
    Debug.Print Mid(strTest, i, 1)
    Debug.Print "Result avant " & Result
            Result = IsNumeric(Mid(strTest, i, 1))
    Debug.Print "Result après " & Result
    If Result = False Then Exit For
        Next
     
    End Function
    Qu'est ce que j'aurais dû faire et que je n'ai pas fait ?

    Merci d'avance

    Henri

  2. #2
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    ta variable étant déclarée au sein de la fonction, sa portée ne va pas au delà. A la fin de la fonction, ta variable est détruite !

    puisque tu cherches à vérifier le comportement de ta fonction, autant en renvoyer directement l'état comme ça :

    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
    Public Function TestNum(strTest As String) As Boolean
    Dim i As Integer
        For i = 1 To 4
            If Not IsNumeric(Mid(strTest, i, 1)) Then
                TestNum = False
                Exit Function
            End If
        Next i
     
        TestNum = True
    End Function
     
    Sub Toto()
    Dim MaChaine As String
     
    MaChaine = "1a34"
    If TestNum(MaChaine) Then MsgBox "il n'y a que des chiffres"
     
    End Sub
    Je passe outre l'utilité de cette fonction, on peut s'en passer je pense et faire un test simple dans la procédure appelante

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour Henri1830 et Joe,
    Je suis d'accord avec Joe sur la porté de la variable, la ou je ne suis pas forcément d'accord avec lui c'est sur l'utilité de cette fonction!

    En effet ici il ne s'agit que d'un exemple sens doute sorti du contexte.
    Il est préférable de faire une fonction si le test est redondant dans le code plutôt que de le réécrire plus fois!
    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
    Public Function TestNum(strTest As String) As Boolean
    Dim i As Integer
        For i = 1 To len(strTest)
    TestNum=IsNumeric(Mid(strTest, i, 1)) 
            If TestNum =false Then Exit Function 'Écrits ta condition comme ça ça veut un commentaire!
        Next i
    End Function
     
    Sub Toto()
    Dim MaChaine As String
     
    MaChaine = "1a34"
    If TestNum(MaChaine) Then MsgBox "il n'y a que des chiffres"
     
    End Sub
    Dernière modification par Invité ; 05/03/2016 à 15h25.

  4. #4
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    En fait, quelle est la différence entre tester chaque caractère pour voir si la chaine ne contient que des chiffres ... et tester directement si la chaine complète est numérique ?

    si sa fonction renvoyait la position des "non chiffres" (ou la position des chiffres), j'aurai pensé à un traitement particulier qui nécessitât cette fonction, mais là ce n'est pas le cas ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub Toto()
    Dim MaChaine As String
     
    MaChaine = "1a34"
    If Not IsNumeric(MaChaine) Then MsgBox "il n'y a pas que des chiffres"
     
    End Sub
    C'est idem que l'utilisation de sa fonction là ? Ou j'ai loupé un truc ?

    Le seul impératif que je peux voir, c'est s'il veut utiliser cette fonction dans Excel ... et là encore on peut parfaitement s'en passer (même si ça surcharge l'écriture de la formule dans Excel)

    Par exemple ...

    Test simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SIERREUR(D6*1;"Pas Que des chiffres")
    Test complet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(ESTERREUR(D6*1);"Pas que des chiffres";"Que des chiffres")

  5. #5
    Invité
    Invité(e)
    Par défaut
    Oui tu marque un point, je n'ai raisonné que sur le contenu et pas sur la généralité!

    Histoire que je ne perde pas complètement la face, on dira qu'il voulait s'essayer au fonctions!
    Dernière modification par Invité ; 05/03/2016 à 15h48.

  6. #6
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2012
    Messages : 187
    Par défaut
    Bonsoir à tous les deux,

    Mille mercis pour vos conseils, ça fonctionne très bien.
    Demain matin, je m'occuperai de l'ouverture du fichier.

    Merci encore pour vos aides.

    Henri

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

Discussions similaires

  1. conditions sur variables
    Par akpala dans le forum Débutez
    Réponses: 2
    Dernier message: 16/08/2010, 12h50
  2. Condition avec variable comprise dans un interval
    Par lumycaan dans le forum Langage
    Réponses: 2
    Dernier message: 26/11/2009, 22h36
  3. Tracer une fonction avec conditions sur variable
    Par Leonpolou dans le forum MATLAB
    Réponses: 16
    Dernier message: 23/10/2009, 17h53
  4. Condition if variable in table
    Par fardon57 dans le forum PL/SQL
    Réponses: 8
    Dernier message: 02/03/2009, 15h41
  5. [VBA-E] Find + condition + attribution variable
    Par Helios07 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 23/03/2007, 15h33

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