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 :

IF THEN ELSE dans userform ne fonctionne pas.


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Femme Profil pro
    Ressources humaines
    Inscrit en
    Avril 2019
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Alimentation

    Informations forums :
    Inscription : Avril 2019
    Messages : 11
    Par défaut IF THEN ELSE dans userform ne fonctionne pas.
    Bonjour à tous.tes,

    Dans la macro suivante j'aimerai que l'userform m'indique quelles relances factures sont à faire. Il y'a 4 types de relances, relance 1 si date échéance dépassé de 7 jours, relance 2 à 15 jours, relance 3 à 30 jours et huissier à 38 jours. Pour cela il compare la date d'échéance de la facture avec un intervalle de date et une cellule de relance.

    La macro ci-dessus ne représente que la première partie, concernant la relance 1. (les relances 2,3,huissier viendront s'incruster avec des elseif dans le même principe de structure).

    En seconde partie de développement (pas présent sur cette macro), j'aimerais qu'une fois le commentaire rentré dans la textbox correspondantes, que les données soient recopiées au bon endroit en chemin inverse puis l'userform relancé, et ainsi de suite jusqu'à temps qu'il n'y ai plus de relances à faire et que ça m'affiche la msgbox "PAS/PLUS de relances pour cette semaine".

    POUR LE MOMENT : si je n'écris pas Else: MsgBox "Pas/plus de relance cette semaine", vbOKOnly, "Pas de relance", alors toutes les données s'affichent dans les textbox, la msgbox relance 1 s'affiche puis disparaît quand je clique sur ok. Tout est donc parfait sur ce point mais dès que je veux rajouter la dimension Else: MsgBox "Pas/plus de relance cette semaine", vbOKOnly, "Pas de relance" alors cette msg box ne fait que d'apparaître et ne se ferme que quand je spam le ok et aucune donnée ne se charge dans le tableau.

    SI quelqu'un pourrait m'éclairer sur mon erreur, ce serait super, 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
    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
    Private Sub UserForm_Activate()
    Dim z As Long
    Dim lastligne As Integer
     
    'Derniere ligne du tableau de la feuille Ansot
        lastligne = Sheets("Ansot").Range("A65536").End(xlUp).Row
     
     
    For z = 2 To lastligne
     
    If Worksheets("Ansot").Cells(z, 4).Value <= DateAdd("d", -7, Date) And Worksheets("Ansot").Cells(z, 4).Value > DateAdd("d", -14, Date) And IsEmpty(Worksheets("Ansot").Cells(z, 18)) = True Then
     
    With UserForm3
        .TextBoxA = Worksheets("Ansot").Cells(z, 1).Value
        .TextBoxB = CDate(Cells(z, 2).Value)
        .TextBoxC = CDate(Cells(z, 4).Value)
        .TextBoxD = CDbl(Cells(z, 5).Value) * 1
        .TextBoxE = Cells(z, 6).Value
        .TextBoxF = CDbl(Cells(z, 13).Value) * 1
        .TextBoxRE1 = Cells(z, 18).Value
        .TextBoxRE2 = Cells(z, 19).Value
        .TextBoxRE3 = Cells(z, 20).Value
        .TextBoxREH = Cells(z, 21).Value
    End With
     
     
     
        MsgBox "remplir relance 1", vbOKOnly, "Relance 1"
        If response = vbOK Then
        Exit Sub
     
     
    Exit For
     
    Else: MsgBox "Pas/plus de relance cette semaine", vbOKOnly, "Pas de relance"
    End If
    End If
     
     
     
     
     
    Next z
     
    End Sub

  2. #2
    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
    Déjà :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If response = vbOK Then
    Response, ni déclarée ni initialisée, ne risque pas de valoir vbOk

    Je t'invite à ouvrir ton aide interne VBA à la rubrique MsgBox, fonction, exemple

  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
    Et mon message précédent : sans préjudice de tout le reste, y compris de sa logique
    Que fait selon toi une instruction Exit For et (pire) une instruction Exit Sub ?

    Et qu'est ce "tableau" dans :
    quand je spam le ok et aucune donnée ne se charge dans le tableau.
    ???????
    Je ne vois d'ailleurs aucune alimentation de "tableau" dans ton code.

    Et j'imagine que par ""je spam" tu veux dire que tu ne cliques pas sur OK ? Si c'est cela, dis-le en Français, car pour moi le verbe anglais "to spam" a une signification précise et le substantif anglais "spam" encore une autre (et aucune des deux ne saurait concerner une msgbox)

  4. #4
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    Bonjour
    tes date dans ton tableau sont elles exploitable ?

    pour le msgbox avec réponse F1 !!!

    Nom : Capture.JPG
Affichages : 491
Taille : 112,5 Ko
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  5. #5
    Membre habitué
    Femme Profil pro
    Ressources humaines
    Inscrit en
    Avril 2019
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Alimentation

    Informations forums :
    Inscription : Avril 2019
    Messages : 11
    Par défaut
    Bonjour unparia et patricktoulon, merci pour vos réponses.

    unparia et patricktoulon : j'ai retravaillé les textbox avec l'aide, je n'avais en effet pas déclaré "response".
    unparia : le exit for quitte la boucle pour la reprendre à next ; exit sub quitte la macro en cours


    Voilà maintenant ma macro, pourriez-vous m'aidez à comprendre pourquoi le else ne se comporte pas comme tel ?
    Petit question pour être sûr : une MFC n'influe en rien sur la considération d'une cellule comme étant vide ou non ?
    Est-ce que mes dateadd sont bien écrits ? Je pense que oui mais depuis l'ajout du IF en haut, ça ne semble plus fonctionner donc je me demandais si le dateadd avec un décalage de 30 jours et 37 jours ne posait pas un litige entre décaler jours ou mois.

    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
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    Private Sub UserForm_Activate()
    Dim z As Long
    Dim lastligne As Integer
        lastligne = Sheets("Ansot").Range("A65536").End(xlUp).Row
    Dim Msg, Style, Title, Response
     
    MsgR1 = "Merci de renseignez les actions menées en relance 1"
    MsgR2 = "Merci de renseignez les actions menées en relance 2"
    MsgR3 = "Mercir de renseignez les actions menées en relance 3"
    MsgPasR = "Il n'y a pas/plus de relance cette semaine"
    Style = vbOKOnly
    TitleR1 = "Relance1"
    TitleR2 = "Relance2"
    TitleR3 = "Relance3"
    TitlePasR = "A jour"
     
     
     
    For z = 2 To lastligne
    If (Worksheets("Ansot").Cells(z, 4).Value <= DateAdd("d", -30, Date) And Worksheets("Ansot").Cells(z, 4).Value >= DateAdd("d", -37, Date) And (IsEmpty(Worksheets("Ansot").Cells(z, 20)) = True)) Then
     
     
        ResponseR3 = MsgBox(MsgR3, Style, TitleR3)
            If ResponseR3 = Ok Then
     
                With UserForm3
                .TextBoxA = Worksheets("Ansot").Cells(z, 1).Value
                .TextBoxB = CDate(Cells(z, 2).Value)
                .TextBoxC = CDate(Cells(z, 4).Value)
                .TextBoxD = CDbl(Cells(z, 5).Value) * 1
                .TextBoxE = Cells(z, 6).Value
                .TextBoxF = CDbl(Cells(z, 13).Value) * 1
                .TextBoxRE1 = Cells(z, 18).Value
                .TextBoxRE2 = Cells(z, 19).Value
                .TextBoxRE3 = Cells(z, 20).Value
                .TextBoxREH = Cells(z, 21).Value
                End With
     
            Exit For
            End If
     
    ElseIf (Worksheets("Ansot").Cells(z, 4).Value <= DateAdd("d", -15, Date) And Worksheets("Ansot").Cells(z, 4).Value >= DateAdd("d", -29, Date) And (IsEmpty(Worksheets("Ansot").Cells(z, 19)) = True)) Then
     
        ResponseR2 = MsgBox(MsgR2, Style, TitleR2)
            If ResponseR2 = Ok Then
     
                With UserForm3
                .TextBoxA = Worksheets("Ansot").Cells(z, 1).Value
                .TextBoxB = CDate(Cells(z, 2).Value)
                .TextBoxC = CDate(Cells(z, 4).Value)
                .TextBoxD = CDbl(Cells(z, 5).Value) * 1
                .TextBoxE = Cells(z, 6).Value
                .TextBoxF = CDbl(Cells(z, 13).Value) * 1
                .TextBoxRE1 = Cells(z, 18).Value
                .TextBoxRE2 = Cells(z, 19).Value
                .TextBoxRE3 = Cells(z, 20).Value
                .TextBoxREH = Cells(z, 21).Value
                End With
     
            Exit For
            End If
    ElseIf (Worksheets("Ansot").Cells(z, 4).Value <= DateAdd("d", -7, Date) And Worksheets("Ansot").Cells(z, 4).Value >= DateAdd("d", -14, Date) And IsEmpty(Worksheets("Ansot").Cells(z, 18)) = True) Then
     
     
     
        ResponseR1 = MsgBox(MsgR1, Style, TitleR1)
            If ResponseR1 = Ok Then
     
                With UserForm3
                .TextBoxA = Worksheets("Ansot").Cells(z, 1).Value
                .TextBoxB = CDate(Cells(z, 2).Value)
                .TextBoxC = CDate(Cells(z, 4).Value)
                .TextBoxD = CDbl(Cells(z, 5).Value) * 1
                .TextBoxE = Cells(z, 6).Value
                .TextBoxF = CDbl(Cells(z, 13).Value) * 1
                .TextBoxRE1 = Cells(z, 18).Value
                .TextBoxRE2 = Cells(z, 19).Value
                .TextBoxRE3 = Cells(z, 20).Value
                .TextBoxREH = Cells(z, 21).Value
                End With
     
            Exit For
            End If
     
     
     
    Else: ResponsePasR = MsgBox(MsgPasR, Style, TitlePasR)
            If ResponsePasR = Ok Then
            Exit Sub
            Unload Me
            End If
     
     
     
    End If
    Next z
     
    End Sub

  6. #6
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    bonjour

    j'ai examiné ton code
    donc au final(et la je vais te mettre la puce a l'oreille"j'espère!!")
    nous avons 4 conditions
    relance1 , relance2 , relance3 , pas de relance (on est d'accord???)

    et donc selon le résultat de la condition de 1 a 3) seul le texte du message change!!!!(msgr1,2,3) ainsi que le titre
    ensuite lors de l'affichage de un de ces 3 message et clique sur OK tu rempli tes controls de la même manière pour les 3
    donc déjà ici par rapport a ton code on pédale un peu pour rien (a quoi sert de faire 3 codes successifs pour changer juste le texte
    pour la 4eme condition c'est simple tu ferme le UserForm au clik ok du message

    je pense que j'ai bien compris(tu me diras)
    il me vient donc une réflexion (je me demande pourquoi tu utilise le mode réponse d'un msgbox surtout que tu n'a que le bouton OK
    selon moi entre nous c'est absolument inutile n'ayant pas d'autre choix que ok(un simple msgbox d'avertissement suffirait
    un msgbox étant bloquant le click sur ok provoquerait tout simplement l'exécution le reste du code(tu me diras si tu pige pas)

    je me suis donc risqué a recoder ton petit projet(sans garantie je n'ai pas ton environnement et ton fichier)

    voila comment je vois la chose
    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
     
    Private Sub UserForm_Activate()
        Dim z As Long, relance As Boolean, m$, t$, msgr, titler, ShT As worksheet
        Dim lastligne As Integer
        lastligne = Sheets("Ansot").Range("A65536").End(xlUp).Row
        msgr = Array(, "Merci de renseignez les actions menées en relance 1", "Merci de renseignez les actions menées en relance 2", "Mercir de renseignez les actions menées en relance 3")
        titler = Array(, "Relance1", "Relance2", "Relance3")
        Set ShT = Worksheets("Ansot")
        For z = 2 To lastligne
            With ShT
                If .Cells(z, 4).Value <= Date - 30 And .Cells(z, 4).Value >= Date - 37 And IsEmpty(.Cells(z, 20) = True) Then m = msgr1: t = titler(1): relance = True
                If m = "" And .Cells(z, 4).Value <= Date - 15 And .Cells(z, 4).Value >= Date - 29 And IsEmpty(.Cells(z, 19) = True) Then m = msgr2: t = titler(2): relance = True
                If m = "" And .Cells(z, 4).Value <= Date - 7 And .Cells(z, 4).Value >= Date - 14 And IsEmpty(.Cells(z, 18) = True) Then m = msgr3: t = titler(3): relance = True
            End With
        Next
        If relance = False Then m = "Il n'y a pas/plus de relance cette semaine": t = "a jour"
        MsgBox m, , t
        If relance = True Then
            With UserForm3
                .TextBoxA = ShT.Cells(z, 1).Value
                .TextBoxB = CDate(ShT.Cells(z, 2).Value)
                .TextBoxC = CDate(ShT.Cells(z, 4).Value)
                .TextBoxD = CDbl(ShT.Cells(z, 5).Value) * 1
                .TextBoxE = ShT.Cells(z, 6).Value
                .TextBoxF = CDbl(ShT.Cells(z, 13).Value) * 1
                .TextBoxRE1 = ShT.Cells(z, 18).Value
                .TextBoxRE2 = ShT.Cells(z, 19).Value
                .TextBoxRE3 = ShT.Cells(z, 20).Value
                .TextBoxREH = ShT.Cells(z, 21).Value
            End With
        Else
            unlod Me
        End If
    End Sub
    je pense que c'est pas trop compliqué tu comprendra tout seul

    Attention tout de même chose que je ne peux pas verifier (je n'ai pas ton fichier) vérifie bien que des dates soit exploitable entant que date dans tes cellules !!!!!!!!!!!!!!!!!
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

Discussions similaires

  1. [EJB3] [WEBLOGIC] Injection dans WebService ne fonctionne pas
    Par pmartin8 dans le forum Java EE
    Réponses: 2
    Dernier message: 15/11/2007, 21h02
  2. Réponses: 3
    Dernier message: 19/09/2007, 13h09
  3. fonction if/then/else dans une requete Access
    Par steve38 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 24/12/2006, 17h09
  4. [VBA-E] SetFocus sur TextBox dans UserForm_Initialize ne fonctionne pas ?
    Par Jipété dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 27/11/2006, 11h39
  5. Réponses: 23
    Dernier message: 07/02/2006, 08h43

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