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
 
C

Compte Supprimé 979

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

Bonjour Nath009,

mais si je le fais 10 fois, Excel devient un gros escargot, de plus mon fichier grossit à vu d'oeil.
Ca me parait assez logique, dans le fait que tu copies/colles des colonnes entière.
Tu devrais chercher la dernière ligne remplie et copier juste la zone de la première ligne à la dernière
Code:
    ' Récupérer la dernière ligne remplie de la feuille Récap
    DerLig = WsRecap.Range("A" & Rows.Count).End(xlUp)
    
    WsVentilation.Unprotect
    WsRecap.Range("A1:B" & DerLig).Copy Destination:=WsVentilation.Range("C1")
    WsRecap.Range("C1:D" & DerLig).Copy Destination:=WsVentilation.Range("A1")
    WsRecap.Range("E1:AC" & DerLig).Copy Destination:=WsVentilation.Range("E1")

Sinon essaye cette macro de nettoyage pour voir si ton fichier se réduit ;)

A+
 

Pièces jointes

  • NettoyageClasseur.xls
    28 KB · Affichages: 248
  • NettoyageClasseur.xls
    28 KB · Affichages: 241
  • NettoyageClasseur.xls
    28 KB · Affichages: 241

nath009

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

merci pour ta réponse, je sais vraiement plus quoi faire..

même si je recopie que jusqu'à la dernière ligne, il grossit enormément aussi...
J'ai aussi essayé en copiant cellule par cellule, c'est la même chose...:confused:

Merci pour la macro, effectivement cela réduit la taille de mon fichier mais c'est pas vraiment une solution , vu que ce traitement mets du temps et vu que, l'utilisateur passe d'une feuille à l'autre et donc fait exécuter cette macro un certain nombre de fois..
En fait le temps est déjà trop long après avoir exécuter la macro 4 fois....:eek:

Mais pourquoi il grossit au temps, à recopier 80 lignes??????? C'est pas grd chose 80 lignes....c'est meme rien du tout pour un fichier informatique...
IL fout quoi Excel dans son micmac interne?:mad:
 
C

Compte Supprimé 979

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

Re,

Pour pouvoir étudier ton problème il faudrait essayer de mettre le fichier sur un site de téléchargement : Cijoint, Dlfree, etc ...

A+
 

nath009

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

en fait depuis que j'ai effectué le nettoyage avec ta macro, je n'ai plus de problème.....Je comprends vraiemnt rien à cela, mais cela fonctionne et c'est le principal !!!

merci vraiment bcp, tu me sauves la vie et celle de mes collègues aussi et celle de mon pc egalement ! :D
 
C

Compte Supprimé 979

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

Re,

Ne t'inquiète pas Nath009 ;)
C'est un problème que nous rencontrons tous avec Excel :rolleyes:

Quand un fichier grossi énormément, 2 possibilités :
1) c'est qu'Excel mémorise les cellules contenant des formats (nombre, alignement, police ,etc ...)
Dans ce cas, il suffit de faire un petit nettoyage et c'est reparti ... :D

2) le fichier est endommagé et là, le nettoyage ne sert à rien
Il faut faire du copier/collage spécial de valeurs uniquement dans un nouveau fichier ... avant l'xplosion du fichier

A+
 

nath009

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

le problème est revenu :mad:

Est-ce que d'autres rencontres des problèmes à recopier des plages de données d'une feuille vers une autre?

je recopie environ 80 ligne sur 30 colonnes.
 

nath009

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

pas tout a fait le mien est :

Code:
WsSource.Range("E6:AC" & intDerniereLigne).Copy
    WsDestination.Range("E6:AC" & intDerniereLigne).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False

mais là je l'ai modifié pour qu'il corresponde au tien.

En fait je me demandais si il fallait ne pas faire trop de modif , du genre passé 20 fois d'une feuille à l'autre et donc exécuter la macro de recopie 20 fois sans faire de Save.

Car une fois que nous faisons manuellement le save, ptetre qu'Excel annule un enregistrement interne qu'il ferait, celui qui fait que lorsque Excel se ferme inopément ,puis s'ouvre à nouveau, une autre version plus récente nous est proposée que celle que nous avons enregistré dernièrement.

Car j'ai remarqué que si Excel prenait du poids, des fois il en perds aussi..
 
C

Compte Supprimé 979

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

Salut Nath009,

celui qui fait que lorsque Excel se ferme inopément ,puis s'ouvre à nouveau
ATTENTION !
Là, nous ne parlons plus de la même chose ... il s'agit d'un plantage d'Excel ...
Ce qui à souvent pour conséquence d'abimer le fichier :(

