XL 2016 Une erreur qui n'en est pas une...

GeoTrouvePas

XLDnaute Impliqué
Bonjour tout le monde,

Je tourne depuis ce matin sur ce problème.
Voici une macro qui fonctionne très bien mais qui affiche régulièrement un message de type "Execution interrompue" :
Code:
    Set FichierBdD = Workbooks.Add(Template:=(CheminBdD))
    For Each FeuilleSource In FichierBdD.Worksheets
        Select Case FeuilleSource.Name
        Case "MP - Budget", "MP - Conso", "MdO - Budget", "MdO - Conso", "MdO - Salaires"
            ThisWorkbook.Sheets(FeuilleSource.Name).Cells.ClearContents
            FeuilleSource.Cells.Copy
            ThisWorkbook.Sheets(FeuilleSource.Name).Cells(1, 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
            Call ViderPressePapier
        End Select
    Next

L'erreur s'affiche sur la ligne "For Each FeuilleSource In FichierBdD.Worksheets"

Alors ce n'est pas vraiment une erreur puisqu'il suffit de cliquer sur le bouton "Continuer" qui n'est pas grisé dans ce cas. Mais j'aimerai tout de même que mon code s'exécute correctement et que les utilisateurs cessent de me dire que "ça bug tout le temps ton truc" :D:D:D.

Auriez vous une idée pour solutionner ce problème ?
 

Roland_M

XLDnaute Barbatruc
Bonjour,

as-tu mis ceci !?:
Dim FeuilleSource As Worksheet
Dim FichierBdD As Variant

bien que perso j'ai fait un essai et ça fonctionne !?

EDIT:
essaies entre ces deux lignes de mette DoEvents, comme ceci:
Set FichierBdD = Workbooks.Add(Template:=(CheminBdD))
DoEvents' < ceci laisse le temps de finir les exécutions en cours avant de poursuivre
For Each FeuilleSource In FichierBdD.Worksheets
 
Dernière édition:

GeoTrouvePas

XLDnaute Impliqué
Bonjour @Roland_M et merci pour ta réponse.

Oui j'ai bien effectué mes déclarations et l'utilisation d'un Do Events ne change rien.

Plus je fais de tests, plus je me dis que c'est un soucis de type "utilisation de mémoire". Le copier coller de feuilles est plutôt gourmand en mémoire et mon erreur n'apparaît qu'après plusieurs exécutions et disparaît après un redémarrage complet du pc.

L'embêtant c'est que je ne vois absolument pas comment je pourrais consommer moins de mémoire ou la vider en cours d'exécution.
 

GeoTrouvePas

XLDnaute Impliqué
Petit complément :

J'arrive même à obtenir ce genre d'erreur sur une petite macro de ce genre (le blocage se fait sur If VarChemin <> False alors qu'il n'y a aucune erreur) :

Code:
Private Sub CommandButton2_Click()
    Dim VarChemin As Variant
    VarChemin = Application.GetOpenFilename
    If VarChemin <> False Then ThisWorkbook.Sheets("Administration").Range("Plage_CheminBdD") = VarChemin
End Sub
 

GeoTrouvePas

XLDnaute Impliqué
@Roland_M
Effectivement je n'y pense jamais.
Je fais toujours attention à ne pas donner une portée trop important à mes variables histoire de ne pas saturer la mémoire mais je ne pense pas forcément à utiliser le Set Ws = Nothing.

Je rage depuis ce matin sur une macro qui parcours un tableau pour supprimer les lignes (environ 3000) et colonnes (environ 500) vides.
En utilisant "columns(Cptr).delete", j'ai l'impression que cela bouffe une mémoire pas croyable et j'ai droit à une erreur à chaque changement de colonne. Autant dire que ça me fait perdre un temps phénoménal.
 

Roland_M

XLDnaute Barbatruc
Bonjour,
tout dépend comment tu t'y prends !?
si tu boucles avec des tests effectivement ça peut prendre du temps !

là aussi:
avant démarrage de ta fonction tu dois mettre impérativement:
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False

que tu re mettras à la fin de ta macro:
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True

et dans ta boucle mettre: Doevents

et là crois moi que ça va te changer !
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 105
Messages
2 085 350
Membres
102 870
dernier inscrit
Armisa