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 :

Gestion du cancel d'une Inpubox [XL-2002]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 57
    Par défaut Gestion du cancel d'une Inpubox
    Bonjour,

    J'ai créé une inputbox pour signaler à l'utilisateur qu'il a laissé des cases vides et lui demander de les remplir. Pas de problème.
    Si l'utilisateur clique sur annuler ou sur OK sans rien saisir, je voudrais que ma variable prenne par défaut la valeur 1. Est-ce possible et si oui comment? J'ai cherché sur le forum mais je n'ai rien trouvé qui me convienne...


    Merci d'avance !


    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
     
    Sub tintin
     
    [...]
    Dim TextNum as variant      'TextNum = variable reprenant le contenu de ma cellule
    Dim NoteSaisie as integer    'NoteSaisie = variable reprenant le contenu de l'inputbox    
    [...]
     
    'a. gestion des cases vides:
        If TextNum = "" Then           
            NoteSaisie = InputBox("Aucun critère n'a été saisi , veuillez saisir une note." + Chr(13) + "Par défaut, la note saisie aura la valeur 1", "")
            ActiveSheet.Cells(LActivite, CActivite) = NoteSaisie
        End If
     
    [...]
    End Sub

  2. #2
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Dim TextNum As Variant      'TextNum = variable reprenant le contenu de ma cellule
      Dim NoteSaisie As String    'NoteSaisie = variable reprenant le contenu de l'inputbox
    '[...]
     
    'a. gestion des cases vides:
        If TextNum = "" Then
          Do While Not IsNumeric(NoteSaisie) Or NoteSaisie = ""
            NoteSaisie = InputBox("Aucun critère n'a été saisi , veuillez saisir une note." + Chr(13) + "Par défaut, la note saisie aura la valeur 1", "", "1")
            If NoteSaisie = "" Then NoteSaisie = "1"
          Loop
          ActiveSheet.Cells(LActivite, CActivite) = NoteSaisie
        End If
     
    '[...]
    le 1 viendra par défaut. Il reviendra s'imposer même si l'utilisateur l'efface
    J'ai aussi vérifié qu'un numérique était entré ...
    S'il y a d'autres choses à vérifier, dis-le.

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    226
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 226
    Par défaut
    Hello,

    Une autre version pour le même résultat.

    MAIS, avec cette ligne
    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
        Dim TextNum As Variant
        Dim NoteSaisie As String 'Ici plutôt String
     
        If TextNum = "" Then
     
        NoteSaisie = InputBox("Aucun critère n'a été saisi , veuillez saisir une note." + Chr(13) + "Par défaut, la note saisie aura la valeur 1", "")
     
        If NoteSaisie = "" Then
            NoteSaisie = 1
                ActiveCell = NoteSaisie
            Exit Sub
        Else
            ActiveCell = NoteSaisie
        End If
     
        End If
    Attention donc, dans ce cas, la valeur de l'InputBox se collera sur la cellule active !

    Au plaisir, mOOm.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 57
    Par défaut
    Merci à tous les 2 pour votre aide.

    A priori, la solution d'ucfoutu marche bien. Il faut que je vérifie les calculs qui font suite à cette ligne de code mais ça a l'air bon.

    J'ai 3 questions, pour mieux comprendre :

    - pourquoi je dois passer ma variable "NoteSaisie" en string? Effectivement, quand j'ai fait mon premier test, je l'avais laissé en integer et j'ai eu droit à une belle erreur de type 13. Je ne comprend pas pourquoi.

    - Après, je copie cette variable dans une cellule, et j'utilise le résultat pour un petit calcul. Comme je passe par le contenu de la cellule (et pas par la variable elle-même), le fait que la variable soit déclarée en String ne devrait pas m'empêcher de faire le calcul, j'imagine?

    - Sur le ligne de code suivante, que signifient les 2 derniers éléments ? (, "" et , "1")? Moi j'avais fait des essais avec juste (, "1") à la fin, mais ça plantait toujours.

    Citation Envoyé par ucfoutu Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NoteSaisie = InputBox("Aucun critère n'a été saisi , veuillez saisir une note." + Chr(13) + "Par défaut, la note saisie aura la valeur 1", "", "1")

  5. #5
    Membre Expert Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Par défaut
    Dans l'aide VBA, une réponse a ta première question :

    Affiche une invite dans une boîte de dialogue, attend que l'utilisateur tape du texte ou clique sur un bouton, puis renvoie le contenu de la zone de texte sous la forme d'une valeur de type String.

  6. #6
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Et tu peux toujours lever toute ambiguïté en modifiant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveSheet.Cells(LActivite, CActivite) = NoteSaisie
    en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveSheet.Cells(LActivite, CActivite) = val(NoteSaisie)
    n'est-ce -pas ?

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 57
    Par défaut
    Merci pour vos lumières.

    Sinon, je viens de tester le code en détail. En fait, la valeur que je rentre est mise par défaut à toutes les cases vides rencontrées, alors que moi, je veux qu'il me repose la question à chaque fois.
    Je sais pas si ça vient du code lui-même ou s'il est mal placé. Je pencherais bien pour la 2ème solution... Je regarde ça et je vous tiens au courant.

    Edit : en fait, je mets ce test au même endroit qu'un autre test sur la nature (numérique ou alpha) de mon contenu de cellule, et ce test là marche bien (il considère indépendamment toutes les cases). Tout bien réfléchi, ça vient peut-être du code. Me suis posée la question de l'utilité de la boucle (Do While Not) mais quand je bidouille le code avec des If Then, j'ai le même problème.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 57
    Par défaut
    Bon, finalement, je ne sais pas par quel miracle, mais ça marche. J'ai bien dû modifier quelquechose au cours de mes essais, mais quoi? Enfin le résultat est là, c'est le principal

    Je remets le code, des fois que ça serve à qq'un d'autre, mais y'a des variables dans tous les sens, et des tests par rapport à des cellules sur d'autres feuilles, C un peu long à expliquer en détail.

    Ce bout de code se trouve dans une boucle qui teste toutes les lignes de ma feuille active (variable LActivité). A chaque ligne, j'ai une autre boucle qui va tester certaines colonnes (variable CActivité)
    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     [...] 
    '5. Attribution de la Note de chaque critère
    TextNum = ActiveSheet.Cells(LActivite, CActivite - 1)  'contenu de la cellule à tester
     
      'a. gestion des cases vides
       If TextNum = "" Or TextNum = "-" Then
            If CActivite = 4 Then         '- cas du critère règlementation
                Reglementaire = MsgBox("Aucune saisie n'a été effectuée." + Chr(13) + "L'activité '" + ActiveSheet.Cells(LActivite, 1) + "' est elle-conforme à la règlementation? ", vbYesNo)
                If Reglementaire = vbYes Then Conformite = 1
                ElseIf Reglementaire = vbNo Then Conformite = 2
                End If
                ActiveSheet.Cells(LActivite, CActivite) = Conformite
            ElseIf CActivite > 4 Then         '- cas des autres critères
                NoteSaisie = InputBox("Aucun critère n'a été saisi pour le critère ''" + ActiveSheet.Cells(1, CActivite - 1) + Chr(13) + "Saisissez la note que vous souhaitez affecter à ce critère." + Chr(13) + Chr(13) + "Par défaut, la note saisie aura la valeur 1", "", "1")
                If NoteSaisie = "" Then NoteSaisie = "1"
                ActiveSheet.Cells(LActivite, CActivite) = NoteSaisie
            End If
                ActiveSheet.Cells(LActivite, CActivite - 1) = "-"
     
        'b. gestion des critères numériques (quantitatifs)
        ElseIf IsNumeric(TextNum) Then
            If ActiveSheet.Cells(LActivite, CActivite) < Worksheets("Seuils de notation").Cells(NumeroLigneSeuil, DbtColSeuil) Then
            ActiveSheet.Cells(LActivite, CActivite) = Worksheets("parametrage").Cells(LNote, CNote)
            End If
     
            For CSeuil = DbtColSeuil To FinColSeuil
                If ActiveSheet.Cells(LActivite, CActivite - 1) >= Worksheets("Seuils de notation").Cells(NumeroLigneSeuil, CSeuil) Then
                ActiveSheet.Cells(LActivite, CActivite) = Worksheets("parametrage").Cells(LNote, CNote + 1)
                End If
            CNote = CNote + 1
            Next
     
        'c. gestion des critères alphanumériques (qualitatifs)
        ElseIf Not IsNumeric(TextNum) And TextNum <> "-" Then
            '- cas du critère de règlementation
            If CActivite = 4 Then
                Reglementaire = MsgBox("L'activité '" + ActiveSheet.Cells(LActivite, 1) + "' est elle-conforme à la règlementation? ", vbYesNo)
                If Reglementaire = vbYes Then Conformite = 1
                ElseIf Reglementaire = vbNo Then Conformite = 2
                End If
                ActiveSheet.Cells(LActivite, CActivite) = Conformite
            ElseIf CActivite > 4 Then
            '- cas des autres critères
            NoteSaisie = InputBox("Le critère ''" + ActiveSheet.Cells(1, CActivite - 1) + "'' est une données qualitative." + Chr(13) + "Saisissez la note que vous souhaitez affecter à ce critère." _
            + Chr(13) + Chr(13) + "Par défaut, la note saisie aura la valeur 1", "", "1")
            If NoteSaisie = "" Then NoteSaisie = "1"
            ActiveSheet.Cells(LActivite, CActivite) = NoteSaisie
            End If
        End If

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

Discussions similaires

  1. [Conception] Gestion des accents dans une base de données
    Par MiJack dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 07/07/2005, 11h41
  2. gestion des boutons d'une manette : relachement
    Par backfire dans le forum DirectX
    Réponses: 1
    Dernier message: 05/01/2005, 10h13
  3. [VB6] Gestion des erreurs dans une dll
    Par zimba-tm dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 02/08/2004, 11h20
  4. [TFrame] Problème de gestion du OnMouseDown avec une Frame
    Par xherault dans le forum Composants VCL
    Réponses: 5
    Dernier message: 23/05/2003, 15h35
  5. Gestion des Utilisateurs depuis une application
    Par LLaurent dans le forum XMLRAD
    Réponses: 4
    Dernier message: 25/03/2003, 16h29

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