Et un fichier abimé, grossit effectivement tout seul de façon démesuré
et finit par exploser (le fichier excel est corrompu, impossible de l'ouvrir ...)

Je serais toi, je repartirai d'un fichier vierge.

Par contre, ça peut demander beaucoup de boulot ...
car il faut copier les données, faire un collage spécial -> valeur
dans le nouveau classeur vierge et donc parfois remettre en forme tous les tableaux :eek:

A+
 

nath009

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

non mon fichier n'a pas planté j eme demandais jsute pourquoi il pouvait grossir autant. Et je me disais que le récupération des données pouvait être une raison !
 

smotty

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

Bonjour,

Je passais par là...

Quelles procédure évènementielle utilises-tu pour lancer la macro? n'ya t'il pas un moment où elle se répète plusieurs fois d'une feuille à l'autre du fait de copier les éléments?

Les cellules qui sont copiées contiennent-elles des liens ou des formules plus ou moins complexes?

ça pourrait selon moi, à force d'échange créer des soucis.

Bref ça me parrait être une surcharge de la mémoire (raisons ci-dessus possibles).

Sans voir le fichier c'est difficile d'en dire plus

essaie de mettre un debug.print dans ta procédure ou un msgbox afin de voir s'il y a répétition

En espérant avoir aiguillé la recherche:(

Smotty
 
Dernière édition:

nath009

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

pfffff les problèmes reviennent..... On en finit jamais :

j'utilise Workbook_SheetDeactivate

Code:
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)


    On Error GoTo Err_Workbook_SheetChange
    
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    
    ' active ou désactive le menu insertion en fonction de la feuille active
    If Not objRuban Is Nothing Then objRuban.InvalidateControl "Insertion" ' voir module Config get_Visible_Insertion / InitializeApp / RubanCharge
                                                                            ' le ruban est construit grace à Custom UI Editor for Microsoft
    
    'Déclaration ===============================
    Dim Plg As Range
    Dim Cel As Range
    
    'Validité ==================================
    If (Sh.Name <> WsVentilation.Name And Sh.Name <> WsRecap.Name) Then GoTo Sort_Workbook_SheetChange
    
    'Traitement ================================
    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

End Sub

Code:
Public Sub copieVentilVersRecap()
    copieSourceVersDestination WsVentilation, WsRecap
End Sub

Code:
'============================================================================
'
'   copieSourceVersDestination
'
'   Copie les données d'une feuille à l'autre
'
'    A utiliser sur les feuille recap et Ventil
'
'============================================================================


Public Sub copieSourceVersDestination(WsSource As Worksheet, WsDestination As Worksheet)
Dim intDerniereLigne As Integer
Dim intDerniereLigneDestination As Integer


'On Error GoTo traitement_erreur

    intDerniereLigne = WsSource.Range("AC65536").End(xlUp).Row + 1
    intDerniereLigneDestination = WsDestination.Range("AC65536").End(xlUp).Row + 1
    
    ClearClipboard
    WsDestination.Unprotect
    
    Application.StatusBar = "Début de la copie des données"
    'Copie des données=======================================
    
    WsSource.Range("A6:B" & intDerniereLigne).Copy WsDestination.Range("C6")
    Application.CutCopyMode = False
   
    
    WsSource.Range("C6:D" & intDerniereLigne).Copy WsDestination.Range("A6")
    Application.CutCopyMode = False

    Application.StatusBar = "Copie des données"
    WsSource.Range("E6:AC" & intDerniereLigne).Copy WsDestination.Range("E6")
    Application.CutCopyMode = False
    
    Application.StatusBar = "Fin de la copie des données"
     
     'Efface lignes si besoin =======================================
    If intDerniereLigne < intDerniereLigneDestination Then
        WsDestination.Rows(intDerniereLigne + 1 & ":" & intDerniereLigneDestination).Delete xlUp
    End If
    
    gbRecapChange = False
    gbVentilChange = False
    
    
    WsDestination.Protect
    Application.StatusBar = ""
    ClearClipboard
    
    Exit Sub
    
traitement_erreur:
   MsgBox "N° erreur:" & err.Number & vbLf & err.Description, vbCritical + vbOKOnly, "copieSourceVersDestination"
    Application.EnableEvents = True
    Application.ScreenUpdating = True
    Application.StatusBar = ""
    WsDestination.Protect
    

End Sub

puis sur Worksheet_Activate

Code:
Private Sub Worksheet_Activate()

    Application.ScreenUpdating = False
    Application.EnableEvents = False
    
    ClasseVentilParCollabo
    WsVentilation.Range("A1").Select
    
    Application.ScreenUpdating = True
    Application.EnableEvents = True
End Sub

Code:
Public Sub ClasseVentilParCollabo()
Dim intDerniereLigne As Integer

    WsVentilation.Unprotect
    intDerniereLigne = WsVentilation.Cells(Columns(COL_DERNIERE).Cells.Count, COL_DERNIERE).End(xlUp).Row
    WsVentilation.Range("A7:AC" & intDerniereLigne).Sort Key1:=Range("A7:A" & intDerniereLigne), Order1:=xlAscending, Orientation:=xlTopToBottom
    WsVentilation.Protect
    
End Sub


une ptite question bonus, vous le trouvez cliar mon code? Car pour moi bien sûr qu'il l'est :D
 

nath009

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

voici la formule la plus "compliquée"

{=IF(A50=A49;"";SUM(IF(VentilListeCollabo=$A50;VentilListeCollaboPot)))}

qui est une formule matricielle.

Mais sinon mes procédures ne se répètent pas, comme je mets un application.enabledEvents = false au début de mes procédures.

Merci pour ton aide
Sinon j'ai posté dans mon dernier msg, le code qui séexécute lorsqu'on passe d'une feuille vers l'autre.

Bonjour,

Je passais par là...

Quelles procédure évènementielle utilises-tu pour lancer la macro? n'ya t'il pas un moment où elle se répète plusieurs fois d'une feuille à l'autre du fait de copier les éléments?

Les cellules qui sont copiées contiennent-elles des liens ou des formules plus ou moins complexes?

ça pourrait selon moi, à force d'échange créer des soucis.

Bref ça me parrait être une surcharge de la mémoire (raisons ci-dessus possibles).

Sans voir le fichier c'est difficile d'en dire plus

essaie de mettre un debug.print dans ta procédure ou un msgbox afin de voir s'il y a répétition

En espérant avoir aiguillé la recherche:(

Smotty
 

Discussions similaires

Statistiques des forums

Discussions
312 211
Messages
2 086 299
Membres
103 173
dernier inscrit
Cerba95