copy de donnée d'une feuille à une autre et fichier qui grossit considérablement

nath009

XLDnaute Nouveau
Bonjour,

C'est un classeur pour la facturation.

J'ai une feuille Ventilation et Une autre Recap.
La feuille ventilation présente les données classées par collaborateurs, les colonnes sont remplies jusqu'à AB
La feuille recap présente les données classées par contrat.Certaines colonnes sont cachée par rapport à la feuille ventilation.

j'ai environ une centaines de lignes.
Lorsque je change une donnée dans la feuille Recap,puis, lorsque je passe à la feuille ventilation, les données sont recopiées et inversément.

Alors si je fais cela 2-3 fois cela se fait rapidement, mais si je le fais 10 fois, Excel devient un gros escargot, de plus mon fichier grossit à vu d'oeil.

Est-ce qq saurait ce que je peux faire? Je commence à désespérer :(

Voici la macro faisait cela :

Code:
Public Sub copieRecapVersVentil()
Dim intDerniereLigne As Integer
Dim intDerniereLigneVentil As Integer
Dim strFormuleCol5 As String

'On Error GoTo traitement_erreur

    Application.EnableEvents = False
    Application.ScreenUpdating = False
    Application.StatusBar = "Début de la copie des données de la feuille Recap vers ventilation"
    
    WsVentilation.Unprotect
    
    WsRecap.Columns("A:B").Copy
    WsVentilation.Columns("C:D").PasteSpecial Paste:=xlPasteAll
    
    WsRecap.Columns("C:D").Copy
    WsVentilation.Columns("A:B").PasteSpecial Paste:=xlPasteAll

    WsRecap.Columns("E:AC").Copy
    WsVentilation.Columns("E:AC").PasteSpecial Paste:=xlPasteAll
    
    Application.CutCopyMode = False
    ClasseVentilParContrat
    WsVentilation.Protect
    
    Application.StatusBar = "Fin de la copie des données de la feuille Recap vers ventilation"

    gbRecapChange = False
    gbVentilChange = False
    
    'DefinitComportementVentilation (gIntModeUtilisation)
        
    Application.EnableEvents = True
    Application.ScreenUpdating = True
    Application.StatusBar = ""
    
    Exit Sub
    
traitement_erreur:
   MsgBox "N° erreur:" & err.Number & vbLf & err.Description, vbCritical + vbOKOnly, "copieRecapVersVentil"
    Application.EnableEvents = True
    Application.ScreenUpdating = True
    WsVentilation.Protect
    WsRecap.Protect

   

End Sub

merci d'avance

Nath
 

smotty

XLDnaute Occasionnel
Re : copy de donnée d'une feuille à une autre et fichier qui grossit considérablement

Bonsoir,

je viens de voir que le fil était revenu

Les formules matricielles sont dévoreuses de mémoire. Je ne sais pas combien de fois elle se répète mais je préfère utiliser la fonction:

SOMME.SI.ENS(plage somme;plage critère1;critère1; etc...)

s'entre comme une formule normale.

(voir ce que ça donne en anglais en enregistrant une macro)

7 fois plus rapide selon mes dernières expériences.

Il est tard, je repasserai

J'ai vérifié, cette fonction s'écrira: =SUMIFS(plagesomme,plagecritère1,critère1,plagecritère2,critère2 etc...)

met en mode calcul manuel (je n'ai pas vérifié si tu l'as mis) avant d'effectuer la copie avec:

application.Calculation=xlCalculationManual

sans oublier de repasser en mode auto

application.Calculation=xlCalculationManual

De plus, comme tu utilises l'évènement sheet_deactivate, vérifie avec des debug.print placés aux bons endroits, si l'évènement ne se répète pas plus qu'il ne le devrait. (copie qui déclanche une autre copie qui déclanche une autre copie etc...) ce qui ferait gonfler la taille du fichier. D'ailleurs, plus j'y pense, plus je me dit que ça doit venir de là... Comme je ne risque rien, j'en mettrai ma main au feu.

Voir l'exemple en fichier joint qui reprend le principe mais dans les grandes lignes uniquement. J'utilise des variable booeleennes "public", les évènements worsheet_change sur feuil1 et feuil2 et sheet_deactivate dans thisworkbook.
Juste pour attirer ton attention sur le procédé utilisé.

J'espère que ça va aider




A+

smotty
 

Pièces jointes

  • Exemple.zip
    14.5 KB · Affichages: 19
  • Exemple.zip
    14.5 KB · Affichages: 21
  • Exemple.zip
    14.5 KB · Affichages: 19
Dernière édition:

smotty

XLDnaute Occasionnel
Re : copy de donnée d'une feuille à une autre et fichier qui grossit considérablement

Bonjour à tous,

Je me permets de revenir sur ce fil car j'ai pensé à une chose.

Une procédure A qui appelle une autre procédure B n'attends pas que la procédure B appelée soit terminée pour continuer.
Il est donc parfois utile d'attendre que la procédure B soit terminée.

Code:
If Sh.Name = WsVentilation.Name Then ' passage de feullie Ventil sur feuille Recap
        If Not gbVentilChange Then GoTo Sort_Workbook_SheetChange
        copieVentilVersRecap
    Else                    ' passage de feuille recap vers feuille Ventilation
        If Not gbRecapChange Then GoTo Sort_Workbook_SheetChange
        copieRecapVersVentil
    End If
    
    'Sortie obligatoire ========================
Sort_Workbook_SheetChange:
        Application.ScreenUpdating = True
        Application.EnableEvents = True
        Exit Sub
    'Traitement des erreurs =====================
Err_Workbook_SheetChange:
        MsgBox "N° erreur:" & err.Number & vbLf & err.Description, vbCritical + vbOKOnly, "Workbook_SheetActivate"
        Resume Sort_Workbook_SheetChange

Ici les 2 procédures copieVentilVersRecap et copieRecapVersVentil ne sont certainement pas terminée quand screenupdating et EnableEvents repasse à true.

Une solution parmi tant d'autres: utiliser une variable public booleenne qu'on passe à true à la fin de la procédure appeleée:

Code:
blContinue=false
copieVentilVersRecap 
do 
loop while blcontinue=false

Voilà une idée qui m'est venue qui peut éviter bien des soucis

A+

smotty
 
C

Compte Supprimé 979

Guest
Re : copy de donnée d'une feuille à une autre et fichier qui grossit considérablement

Bonjour le fil

Une procédure A qui appelle une autre procédure B n'attends pas que la procédure B appelée soit terminée pour continuer
Ah bon ! et depuis quand :confused:

On ne m'a pas mis au courant ... bon diou de bon diou ...

N'importe nawak
ptdr.gif
 

smotty

XLDnaute Occasionnel
Re : copy de donnée d'une feuille à une autre et fichier qui grossit considérablement

:eek:Et dire que toutes ces années j'étais persuadé qu'en vba une procédure n'attendait pas que la procédure appelée soit terminée.

Quand je pense à la compilation du programme, effectivement c'est con.:rolleyes:

Je viens de fouiller dans le livre que je pensais être à l'origine de cette idée, finalement, ce sont mes souvenirs qui se sont détériorés.

Autant pour moi...:D
 

Discussions similaires

Statistiques des forums

Discussions
312 215
Messages
2 086 324
Membres
103 178
dernier inscrit
BERSEB50