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 :

InputBox et Conditions [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre éprouvé
    Avatar de eric4459
    Homme Profil pro
    Ingénieur Gestion de Projets
    Inscrit en
    Avril 2014
    Messages
    605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Gestion de Projets
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 605
    Points : 1 124
    Points
    1 124
    Par défaut InputBox et Conditions
    Bonjour à tous,
    J'utilise une InputBox dans une macro afin de saisir une date.
    Si une date est renseignée,je poursuis ma macro, si elle n'est pas renseignée mais que le bouton Ok est cliqué j'envoi un message via une MsgBox.
    Enfin si on clique le bouton Cancel on sort de la macro.
    Voici le code réalisé :

    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
    Sub Data_Date() 
     
    Dim x As Variant
     
        x = InputBox("Enter Data Date" & Chr(10) & " " & Chr(10) & "Use format dd/mm/yy", "NEW_DATA_DATE", "", vbOKCancel)
            If x <> "" Then
            Baseline_Date
            Else
                If vbOK And x = "" Then
                MsgBox "Enter a valid date", , "WARNING"
                ElseIf vbCancel And x = 0 Then
                Exit Sub
                End If
            End If
    End Sub
    Mon problème vient du fait que lorsque je clique sur Cancel, ma msgBox apparaît tout de même, ce qui est normal car x=0 (espion) mais ma condition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ElseIf vbCancel And x = 0 Then
    ne semble pas être reconnue.

    Comment puis résoudre ce problème ?
    Merci pour vos conseils
    Eric
    "Vous n’avez cessé d’essayer ? Vous n’avez cessé d’échouer ? Aucune importance !
    Réessayez, échouez encore, échouez mieux." Samuel Beckett
    Pensez aux balises et
    Visitez les FAQ Excel et allez faire un tour ici
    Tutoriels de SilkyRoad

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    quel vbCancel ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    x = InputBox("Enter Data Date" & Chr(10) & " " & Chr(10) & "Use format dd/mm/yy", "NEW_DATA_DATE", 100, 100, 100)

  3. #3
    Membre éprouvé
    Avatar de eric4459
    Homme Profil pro
    Ingénieur Gestion de Projets
    Inscrit en
    Avril 2014
    Messages
    605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Gestion de Projets
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 605
    Points : 1 124
    Points
    1 124
    Par défaut
    Bonjour rdurupt,
    Selon moi ligne 5 où je défini ma MsgBox avec ("mon message","titre de ma fenêtre", "valeur par défaut", type de bouton)
    mais je me suis peut-etre trompé là-dessus?

    Eric
    "Vous n’avez cessé d’essayer ? Vous n’avez cessé d’échouer ? Aucune importance !
    Réessayez, échouez encore, échouez mieux." Samuel Beckett
    Pensez aux balises et
    Visitez les FAQ Excel et allez faire un tour ici
    Tutoriels de SilkyRoad

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 302
    Points : 185
    Points
    185
    Par défaut
    Salut,

    Je ne vois pas quand x peut être égale à Zéro.
    essaie sans!!

  5. #5
    Membre éprouvé
    Avatar de eric4459
    Homme Profil pro
    Ingénieur Gestion de Projets
    Inscrit en
    Avril 2014
    Messages
    605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Gestion de Projets
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 605
    Points : 1 124
    Points
    1 124
    Par défaut
    Bonjour Robinson76,
    Effectivement cette condition n'est pas correcte mais après avoir corrigé pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ElseIf vbCancel And x = "" Then
    le problème reste le même : l'appui sur le bouton Cancel provoque l'apparition du message "Enter a valid date" .
    Eric
    "Vous n’avez cessé d’essayer ? Vous n’avez cessé d’échouer ? Aucune importance !
    Réessayez, échouez encore, échouez mieux." Samuel Beckett
    Pensez aux balises et
    Visitez les FAQ Excel et allez faire un tour ici
    Tutoriels de SilkyRoad

  6. #6
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Citation Envoyé par eric4459 Voir le message
    Bonjour à tous,
    x = InputBox("Enter Data Date" & Chr(10) & " " & Chr(10) & "Use format dd/mm/yy", "NEW_DATA_DATE", "", vbOKCancel)
    Baseline_Date
    MsgBox "Enter a valid date", , "WARNING"
    Eric
    Être en France et s'effoirer devant l'anglais. Joualvert!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  7. #7
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Bonjour Clément.


    Être en France et s'effoirer devant l'anglais. Joualvert!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    Quand on est souverain, on peut tout se permettre.
    Cordialement

    Docmarti.

  8. #8
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 773
    Points : 28 637
    Points
    28 637
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Avec la fonction InputBox, il est impossible de distinguer si l'on a cliqué sur le bouton Annul, qui renvoie une chaîne de caractère vide (""), ou si l'on a cliqué sur le bouton OK alors que l'on a rien inséré comme donnée.
    En effet dans la procédure qui suit rien ne permet de distinguer les deux cas évoqués plus haut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     Dim myVar As Variant
     myVar = InputBox("Entrez une donnée")
     MsgBox ">" & myVar & "<" & Len(myVar)
    Toutefois, une astuce consisterait à utiliser la fonction StrPtr.
    Cette fonction dont voici l'explication de Microsoft à l'adresse http://support.microsoft.com/kb/199824/fr
    Dans Visual Basic, les chaînes sont stockées en tant que BSTR. Si vous utilisez la fonction VarPtr sur une variable de type String (chaîne), vous obtiendrez l'adresse du BSTR, qui est un pointeur vers un pointeur de la chaîne. Pour obtenir l'adresse du tampon de chaîne lui-même, vous devez utiliser la fonction StrPtr. Cette fonction renvoie l'adresse du premier caractère de la chaîne. Tenez compte du fait que les chaînes sont stockées en tant que chaînes UNICODE dans Visual Basic.
    permet en effet de distinguer la différence entre OK avec chaîne vide, OK avec chaîne remplie et Annul.
    En reprenant le code utilisé plus haut et en modifiant la ligne 3 par celle ci-dessous,
    On peut constater que si l'on a cliqué sur Annul la fonction renvoie 0 dans tout les cas alors que OK renvoie un nombre que la chaîne renvoyée par InputBox soit vide ou pas.
    Donc partant de ce constat, on pourrait utiliser cette procédure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub TestInputBox()
     Dim myVar As Variant
     myVar = InputBox("Entrez votre données", "Introduction des données")
     If StrPtr(myVar) = 0 Then
         MsgBox "Annulation de l'opération"
      Else
       If myVar = "" Then
         MsgBox "Vous n'avez rien saisi"
        Else
         MsgBox "Vous avez saisi " & myVar
       End If
     End If
    End Sub
    Attention, je n'ai effectué de test que sur la version 2010
    A lire Unofficial Documentation for VarPtr, StrPtr, and ObjPtr
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  9. #9
    Invité
    Invité(e)
    Par défaut
    bonjour,
    si tu dessines ton propre InputBox tu fais ce que tu veux!
    Code MyInputBox : 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
    Public Function txt(Titre As String, Etiquette, Optional Default)
    Me.Caption = Titre
    Me.Label1 = Etiquette
    Me.TextBox1 = Default
    Me.Show vbModal
    On Error Resume Next
    txt = Me.Tag
    If Err <> 0 Then txt = False
    Err.Clear
    On Error GoTo 0
    End Function
     
    Private Sub CommandButton1_Click()
    Me.Tag = Me.TextBox1
    Me.Hide
    End Sub
     
    Private Sub CommandButton2_Click()
    Me.Tag = False
    Me.Hide
    End Sub
    Code Module1 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub test()
    Dim txt
    txt = MyInputBox.txt("Test", "Entrez la valeur du text", 100)
    MsgBox txt
    End Sub
    Fichiers attachés Fichiers attachés

  10. #10
    Membre éprouvé
    Avatar de eric4459
    Homme Profil pro
    Ingénieur Gestion de Projets
    Inscrit en
    Avril 2014
    Messages
    605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Gestion de Projets
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 605
    Points : 1 124
    Points
    1 124
    Par défaut
    Philippe, Robert
    Merci pour ces deux approches, celle de Philippe est un peu plus absconse,(mêlant pour clementmarcotte), celle de Robert me plait beaucoup car c'est une bonne façon de contourner le problème et a le mérite de démontrer que tout, ou presque, est possible avec un peu de connaissance.
    Eric
    "Vous n’avez cessé d’essayer ? Vous n’avez cessé d’échouer ? Aucune importance !
    Réessayez, échouez encore, échouez mieux." Samuel Beckett
    Pensez aux balises et
    Visitez les FAQ Excel et allez faire un tour ici
    Tutoriels de SilkyRoad

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

Discussions similaires

  1. [XL-2007] InputBox et 2 conditions pour une valeur entrée
    Par Nonno 94 dans le forum Macros et VBA Excel
    Réponses: 21
    Dernier message: 12/12/2013, 16h47
  2. pb facile à resoudre: Macro "INPUTBOX" avec condition "COUNTIF=0"
    Par Olivm dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/04/2011, 11h59
  3. inputbox a double condition
    Par waspy59 dans le forum C#
    Réponses: 11
    Dernier message: 10/03/2011, 21h11
  4. InputBox et condition Date
    Par patrick55 dans le forum Excel
    Réponses: 4
    Dernier message: 18/01/2008, 11h28
  5. boucle avec condition d'arret changeante
    Par NicoH dans le forum Langage
    Réponses: 3
    Dernier message: 10/06/2003, 11h48

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