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 :

Mon Sub TbxClt_BeforeUpdate fait bugger Excel [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Femme Profil pro
    reconversion en cours
    Inscrit en
    Juillet 2009
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : reconversion en cours
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2009
    Messages : 637
    Par défaut Mon Sub TbxClt_BeforeUpdate fait bugger Excel
    Bonjour,
    A la sortie de ma Textbox, je vérifie si un client a déjà été contacté.
    Si oui, j'envoie un mess pour demander si l'on veut continuer la saisie avec ce client ou pas
    Si la réponse est Oui, je renvoie un message informatif pour donner le nb d’occurrences du client et je fais remonter dans la USF toute les
    informations du client pour la 1ère saisie; l'utilisateur est sensé renseigner le nouveau motif du courrier et changer la date de réception.

    Si la réponse est Non, je retourne la USF vide pour une nouvelle saisie. Cette réponse fonctionne bien.
    Par contre si la réponse est Oui, ma messbox fonctionne, mais pas moyen de modifier l'USF. Le message revient et boucle jusqu'au bug.
    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
    Private Sub TbxClt_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
    'Vérif si Clt existe déjà
    Dim Rg As Range, Lg As Long
    Dim Cel As Range, Cpt As Long
    Set Rg = Range("TbSv[Clt]").Find(TbxClt.Text)    'Recherche le Clt 
     
    If Not Rg Is Nothing Then
        For Each Cel In Range("TbSv[Clt]")    'Nb d'occurences
            If Cel = Rg Then Cpt = Cpt + 1
        Next
        Lg = Rg.Rows.Count
        Select Case MsgBox("Ce Clt a déjà fait l'objet de " & Cpt & " enregistrement(s) :" _
                & vbCrLf & "Concerne : " & Range("TbSv").Cells(Lg, 5) _
                & vbCrLf & "Date de Courrier : " & Range("TbSv").Cells(Lg, 2) _
                & vbCrLf & "Pris en charge le : " & Range("TbSv").Cells(Lg, 3) _
                & vbCrLf & "Type de courrier : " & Range("TbSv").Cells(Lg, 6) _
                & vbCrLf & "Type de traitement : " & Range("TbSv").Cells(Lg, 7) _
                & vbCrLf & "Répondu le : " & Range("TbSv").Cells(Lg, 8) _
                & vbCrLf & "(ligne  " & Lg & ")" _
                & vbCrLf & "" _
                & vbCrLf & "Voulez-vous faire une nouvelle saisie avec ce Clt?" _
                , vbYesNo Or vbExclamation Or vbDefaultButton1, "SARA - Clt existant")
            Case vbYes
                If Rg > 2 Then MsgBox "pour les autres occurrences, voir dans la base de données", vbExclamation, "SARA - Clt existant"
                TbxNom = Range("TbSv").Cells(Lg, 5)
                TbxDtCo.SetFocus
            Case vbNo
                TbxClt = ""
                TbxClt.SetFocus
        End Select
        Cancel = True
    End If
    End Sub
    Est-ce que quelqu'un peut m'expliquer ce qui ne va pas, svp.
    Merci

  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
    Mon Sub TbxClt_BeforeUpdate fait bugger Excel
    "bugger" = plantage . Quel type de plantage ?

    Je ne vois à priori aucune source d'erreur dans ton code.
    Reste que rien ne se passera sur ton userform tant que "vivra" la seconde messagebox.

    Reste également (bien évidemment) à examiner si ce que tu veux écrire dans la textbox n'est pas vide !

  3. #3
    Membre éclairé
    Femme Profil pro
    reconversion en cours
    Inscrit en
    Juillet 2009
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : reconversion en cours
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2009
    Messages : 637
    Par défaut
    Bonjour unparia et merci de me répondre
    J'ai retiré le 2ème msgbox, cela ne change rien
    Le 1er Msgbox apparait 1 première fois, je clique "oui", il réapparait, je clique "oui'

    le code s'arrête sur "TbxDtCo.setFocus" (dernière ligne du Case vbYes) avec le message : "Erreur non répertoriée".
    Quand j'arrête la macro, (fin au message de debug ou bouton initialiser) Excel se ferme et se relance...
    Si je fais avancer la macro jusqu'à Cancel = True, je reviens sur ma USF avec la référence client, son nom et la date de traitement par défaut ; mais dès que je clique sur un champ ma msgbox revient en boucle. je deviens folle...

  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
    Bonjour
    heu c'est normal que ton message revienne tout le temps

    tu utilise l'evenement before_update du textbox


    mais comme dans le case vbno de ton message tu vide le texte box forcement ca d'éclanche l'évènement (le serpent qui se mort la queue )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Case vbNo
                TbxClt = ""
    peut etre devra tu ajouter une variable globale module en boolean et l'utiliser l'ors de la case réponse et remise a false après vidage du textbox et mettre tout le code de cet évènement dans dans un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if variable =true
    'blablabla
    Case vbNo
                TbxClt = ""
    variable=false
    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
    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
    pas testé mais ca doit le faire
    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
    Dim ma_variable As Boolean ' a  mettre en haut de module
     
    Private Sub TbxClt_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
    If ma_variable = True Then ma_variable = False: Exit Sub
    'Vérif si Clt existe déjà
    Dim Rg As Range, Lg As Long
    Dim Cel As Range, Cpt As Long
    Set Rg = Range("TbSv[Clt]").Find(TbxClt.Text)    'Recherche le Clt
     
    If Not Rg Is Nothing Then
        For Each Cel In Range("TbSv[Clt]")    'Nb d'occurences
            If Cel = Rg Then Cpt = Cpt + 1
        Next
        Lg = Rg.Rows.Count
        Select Case MsgBox("Ce Clt a déjà fait l'objet de " & Cpt & " enregistrement(s) :" _
                & vbCrLf & "Concerne : " & Range("TbSv").Cells(Lg, 5) _
                & vbCrLf & "Date de Courrier : " & Range("TbSv").Cells(Lg, 2) _
                & vbCrLf & "Pris en charge le : " & Range("TbSv").Cells(Lg, 3) _
                & vbCrLf & "Type de courrier : " & Range("TbSv").Cells(Lg, 6) _
                & vbCrLf & "Type de traitement : " & Range("TbSv").Cells(Lg, 7) _
                & vbCrLf & "Répondu le : " & Range("TbSv").Cells(Lg, 8) _
                & vbCrLf & "(ligne  " & Lg & ")" _
                & vbCrLf & "" _
                & vbCrLf & "Voulez-vous faire une nouvelle saisie avec ce Clt?" _
                , vbYesNo Or vbExclamation Or vbDefaultButton1, "SARA - Clt existant")
            Case vbYes
                If Rg > 2 Then MsgBox "pour les autres occurrences, voir dans la base de données", vbExclamation, "SARA - Clt existant"
                TbxNom = Range("TbSv").Cells(Lg, 5)
                TbxDtCo.SetFocus
            Case vbNo
                 ma_variable = True
                TbxClt = ""
                TbxClt.SetFocus
         End Select
        Cancel = True
    End If
       End Sub
    en cas d vbno l'évènement ne devrait pas être répété
    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

  6. #6
    Membre éclairé
    Femme Profil pro
    reconversion en cours
    Inscrit en
    Juillet 2009
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : reconversion en cours
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2009
    Messages : 637
    Par défaut
    Bonjour Patrick,
    Merci pour ton aide, mais ce n'est pas Case vbNo qui pose problème, mais c'est vbYes

  7. #7
    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 mouftie

    oui en effet il y a cela aussi dans le vbyes
    d'après toi Rg c'est quoi?

    mais garde le vbno quand même ca évitera la2d fois pour rien du message puis tout le reste
    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

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

Discussions similaires

  1. Mon PC ne fait pas BIP ..
    Par sliderman dans le forum Composants
    Réponses: 1
    Dernier message: 09/05/2008, 08h22
  2. Mon makefile me fait des misères !
    Par myryad dans le forum C
    Réponses: 2
    Dernier message: 14/04/2008, 21h21
  3. mon ordi ne fait plus aucun son
    Par fatiana dans le forum Composants
    Réponses: 1
    Dernier message: 04/04/2008, 15h42
  4. Sub main pour macro excel
    Par theshark85 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 03/09/2007, 14h48
  5. DoModal fait bugger mon programme
    Par gigigao dans le forum MFC
    Réponses: 3
    Dernier message: 25/09/2006, 00h02

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