Erreur 1004 aléatoire

Résolu
Wilhelm_Hort Messages postés 17 Date d'inscription   Statut Membre Dernière intervention   -  
Wilhelm_Hort Messages postés 17 Date d'inscription   Statut Membre Dernière intervention   -
Encore moi ^^

Toujours dans la saga "je cherche à finir ce *%*£# de système VBA, j'en suis sur le finish, mais là, c'est contrariant.

En gros, ma macro récupère une plage de 23 lignes de données dans chaque rapport, extension .xlsx, (à savoir que les 23 lignes ne sont pas forcément remplies, mais ensuite, j'efface les lignes vides), retourne dans mon fichier récapitulatif, et les colle ...

Mais, aléatoirement, de temps à autre, il me colle une erreur 1004, soit Paste, soit Select (désolé, je n'ai plus l'intitulé exact, il ne veut plus me reproduire la panne ^^)

Pour info, je suis sur Excel 2010.

Merci à tous pour votre patience ;)

Dim rapportlu As String
    
    rapportlu = Dir("C:\Users\MANIERY\Desktop\Rapports journaliers\*.xlsx")
    While Len(rapportlu) > 0
    
    'Annule toutes les alertes Excel
    Application.DisplayAlerts = False
    
    'Nom du fichier chargé'
    fichiercharge.Caption = rapportlu
    Me.Repaint
    
    On Error GoTo 0
    Workbooks.Open rapportlu
    Workbooks(rapportlu).Sheets("Visualisation").Range("A2:Q25").Copy
    Workbooks(rapportlu).Close
    Workbooks(recap).Activate
    Sheets("Production").Range("A" & k & ":Q" & k + 23).Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    
    'On réincrémente le compteur de lignes du maximum d'occurences possibles'
    k = k + 23
    
    'Restaure l'affichage des Alertes
    Application.DisplayAlerts = True

    rapportlu = Dir
    Wend


EDIT: Précision du langage dans la coloration syntaxique.

2 réponses

f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
Bonjour,

la variable k est definie ou et a quelle valeur de depart
0
Wilhelm_Hort Messages postés 17 Date d'inscription   Statut Membre Dernière intervention  
 
Définie au début en Integer, et valeur de 1 au départ (je n'ai pas fait la copie de tout le sub, pour faciliter votre lecture)

PS : désolé de la réponse tardive ;)
0
f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713 > Wilhelm_Hort Messages postés 17 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour,

Si l'erreur se represente, clic sur debugage, passez le curseur souris sur la variable k pour voir son contenu.
0
Wilhelm_Hort Messages postés 17 Date d'inscription   Statut Membre Dernière intervention  
 
Là, je viens d'avoir l'erreur sur une valeur de 7 ... c'est complètement aléatoire. Genre, pendant une dizaine de lancers de la macro, aucun souci, et d'un coup, il plante ...

Le "On Error Next", ça pourrait faire quelque chose ?
0
f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713 > Wilhelm_Hort Messages postés 17 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour,

Non, il vaut mieux traiter l'erreur, avec ce code devrait aller. Si toujours l'erreur, il faudra mettre une temporisation entre deux ouvertures de fichier, mais essayez ceci:

Par contre si classeur Recap n'est pas le classeur du code VBA, modifiez la ligne de copy

Dim rapportlu As String
    
    'rapportlu = Dir("D:\_ACSV1\*.xlsx")
    rapportlu = Dir("C:\Users\MANIERY\Desktop\Rapports journaliers\*.xlsx")
        k = 1
    While rapportlu <> ""
        'Annule toutes les alertes Excel
        Application.DisplayAlerts = False
        Application.ScreenUpdating = False
        'Nom du fichier chargé'
        'fichiercharge.Caption = rapportlu
        'Me.Repaint
    
        'On Error GoTo 0 ' ????????????????????????????????????
    
        Workbooks.Open rapportlu
        Workbooks(rapportlu).Sheets("feuil1").Range("A2:Q25").Copy ThisWorkbook.Sheets("Production").Range("A" & k & ":Q" & k + 23)
        Workbooks(rapportlu).Close
        'On réincrémente le compteur de lignes du maximum d'occurences possibles'
        k = k + 25      'pourquoi 23 ???????????? vous ecrasez des lignes
    
        'Restaure l'affichage des Alertes
        rapportlu = Dir
    Wend
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
0
Wilhelm_Hort Messages postés 17 Date d'inscription   Statut Membre Dernière intervention   > f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention  
 
Malheureusement, la méthode du Copy de cette manière (avec la destination incluse dans la même commande) ne fonctionne pas, recopiant les formules et non les valeurs (j'aurais aussi pu le préciser ^^)

En gros, on pioche dans les rapports lus des valeurs synthétisées dans l'onglet "Visualisation". Le nombre d'occurrences ne dépasse jamais 23 d'où l'incrémentation de 23 à chaque boucle.

Il me faut donc une propriété spéciale pour la copie des valeurs uniquement. Un specialpaste ?

Le "On Error Goto 0", je l'ai passé en "Resume Next", pour justement sauter les erreurs ^^
Cependant, cette méthode de Copy semble augmenter la rapidité d'execution de la commande.
0
f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
Bonjour,

Le "On Error Goto 0", je l'ai passé en "Resume Next" De quelle erreur parlez-vous ???????????????????????

copie valeurs, inverser les membres du egal voir code

si 23 lignes a copier: Range("A2:Q24") pas 25

Sub test()
    Dim rapportlu As String
    
    'ChDrive ("D")
    'ChDir ("D:\_ACSV1")
    'rapportlu = Dir("D:\_ACSV1\*.xlsx")
    rapportlu = Dir("C:\Users\MANIERY\Desktop\Rapports journaliers\*.xlsx")
        k = 1
    While rapportlu <> ""
        'Annule toutes les alertes Excel
        Application.DisplayAlerts = False
        Application.ScreenUpdating = False
        'Nom du fichier chargé'
        fichiercharge.Caption = rapportlu
        Me.Repaint
    
        Workbooks.Open rapportlu
        ThisWorkbook.Sheets("Production").Range("A" & k & ":Q" & k + 22) = Workbooks(rapportlu).Sheets("feuil1").Range("A2:Q24").Value
        Workbooks(rapportlu).Close
        'On réincrémente le compteur de lignes du maximum d'occurences possibles'
        k = k + 23
    
        'Restaure l'affichage des Alertes
        rapportlu = Dir
    Wend
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
End Sub
0
Wilhelm_Hort Messages postés 17 Date d'inscription   Statut Membre Dernière intervention  
 
Ouah !!! Purée, la vitesse d'execution de ta macro !

Franchement nickel, c'est exactement ça. Mille mercis pour ton aide, camarade ! Je passe en résolu
0