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 :

Plantage aléatoire copier-coller d'une macro [XL-2010]


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
    Utilisateur occasionnel de MySQL
    Inscrit en
    Décembre 2017
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Utilisateur occasionnel de MySQL

    Informations forums :
    Inscription : Décembre 2017
    Messages : 49
    Par défaut Plantage aléatoire copier-coller d'une macro
    Bonjour,

    J'ai une macro Excel développée depuis plusieurs années qui fonctionnait bien sous Excel2010 et Windows Seven. Depuis que j'ai migré sous Windows 10 je rencontre très fréquemment l'erreur 1004 : "Excel ne peut pas coller les données".

    Cette macro ouvre un fichier de trace Oziexplorer au format texte avec des virgules comme séparateur. Après suppression des 4 premières lignes, les colonnes A à C sont copiées. Ce fichier temporaire est fermé et les données sont collées dans une feuille nommée "Traitement_traces". C'est au collage de ces données que j'ai cette erreur aléatoire. Le contenu du presse papier est vide lorsque cette erreur apparaît.

    Voici cette macro

    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
    Sub Ajout_traces_plusieurs_fichiers_plt()
     
    Dim fichier_trace As String
    Dim c As Integer
     
    Sheets("Liste").Select
     
    Range("H3").Value = Range("H3").Value + 1
     
    c = Range("H3").Value
     
     Sheets("Traitement_traces").Select
     
    If c = 1 Then
     
        Columns("A:G").Select
        Selection.ClearContents
    End If
     
    Sheets("Liste").Select
     
    fichier_trace = Range("A" & c).Value & "\" & Range("B" & c).Value
     
          Workbooks.OpenText Filename:= _
            fichier_trace _
            , Origin:=xlWindows, StartRow:=1, DataType:=xlDelimited, TextQualifier _
            :=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:= _
            False, Comma:=True, Space:=False, Other:=False, FieldInfo:=Array(Array( _
            1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, _
            1), Array(9, 1), Array(10, 1)), TrailingMinusNumbers:=True
            Range("C7").Value = 1
        Rows("1:6").Select
        Selection.Delete Shift:=xlUp
     
     
        Columns("A:C").Select
        Selection.Copy
     
     
    Application.DisplayAlerts = False
     
    ActiveWindow.Close
     
    Worksheets("Traitement_traces").Select
     
        If c = 1 Then
     
        Range("E1").Value = Sheets("Liste").Range("B" & c).Value
     
        ActiveSheet.Paste Destination:=Worksheets("Traitement_traces").Range("A1")
        End If
     
        If c > 1 Then
     
        Range("A" & Rows.count).End(xlUp).Offset(1, 4) = Sheets("Liste").Range("B" & c).Value
     
     
         ActiveSheet.Paste Destination:=Worksheets("Traitement_traces").Range("A" & Rows.count).End(xlUp).Offset(1)
     
        End If
     
     
    End Sub
    J'ai remarqué que lorsque je lance cette macro Excel après redémarrage du PC sans autre logiciel ouvert, la macro en général se déroule correctement

    J'ai fait une recherche avec Google mais n'ai pas encore trouvé de cas similaires. L'historique du Presse papier n'est pas activé.

    Je vous remercie de votre aide

    Bernard

  2. #2
    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,

    une temporisation est peut-être nécessaire. En gros, là, tu fermerais le fichier avant que le presse papier ai reçu les éléments.


    juste après la ligne 37 de ton code, essaye de jouer sur une tempo à définir (ici c'est 2 secondes)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim Tempo As Long
        Tempo = 2
    Application.Wait (TimeSerial(Hour(Now), Minute(Now), Second(Now) + Tempo))

  3. #3
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Salut!

    Une autre manière de procéder

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Wait Now + TimeValue("00:00:02")

  4. #4
    Membre averti
    Homme Profil pro
    Utilisateur occasionnel de MySQL
    Inscrit en
    Décembre 2017
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Utilisateur occasionnel de MySQL

    Informations forums :
    Inscription : Décembre 2017
    Messages : 49
    Par défaut
    Bonjour,

    Je vous remercie de vos deux réponses, je viens d'essayer en introduisant cette temporisation juste après le copier des 3 colonnes, mais que ce soit l'une ou l'autre de ces instructions de temporisation à 2 secondes, la macro continue de générer cette erreur.

    Bonne fin d'après-midi

    Bernard

  5. #5
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Bonjour,

    1) En VBA, il faut éviter les .Select non indispensables (pratiquement tous).
    2) Lorsqu'on travaille avec plusieurs fichiers il faut préciser le Parent des feuilles
    3) Il n'est pas très logique de fermer le fichier avant d'avoir fait la copie.

    J'aurais écrit :
    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
    Sub Ajout_traces_plusieurs_fichiers_plt()
    Dim wb As Workbook
    Dim sh As Worksheet
    Dim fichier_trace As String
    Dim c As Integer
     
      Application.ScreenUpdating = False
      Set sh = ThisWorkbook.Worksheets("Traitement_traces")
      With ThisWorkbook.Worksheets("Liste")
        .Range("H3").Value = .Range("H3").Value + 1
        c = .Range("H3").Value
        If c = 1 Then sh.Columns("A:G").ClearContents
        fichier_trace = ThisWorkbook.Path & "\" & .Range("A" & c).Value & "\" & .Range("B" & c).Value
      End With
      Workbooks.OpenText Filename:=fichier_trace, Origin:=xlWindows, StartRow:=1, _
                         DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, Tab:=True, _
                         FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), _
                                          Array(6, 1), Array(7, 1), Array(8, 1), Array(9, 1), Array(10, 1)), _
                         TrailingMinusNumbers:=True
      Set wb = ActiveWorkbook
      With wb.Worksheets(1)
        .Rows("1:6").Delete Shift:=xlUp
        .Columns("D:E").Clear
        .Range("D1").Value = c
        .Range("E1").Value = ThisWorkbook.Worksheets("Liste").Range("B" & c).Value
        If c = 1 Then .UsedRange.Columns("A:E").Copy Destination:=sh.Range("A1")
        If c > 1 Then .UsedRange.Columns("A:E").Copy Destination:=sh.Range("A" & Rows.Count).End(xlUp).Offset(1)
      End With
      wb.Close False
     
    End Sub

  6. #6
    Membre averti
    Homme Profil pro
    Utilisateur occasionnel de MySQL
    Inscrit en
    Décembre 2017
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Utilisateur occasionnel de MySQL

    Informations forums :
    Inscription : Décembre 2017
    Messages : 49
    Par défaut
    Bonsoir Patrice,

    Je te remercie de ta réponse que je viens de mettre en œuvre en remplaçant ma macro par la tienne. J'ai simplement du retirer le chemin ThisWorkbook.Path & "\" & qui est contenu dans la cellule Range("A" & c).

    J'ai lancé plusieurs boucles, tout se déroule sans erreur, super !!!

    Un grand merci pour ton aide, ainsi qu'à toute la communauté qui répond à nos diverses sollicitations

    Bonne soirée

    Bernard

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

Discussions similaires

  1. Copier/coller dans une macro
    Par JadonScho dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 02/03/2019, 18h15
  2. [XL-2013] Copier Coller dans une macro.
    Par namora dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 17/04/2015, 12h27
  3. Macro copier coller dans une autre feuille
    Par olivverte dans le forum Excel
    Réponses: 23
    Dernier message: 17/12/2013, 15h35
  4. recherche dans une base de donnees; copier coller via une macro
    Par yannlvr dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/04/2010, 18h58
  5. chercher, copier et coller avec une macro
    Par sergio_gr66 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 01/12/2009, 16h35

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