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 :

Macro qui marche correctement avec des points d'arrêt mais qui plante Excel sans


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Inscrit en
    Avril 2010
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 257
    Points : 87
    Points
    87
    Par défaut Macro qui marche correctement avec des points d'arrêt mais qui plante Excel sans
    Salut,

    j'ai un soucis vraiment important sur mon projet et j'aimerais ouvrir une autre discussion sur mon problème vu que j'ai mal géré la précédente en oubliant les règles, veuillez m'en escuser.

    j'ai une macro Excel qui génère des courriers Word à partir de models prédéfinis, mais je rencontre un soucis.
    lorsque j'insère des points d'arrêt dans ma macro surtout avant et à l'intérieur de la partie du code d'ouverture de la boite de dialogue elle s'èxécute correctement et à tout moment, mais lorsque je les enlève, elle s'èxécute des fois et plante Excel le reste du temps, surtout quand je quitte de Excel et je reviens.

    j'ai utilisé avec l'aide d'un ami les timer et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Wait Now + TimeValue("0:00:01")
    sans succès

    Merci de bien vouloir m'aider et pardonnez moi encore d'avoir ignoré les règles.

    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
    Private Sub CommandButton1_Click()
     
        Dim WordApp As Object, WordDoc As Object
        Const wdDialogFileSaveAs = 84
        Dim Fichier As String, Titre As String
        Dim i As Byte, Lign As Byte, NbLign As Byte, Cel As Byte, NvLign As Byte
        Dim nbpage As Byte, cptpage As Byte
     
        Application.DisplayAlerts = False
        Titre = "Transmission liste CAM " & TextBox1 & " du " & Format(TextBox2, "dd mm yyyy")
        Fichier = "C:\macros\Production\corporate\Décès Collectif\Transmission Liste CAM\model\translstcam.doc"
     
               If Dir(Fichier) <> "" Then
                   Set WordApp = CreateObject("word.application")
                   Set WordDoc = WordApp.Documents.Open(Fichier)
     
                   For i = 1 To 11
                       If i = 6 Then
                           dform = Cells(6, i)
                           madate = Format(dform, "dd mmmm yyyy")
                           WordDoc.Bookmarks("Signet" & i).Range.Text = madate
                       ElseIf i = 8 Then
                           dform = Cells(6, i)
                           nombr = Format(dform, "#,0")
                           WordDoc.Bookmarks("Signet" & i).Range.Text = nombr
                       Else
                           WordDoc.Bookmarks("Signet" & i).Range.Text = Cells(6, i)
                       End If
                   Next i
     
               Else
                   MsgBox "Fichier introuvable"
                   Exit Sub
               End If
        Stop
     
        'Affiche la boite dialogue de sauvegarde avec la pre-saisie de la réf
        With WordApp.Dialogs(wdDialogFileSaveAs)
             .Name = Titre & ".doc"
             .Show
        End With
     
        WordApp.Visible = True    'affiche le document Word
        Unload Me
     
     
    End Sub

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Voila ce que j'utilise perso!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub test()
    Tempo 5
    End Sub
     
    Sub Tempo(s As Integer)
    Dim T
    T = Time
    While DateDiff("s", T, Time) < s
    DoEvents
    Wend
    End Sub

  3. #3
    Membre régulier
    Inscrit en
    Avril 2010
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 257
    Points : 87
    Points
    87
    Par défaut
    Merci pour ta proposition , elle donne le même résultat et m'a permis de voir que lorsque je quitte excel et je reviens c'est au niveau du .show de la boite dialogue que sa coince puisque la partie suppérieur du code s'èxécute toujours.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Place le bout de code qui te permets de lancer le UserForm (Usf.Show)!

  5. #5
    Membre régulier
    Inscrit en
    Avril 2010
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 257
    Points : 87
    Points
    87
    Par défaut
    le bout de code qui me permet de lancer le Userform est placé derrière un bouton sur la feuille Excel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub BiaAptTab_Cliquer()
        BIAapttab.Show vbmodels
    End Sub
    puis au niveau du userform j'ai maintenant définit mon programme derrière "CommandButton_Click"

    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
    Private Sub CommandButton1_Click()
     
        Dim WordApp As Object, WordDoc As Object
        Const wdDialogFileSaveAs = 84
        Dim Fichier As String, Titre As String
        Dim i As Byte, Lign As Byte, NbLign As Byte, Cel As Byte, NvLign As Byte
        Dim nbpage As Byte, cptpage As Byte
     
        Application.DisplayAlerts = False
        Titre = "Transmission liste CAM " & TextBox1 & " du " & Format(TextBox2, "dd mm yyyy")
        Fichier = "C:\macros\Production\corporate\Décès Collectif\Transmission Liste CAM\model\translstcam.doc"
     
               If Dir(Fichier) <> "" Then
     
                   Set WordApp = CreateObject("word.application")
                   Set WordDoc = WordApp.Documents.Open(Fichier)
     
                   For i = 1 To 11
                       If i = 6 Then
                           dform = Cells(6, i)
                           madate = Format(dform, "dd mmmm yyyy")
                           WordDoc.Bookmarks("Signet" & i).Range.Text = madate
                       ElseIf i = 8 Then
                           dform = Cells(6, i)
                           nombr = Format(dform, "#,0")
                           WordDoc.Bookmarks("Signet" & i).Range.Text = nombr
                       Else
                           WordDoc.Bookmarks("Signet" & i).Range.Text = Cells(6, i)
                       End If
                   Next i
     
               Else
                   MsgBox "Fichier introuvable"
                   Exit Sub
               End If
        'Stop
     
        'Application.Wait Now + TimeValue("0:00:02")
     
        'Affiche la boite dialogue de sauvegarde avec la pre-saisie de la réf
        With WordApp.Dialogs(wdDialogFileSaveAs)
             .Name = Titre & ".doc"
              Tempo 3
             .Show
        End With
     
        'WordDoc.Save
        WordApp.Visible = True    'affiche le document Word
        'WordDoc.PrintOut          'Pour imprimer le doc obtenu
        'WordDoc.Close True        'ferme le document word en sauvegardant les données
        'WordApp.Quit              'ferme la session Word
        Unload Me
        'MsgBox ("Courrier générer avec succès !")
     
    End Sub

  6. #6
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub BiaAptTab_Cliquer()
        BIAapttab.Show 1
    End Sub

  7. #7
    Membre régulier
    Inscrit en
    Avril 2010
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 257
    Points : 87
    Points
    87
    Par défaut
    Sa pause le même problème mais je pense que c'est de la que vient le problème car lorsque j'èxécute directement la macro à partir du code source elle passe correctemnt mais quand je passe par le bouton que j'ai placé sur la feuille Excel c'est la que le problème se produit.

    J'ai effectivement observé et c'est au niveau du bouton positionné sur la feuille permettant de lancer la macro qu'il y a problème. quand je passe directement sur la flêche verte exécuter de VBA mes programmes fonctionnes sans problème avec ou sans les points d'arrêt, mais lorsque je passe par le bouton sur la feuille excel, excel devient lent et plante. alors que j'ai besoin d'un tel bouton pour les utilisateurs je ne sais vraiment pas comment m'y prendre.

  8. #8
    Membre averti
    Homme Profil pro
    Ingénieur Industrialisation
    Inscrit en
    Mai 2015
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Mai 2015
    Messages : 222
    Points : 412
    Points
    412
    Par défaut
    Bonsoir Saninx,

    Pourrais-tu partager ton classeur?

    Honnêtement je ne vois pas pourquoi ton bouton ralentirait ou planterait l'ouverture du UserForm, mais je suis curieux d'essayer

    EDIT : N'oublie pas que le .Show te sera indiqué comme plantant du moment que le UserForm_Initialize ne s'est pas bien exécuté, le problème ne vient à coup sûr pas de cette ligne...

    N'hésite pas à ajouter cela en haut du code de ton UserForm

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    et ensuite tu peux faire des pauses en millisecondes pour éviter de faire des pauses d'une seconde entière... en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sleep 500 'pour 0.5 seconde
    Au passage, essaye de mettre à la fin par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
    ... Juste pour être sûr ! Je sais qu'avec des points d'arrêt ou en mode pas à pas (F8) le ScreenUpdating = false ne fonctionne pas toujours alors qu'en lecture normale, si !

Discussions similaires

  1. Réponses: 3
    Dernier message: 03/05/2011, 10h41
  2. [Prototype] Requête Ajax ne passe pas avec des points d'interrogation
    Par Romalafrite dans le forum Bibliothèques & Frameworks
    Réponses: 1
    Dernier message: 09/12/2007, 22h31
  3. [Débutant] Scinder une chaine avec des points
    Par poiwalt dans le forum Débuter avec Java
    Réponses: 7
    Dernier message: 06/07/2007, 20h09
  4. Réponses: 24
    Dernier message: 01/06/2007, 21h37
  5. Réponses: 6
    Dernier message: 05/04/2007, 09h46

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