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 :

Message d'erreur inexpliqué


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
    Inscrit en
    Juin 2012
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 262
    Par défaut Message d'erreur inexpliqué
    Bonjour,
    J'ai une macro qui ouvre à la suite des fichiers pour copier les données et les coller dans d'autres fichiers (je regroupe des fichiers mensuels en un seul fichier sur une période donnée, chaque fichier mensuel ou compilé correspond à une variable).

    J'ai parfois ce message d'erreur à l'exécution de ma macro au niveau de ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MyWbDest.Sheets(Onglet).Range("A" & dern + 1).PasteSpecial
    Nom : Capture.PNG
Affichages : 119
Taille : 7,5 Ko

    Lorsque que je clique sur débogage puis F8 ou F5, la macro repart comme si de rien n'était.

    Et j'ai une deuxième anomalie parfois : la fenêtre enregistrer sous qui s'affiche à l'enregistrement du fichier.

    A quoi cela est-il dû et comment l'éviter ?

    Merci

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour l.flipper,

    Il faudrait nous donner le code entier, voir le classeur avec le code

    Mais je penche pour un soucis de timing

    A+

  3. #3
    Membre éclairé
    Femme Profil pro
    Inscrit en
    Juin 2012
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 262
    Par défaut
    Comment on peut éviter ce souci de timing ?

  4. #4
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    bonjour
    Peut être ce message apparaît quand la variable "dern" est vide
    ajouter un test avant de copier
    à défaut affiche ton code

  5. #5
    Membre éclairé
    Femme Profil pro
    Inscrit en
    Juin 2012
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 262
    Par défaut
    dern n'est pas vide,

    sur une boucle de 700 à 800 fichiers,
    j'ai eu maximum 2 fois la fenêtre enregistrer sous et
    entre 0 et 6 fois l'arrêt sur le PasteSpecial

    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
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
     
    Set MyWbActif = ActiveWorkbook
    'on boucle sur les 20 lignes de variable possibles
    For i = 2 To 21
        'on boucle sur la période souhaitée
     
        Lg = 1
        col = 1
     
        Dim XL As New Excel.Application
     
        MyWbActif.Activate
        MyWbActif.Sheets("FichiersOK").Select
     
        If i = 2 Then
          Sheets("FichiersOK").cells.Select
          Selection.ClearContents
        End If
     
        MyWbActif.Sheets("Paramètres").Select
        If cells(i, 7) = "" Then Exit Sub
     
        variable = MyWbActif.Sheets("Paramètres").cells(i, 6) & " - " & MyWbActif.Sheets("Paramètres").cells(i, 7) & " : "
        Application.ScreenUpdating = True
        Application.StatusBar = variable
        Application.ScreenUpdating = False
     
        Onglet = cells(i, 11)
        destination = cells(i, 13)
        If Fichier_Existe(destination) = False Then 'si le fichier n'existe pas on le crée
          'on teste d'abord si le dossier existe
          If Dossier_Existe(cells(i, 9)) = False Then
            MsgBox "dossier destination inexistant"
            Exit Sub
          End If
     
          'création du fichier
            Workbooks.Add
            Sheets("Feuil1").Select
            Sheets("Feuil1").Name = Onglet
            ActiveWorkbook.SaveAs Filename:=destination
            ActiveWorkbook.Close
        End If
     
        'si il existe on l'ouvre
         Set MyWbDest = Workbooks.Open(destination)
         MyWbDest.Activate 'fichier ouvert, il va falloir récupérer les données pour les traiter
     
     
     
        'Fichier = Application.GetOpenFilename("Fichiers Excel (*.xls), *.xls")
        With MyWbActif.Sheets("Paramètres")
            For aaaa = .cells(i, 2) To .cells(i, 4)
              For mm = 1 To 12
                If aaaa = .cells(i, 2) And mm < .cells(i, 3) Then mm = .cells(i, 3)
                If aaaa = .cells(i, 4) And mm > .cells(i, 5) Then Exit For
                If mm < 10 Then mm = "0" & mm
                Application.ScreenUpdating = True
                Application.StatusBar = variable & " " & aaaa & mm
                Application.ScreenUpdating = False
     
                Chemin = .cells(i, 1) & "\" & aaaa & mm & "\" & .cells(i, 6) & "\" & .cells(i, 7)
     
                  'on teste d'abord si le dossier existe
                If Dossier_Existe(.cells(i, 1) & "\" & aaaa & mm & "\" & .cells(i, 6)) = False Then
                  'MsgBox "dossier destination inexistant"
                  MyWbActif.Sheets("FichiersOK").cells(Val(mm) + 13 * (i - 2), col) = aaaa & mm & "\" & .cells(i, 6) & " inexistant"
                  GoTo suivant
                End If
     
                 'puis on teste si le fichier existe
                If Fichier_Existe(Chemin) = False Then
                  MyWbActif.Sheets("FichiersOK").cells(Val(mm) + 13 * (i - 2), col) = aaaa & mm & "\" & .cells(i, 6) & "\" & .cells(i, 7) & " inexistant"
                  GoTo suivant
                End If
     
                'puis si l'onglet existe, on continue à la suite donc on ne fait rien, sinon nouvel onglet
                If Onglet_Existe(Onglet) = False Then
                  Sheets.Add.Name = Onglet
                End If
     
     
                Set MyWb = Workbooks.Open(Chemin)
                MyWb.Activate 'fichier ouvert, il va falloir récupérer les données pour les traiter
     
                'on sélectionne les données  et on les copie
     
                dern = Range("A" & Rows.Count).End(xlUp).Row
                Range("a1:a" & dern).Select
                Selection.Copy
     
                MyWb.Close SaveChanges:=False
     
                MyWbActif.Sheets("FichiersOK").cells(Val(mm) + 13 * (i - 2), col) = variable & aaaa & mm
     
     
     
                MyWbDest.Activate
                MyWbDest.Sheets(Onglet).Select
                dern = MyWbDest.Sheets(Onglet).Range("A" & Rows.Count).End(xlUp).Row
                If dern = 1 Then dern = 0
                MyWbDest.Sheets(Onglet).Range("a" & dern + 1).PasteSpecial
    suivant:
              Next mm
     
     
              col = col + 1
     
        Next aaaa
        End With
     
     
        MyWbDest.Close SaveChanges:=True
        MyWbActif.Activate
        Sheets("FichiersOK").Select
     
     
    Next i

  6. #6
    barpasc
    Invité(e)
    Par défaut réponse
    bonjour,

    le script n'est pas très fiable surtout les données source et destination. En fait, les cellules sont des objets qui appartiennent à des collections (feuilles).

    juste un exemple pour référencer presque entièrement un objet: thisworkbook.woksheets(1).range("A1") ou thiswokbook.worksheets.cells(1,1). il y a aussi un raccourci avec "with" par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    with thisworkbook
     .range("A1")
    end with
    là c'est sûre que les données sont copiées et que ce ne sont pas d'autres données d'un classeur qui n'a pas été crée ou qui n'est plus référencé.

    il faut remplacer thisworkbook avec workbooks("nomDuClasseur") ou indice du classeur et si il n'y a qu'un seul processus excel, s'il y a plusieurs processus en cours d'exécution, il faut préciser par application("indice du processus").workbooks ou le préciser tout en haut du code pour que la macro ne fonctionne qu'à l'intérieur du processus.

    aucuns liens avec l'actualité, c'esrt comme des poupées russes, il faut s'assurer que la macro a accès aux collections et aux objets à l'intérieur de celle ci sinon ça ne fonctionnera pas sauf avec l'indice application mais je crois qu'il faut un ordi assez robuste pour faire des macros interprocessus. en d'autres mots c'estt rare

Discussions similaires

  1. Message d'erreur "Cannot redeclare" inexpliqué
    Par moimp dans le forum Langage
    Réponses: 2
    Dernier message: 02/06/2017, 20h53
  2. [Vxi3] Message d'erreur inexpliqué
    Par coolmek dans le forum Webi
    Réponses: 1
    Dernier message: 19/04/2013, 15h54
  3. Réponses: 4
    Dernier message: 04/03/2003, 01h05
  4. [CR] Message d'erreur
    Par nono1 dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 11/09/2002, 14h54
  5. Réponses: 2
    Dernier message: 27/05/2002, 19h46

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