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 :

Problème, impossible de faire partir une msgbox dans un while


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2017
    Messages : 54
    Par défaut Problème, impossible de faire partir une msgbox dans un while
    Bonjour,

    Je vous présente mon problème, dans mon code j'ai une boucle while qui (lorsque j'appuie sur un bouton), tant que tous les champs de mon userform ne sont pas remplis, m'affiche une msgbox, cependant je n'arrive pas à enlever cette msg box puisque la boucle repart à chaque fois, avez vous une solution ?

    Cordialement

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Juillet 2010
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : Juillet 2010
    Messages : 160
    Par défaut
    A mon avis le problème vient justement du fait que ton messagebox ne devrait pas être dans ton while mais après...

    Pour moi dans ton while tu parcours tous tes champs,
    Si un champs n'est pas renseigné on sort du while avec un top_vide à oui

    Après ton while si top_vide=oui then msgbox...
    Dis moi si ça correspond à ce que tu cherches.

    traersa

  3. #3
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    lis la rubrique Do...Loop, instruction de ton aide interne VBA et intéresse-toi à son instruction Exit do.

  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
    Bonjour,

    avec un visu de ton code, on pourrait mieux comprendre si c'est pertinent de procéder ainsi.

    Une autre alternative, c'est Do/Loop While dans laquelle tu as une variable booléenne que tu passes à True quand les conditions sont réunies
    Et tu Loop While [TaConditionInitiale] Or MaVariableBooleenne = True.

  5. #5
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par m.peres.97 Voir le message
    Je vous présente mon problème, dans mon code j'ai une boucle while qui (lorsque j'appuie sur un bouton), tant que tous les champs de mon userform ne sont pas remplis, m'affiche une msgbox, cependant je n'arrive pas à enlever cette msg box puisque la boucle repart à chaque fois, avez vous une solution ?
    Dans toute boucle, il faut mettre quelque part une condition de sortie.
    Qu'est-ce qu'il y a à côté de ton While ? Comment codes-tu la condition "tant que tous les champs de mon userform ne sont pas remplis" ?

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2017
    Messages : 54
    Par défaut
    Voici mon 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
    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    Option Explicit
     
    Dim L As Integer
     
    Private Sub CommandButton1_Click()
     
    Dim PlageRecherche As Range
    Dim test As Boolean
     
    test = False
     
    While (test = False)
     
    If TextBox1 = "" Or TextBox1 = "" Or TextBox2 = "" Or TextBox3 = "" Or TextBox4 = "" Or TextBox5 = "" Or ComboBox2 = "" Or ComboBox3 = "" Or ComboBox4 = "" Then
    MsgBox ("Saisie incomplète, veuillez remplir tout les champs")
    Else
        If MsgBox(" Confirmez-vous l’insertion de cette anomaie ? ", vbYesNo) = vbYes Then
     
            L = Sheets("Suivi").Range(" a65536 ").End(xlUp).Row + 1
     
            Sheets("Suivi").Range("B" & L).Value = CStr(ComboBox1.Value)
     
            Set PlageRecherche = Sheets("DATA").Range("A:A").Find(what:=ComboBox1, LookIn:=xlValues, lookat:=xlWhole)
            If PlageRecherche Is Nothing Then
            L = Sheets("DATA").Range("A" & Rows.Count).End(xlUp).Row + 1
            Sheets("DATA").Range("A" & L).Value = CStr(ComboBox1.Value)
            End If
            ActiveWorkbook.Worksheets("DATA").ListObjects("Tableau1").Sort.SortFields.Clear
            ActiveWorkbook.Worksheets("DATA").ListObjects("Tableau1").Sort.SortFields.Add _
            Key:=Range("A2"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _
            :=xlSortNormal
            With ActiveWorkbook.Worksheets("DATA").ListObjects("Tableau1").Sort
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
            End With
     
     
            L = Sheets("Suivi").Range(" a65536 ").End(xlUp).Row + 1
     
            Sheets("Suivi").Range("D" & L).Value = CStr(ComboBox2.Value)
     
            Sheets("Suivi").Range("C" & L).Value = CStr(ComboBox3.Value)
     
            Sheets("Suivi").Range("H" & L).Value = CStr(ComboBox4.Value)
     
            Sheets("Suivi").Range("E" & L).Value = CStr(TextBox1.Value)
     
            Sheets("Suivi").Range("F" & L).Value = CStr(TextBox2.Value)
     
            Sheets("Suivi").Range("G" & L).Value = CStr(TextBox3.Value)
     
            Sheets("Suivi").Range("I" & L).Value = CStr(TextBox5.Value)
     
            Sheets("Suivi").Range("A" & L).Value = CStr(TextBox4.Value)
     
            Sheets("Suivi").Range("j" & L).Value = "Nouveau"
     
            Sheets("Suivi").Range("K" & L).Value = "TBD"
     
            Unload Me
     
        test = True
     
        End If
     
        End If
        Wend
     
        End Sub
    Le but est donc de bloquer l'imputation du formulaire dans mon tableau tant que toute les cases ne sont pas remplies, donc si on quitte la boucle je vois pas comment on peut continuer à s'assurer que les champs sont bien tous remplis

    Cordialement

  7. #7
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Et qu'as-tu fait de mes indications (utilisation de Do While et de Exit Do) ? Passées à la trappe ? As-tu lu la rubrique que je t'ai indiquée de ton aide interne VBA ?
    Il te suffirait alors de quitter (exit do) ici :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    If TextBox1 = "" Or TextBox1 = "" Or TextBox2 = "" Or TextBox3 = "" Or TextBox4 = "" Or TextBox5 = "" Or ComboBox2 = "" Or ComboBox3 = "" Or ComboBox4 = "" Then
       MsgBox ("Saisie incomplète, veuillez remplir tout les champs")
        exit do '--->> mais dans une boucle Do while, bien évidemment ...
    Else

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2017
    Messages : 54
    Par défaut
    Mon code n'a pas changé depuis hier je viens d'arriver au travail je vais m'y atteler

  9. #9
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2017
    Messages : 54
    Par défaut
    Problème réglé avec un Do whil et un exit do merci beaucoup, j'avais omis que le fait d'appuyer sur le bouton relancerait le while

    Merci

Discussions similaires

  1. [AC-2013] Impossible de faire un transferttext csv dans une table lié
    Par Gabrieel dans le forum VBA Access
    Réponses: 1
    Dernier message: 12/05/2017, 21h59
  2. Réponses: 10
    Dernier message: 25/10/2016, 14h23
  3. Impossible de faire remonter une date dans un DTPicker
    Par MadeInSwiss dans le forum Excel
    Réponses: 4
    Dernier message: 11/10/2016, 09h12
  4. Impossible de faire du pas à pas dans une dll
    Par denrette dans le forum Delphi
    Réponses: 5
    Dernier message: 18/12/2006, 10h26
  5. Problème avec l'insertion d'une image dans JPanel
    Par anutka dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 16/03/2006, 10h02

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