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 :

[VBA-E] Test sur un integer


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 6
    Par défaut [VBA-E] Test sur un integer
    Bonjour,

    je débute en VB, et je dois créer des macros sous excel.
    J'ai bien créé ma fonction, mais j'aimerai réaliser un test (tout bête?) sur une valeur passée en paramètre à ma fonction.
    Cette valeur est un entier. Je voudrais simplement retourné une erreur si cette valeur n'est pas initialisée (null, ou vide).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if mavariable = "" Then
    MsgBox("Erreur...")
    End If
    Mais ceci ne fonctionne pas j'ai même essayé un empty même résultat... Or lorsque je teste avec une variable donnée là je passe bien dans ma condition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    'mavariable=5
    if mavariable = "5" Then
    MsgBox("Erreur...")
    End If
    En résumé que dois je mettre après le signe égal lorsque la variable n'est pas initialisée???

    Merci pour vos réponses.

  2. #2
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    il faudrai surtout que tu nous montre comment tu déclare ta variable... si c'est vraiment un entier... ben par défaut en VB elle est initialisée à 0 ..!

  3. #3
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 6
    Par défaut
    En fait j'aimerai vérifié que les différents champs concernant ma fonction sont bien rempli et que l'utilisateur n'en a pas oublié .

    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
     
    'Cette fonction renvoit la moyenne du nombre de PC de l'UDP concernée
    'sur la période donnée.
     
    Function Moyenne_PC(Udp As String, Semaine_deb As Integer, Annee_deb As Integer, Semaine_fin As Integer, Annee_fin As Integer) As Single
     
    'Contrôle du paramètre UDP au niveau d'excel
    If Trim(Udp) = "" Then
        Moyenne_PC = -1
        MsgBox ("Udp manquante")
        Exit Function
    ElseIf Semaine_deb = "" Then
         Moyenne_PC = -2
         MsgBox("Semaine_deb manquante")
         Exit Function
    End If
    Voilà, lorsque je teste le premier parametre (Udp as String) aucun problème si celui-là n'est pas renseigné il me retourne bien ma valeur -1.
    Maintenant lorsque je fait ce test sur le 2nd paramètre (Semaine_deb as Integer) il me "banane".

    Merci pour votre aide.

  4. #4
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    ben pour éviter qu'il te banane .. compare un entier avec un entier..!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ElseIf Semaine_deb = 0 ...

  5. #5
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    Pour savoir si une variable a été initialisée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim mavariable
    If IsEmpty(mavariable) Then
      MsgBox "Non initialisée"
    End If
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  6. #6
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 6
    Par défaut
    Merci pour vos réponses rapide. Néanmoins si je mets 0, et que l'utilisateur ne met rien comme valeur (pas même 0), la condition n'est pas remplie.
    Ex:
    Moyenne_PC("MBAA";;2005;3;2006) -> ici semaine_deb n'est pas déclarée

    Lorsque tu remplis les différentes valeurs de ta fonction sous excel, si l'utilisateur n'inscrit rien pour le paramètre Semaine_deb (par exemple) cela ne marche pas.

    J'ai également essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If IsEmpty(mavariable) Then ...
    Fonctionne pas non plus!

    Avez-vous d'autres idées?

    Merci pour vos réponses

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 38
    Par défaut
    Bonsoir,

    Pourquoi n'utilises-tu pas une userform avec tous les champs dont tu as besoin en faisant des tests sur tout les champs avant d'utiliser ta fonction (cela obligera tes utilisateurs à mettre les données dont tu as besoin) ?

    fast

  8. #8
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Envoie un string nul à ta fonction et convertis en integer dans la fonction.
    Convertis en string avant et en integer après
    A tout hasard

  9. #9
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Par défaut
    bonsoir

    Voilà, lorsque je teste le premier parametre (Udp as String) aucun problème si celui-là n'est pas renseigné il me retourne bien ma valeur -1.
    Qu'as tu testé?

    =Moyenne_PC("";2;2005;3;2006)

    ou

    =Moyenne_PC(;2;2005;3;2006)

    Dans le premier cas, il y a une chaine vide mais pas de chaine manquante.

    Le deuxième exemple renvoie une erreur #VALEUR! si l'argument String (Udp) n'est pas renseigné.



    Lorsque tu remplis les différentes valeurs de ta fonction sous excel, si l'utilisateur n'inscrit rien pour le paramètre Semaine_deb (par exemple) cela ne marche pas.

    La fonction n'est pas déclenchée s'il manque un argument. Tu pourras mettre toutes les lignes que tu veux dans ta procédure, cela ne changera rien...


    Pour que la fonction puisse eventuellement être déclenchée dans ce cas de figure, tu pourrais passer les arguments en Optional mais ce n'est pas vraiment prévu à cet effet (au contraire):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Function MaFonction(Optional x As Integer) As Integer
        If x = 0 Then
            MaFonction = -1
            Exit Function
        End If
     
        MaFonction = x * 5
    End Function

    Ensuite tu peux tester ces formules



    bonne soirée
    michel

  10. #10
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 6
    Par défaut
    Bonjour,

    Merci à vous pour vos réponses, effectivement je me suis rendu compte lorsque pour le premier paramètre (qui est un string) j'envoie une chaine vide et c'est pour cela que j'avais bien mon code de retour. En revanche si la valeur de la chaine est manquante j'ai effectivement #VALEUR! et la fonction qui ne se lance pas . Merci à SilkyRoad pour ses précisions.
    J'ai passé certains arguments en Optional pour "résoudre" ce problème. Je verrai par la suite si je peux trouver plus judicieux.

    Merci encore à vous.

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

Discussions similaires

  1. [JSTL] c:when test sur un integer KO
    Par jayjaypg22 dans le forum Taglibs
    Réponses: 2
    Dernier message: 22/10/2010, 10h01
  2. [VBA-E] Test sur le contenu de cellule
    Par mwa33 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 26/04/2007, 08h59
  3. [vba-access] Test sur valeur des champs puis publipostage
    Par realthunderbolt dans le forum Access
    Réponses: 1
    Dernier message: 01/08/2006, 16h38
  4. [VBA-E] test sur une chaine de charactère
    Par gruget dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 10/04/2006, 14h24
  5. [VBA-E]test sur le contenu de toute une ligne
    Par repié dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 23/02/2006, 16h00

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