OVH Cloud OVH Cloud

mon fichier a plus que doublé !

4 réponses
Avatar
André
Bonjour à tous

2 questions en une si vous le permettez...

J'ai fait un logiciel avec des macros et l'ai distribué dans différentes
villes..
puis je le mets à jour périodiquement chez moi...
j'ai donc ajouté qq macros mais très peu

je récupère un des anciens déjà en utilisation et il fait 1200 ko (je
n'avais pas noté ça)
je viens de me rendre compte que le mien fait maintenant 3200 ko !!!
Ils fonctionnent tous les deux parfaitement...!!!

je ne vois rien d'accroché au mien Que peut il se passer ?

2°) Malgré que VBA soit un interptétateur, je vois qu'on peut compiler les
macros et ça va plus vite..
mais que veut dire "arguments conditionnels de compilation" dans la boite
de dialogue propriétés de VBA :
J'ai dans mes macro une passe conditionnelle #if# fonction de la plateforme
sur laquelle mon logiciel tourne..
Cette condition est elle bloquée sur la configuration de ma plateforme si je
compile puis distribue ?

j'éspère etre assez clair mais va savoir...

En tous cas merci d'avance et Une noix d'honneur à qui me dépannera... Merci

4 réponses

Avatar
MichDenis
Bonjour André,

Une réponse que j'ai déjà donnée ici :


Excel à la méchante habitude de conserver en mémoire comme la plage de cellules utilisée, la cellule A1 et la cellule la
plus éloignée dans laquelle tu as pu placé une information ou une formule. Si par exemple, tu effaces le contenu des
dernières lignes ou les dernières colonnes en trop parce que tu les as utilisées par exemple pour tester des trucs, des
expériences de toutes sortes ou simplement parce que tu avais des données désuètes , pour excel, l'étendue des cellules
qu'il garde en mémoire demeure la même. En excel, comme dans les autres logiciels, le texte (contenu des cellules), les
formules ou un module de code (macros), ne prennent pas beaucoup d'espace mémoire, mais la grandeur de la plage de
cellules que tu utilises dans chacune des feuilles requiert beaucoup d'espace. Comme excel conserve les lignes et les
colonnes en mémoire qui ne servent plus à rien parce qu'elles sont vides, tu peux te retrouver avec un gros fichier même
si le contenu est très limité.

Pour solutionner le problème des fichiers obèses, il s'agit de supprimer obligatoirement à l'aide de la commande du menu
édition / supprimer (à ne pas confondre avec le fait d'effacer le contenu des cellules), en sélectionnant dans toutes
les dernières lignes complètes et les dernières colonnes complètes qui contenaient des informations et qui n'en
contiennent plus et en utilisant la commande suggérée "Supprimer" . Tu peut faire la manoeuvre manuellement ou tu peux
utiliser la macro suivante.

Tu copies cette macro dans un module standard et tu l'exécutes.
Cela devrait faire le travail pour toutes les feuilles de ton classeur.

Cette macro est inspirée de celle de jacxl ...

'-------------------------------
Sub ménage()
Dim sh As WorkSheet
On Error Resume Next
For Each sh In Worksheets


sh.Range(sh.Cells.SpecialCells( _
xlCellTypeLastCell).EntireRow, _
sh.Cells.Find("*", , xlFormulas, _
, xlByRows, xlPrevious).EntireRow) _
.Offset(1, 0).Delete

sh.Range(sh.Cells.SpecialCells( _
xlCellTypeLastCell).EntireColumn, _
sh.Cells.Find("*", , xlFormulas, _
, xlByColumns, xlPrevious). _
EntireColumn).Offset(0, 1).Delete
Next
ActiveWorkbook.Save
Set Sh = Nothing
End Sub
'-----------------------------------------





En supplément,

Lorsque tu élabores ton classeur, si tu veux faire des expériences ( peu importe la nature) c'est une très mauvaise idée
d'utiliser les "Scrollbar" (les ascenseurs) et effectuer tes test en bas ou à droite de ta zone de travail. Lorsque tu
effaces les données de ton test, tu pourrais oublier quelques cellules qui ont par exemple seulement un espace (fait pas
la barre d'espacement) ou une formule qui retourne "", donc non visible à l'oeil, et, cela pourrait être suffisant pour
rendre certaines macros inopérantes à cause de cela. Il n'est pas facile par la suite de trouver pourquoi certaines
macros ne donnent pas le résultat attendu. IL est très important de protéger l'espace de travail de sa feuille de toutes
données indésirables que l'on ne désire pas conserver. Tu es mieux d'utiliser une feuille destinée spécialement à ça.
Quand ton classeur est terminé, Tu supprimes cette feuille. C'est beaucoup plus sécuritaire.

À cet égard, si la macro sur les fichiers obèses ne donnent pas un bon résultat , et, que tu as fait toutes sortes
d'expériences comme décrit ci-haut, il se peut qu'à cause de certaines cellules qui ne sont pas complètement vides que
la macro ne fonctionne pas correctement. Il faudra que tu utilises la commande "Supprimer" pour supprimer toutes les
lignes et colonnes devenues inutiles.







Salutations!




"André" <andré@aol.com> a écrit dans le message de news:
Bonjour à tous

2 questions en une si vous le permettez...

J'ai fait un logiciel avec des macros et l'ai distribué dans différentes
villes..
puis je le mets à jour périodiquement chez moi...
j'ai donc ajouté qq macros mais très peu

je récupère un des anciens déjà en utilisation et il fait 1200 ko (je
n'avais pas noté ça)
je viens de me rendre compte que le mien fait maintenant 3200 ko !!!
Ils fonctionnent tous les deux parfaitement...!!!

je ne vois rien d'accroché au mien Que peut il se passer ?

2°) Malgré que VBA soit un interptétateur, je vois qu'on peut compiler les
macros et ça va plus vite..
mais que veut dire "arguments conditionnels de compilation" dans la boite
de dialogue propriétés de VBA :
J'ai dans mes macro une passe conditionnelle #if# fonction de la plateforme
sur laquelle mon logiciel tourne..
Cette condition est elle bloquée sur la configuration de ma plateforme si je
compile puis distribue ?

j'éspère etre assez clair mais va savoir...

En tous cas merci d'avance et Une noix d'honneur à qui me dépannera... Merci
Avatar
Clément Marcotte
Bonjour,

j'ai donc ajouté qq macros mais très peu
je récupère un des anciens déjà en utilisation et il fait 1200 ko
(je

n'avais pas noté ça)
je viens de me rendre compte que le mien fait maintenant 3200 ko !!!
Ils fonctionnent tous les deux parfaitement...!!!

je ne vois rien d'accroché au mien Que peut il se passer ?


Cela arrive souvent dans des classeurs avec des macros.

Il a peut-être quelque chose là-dessus dans Excelabo.

Il y a aussi VBA Clode Cleaner de Rob Bovey:

http://www.bmsltd.ie/MVP/Default.htm

Vers le bas de la page

2°) Malgré que VBA soit un interptétateur, je vois qu'on peut
compiler les macros et ça va plus vite..


En fait, la "compilation" demeure une compilation strictement
"interne" et ne génère pas d'exécutable.

Tu pourrais envisager, d'utiliser un vrai langage compilé et piloter
Excel par automation, mais je ne suis pas convaincu que que ce serait
un meilleur choix. Personnellement, je trouve que la combinaison
VB6-Excel 2002 donne des applications fragiles. (Pour d'autres
langages, ou d'autres version de VB, et d'Excel, je ne sais pas). De
plus, dès que tu pilotes Excel en mode "invisible", tu dois tuer Excel
en passant par l'API à la fin. Puis Automation demande beaucoup de
ressources, et il est préférable d'avoir beaucoup de mémoire.

D'un autre côté, VB-VisualStudio vien avec plusieurs contrôles de type
"grille". Sauf que tu dois tout programmer. Mais là, tu aurais
probablement une application plus stable.

Avatar
André
Mon cher Michel Denis
Merci de toutes tes explications, j'ai installé ton code mais... n'ai obtenu
aucun résultat
j'avais d'ailleurs moi meme codé un controle visuel de la surface couverte
par User.range je ne sais si ça fait le mm effet que ton code...(toutes les
feuilles sont présentées avec la zone sélectionnée et le zoom au maxi.. il
n'y a rien d'anormal signalé..

J'ai pris le logiciel le plus leger et ai copié tout le code (feuills,
dialog, modules du plus gros
a la sauvegarde, le fichier est toujours le plus petit (60% pls petit!!)

peut etre faudra t il supprimer les lignes et colonnes blanches en partant
des dernieres..
si j'ai bien compris c'est un probleme de vide ou null...

merci tout de m^me André


Bonjour André,

Une réponse que j'ai déjà donnée ici :


Excel à la méchante habitude de conserver en mémoire comme la plage de cellules utilisée, la cellule A1 et la cellule la
plus éloignée dans laquelle tu as pu placé une information ou une formule. Si par exemple, tu effaces le contenu des
dernières lignes ou les dernières colonnes en trop parce que tu les as utilisées par exemple pour tester des trucs, des
expériences de toutes sortes ou simplement parce que tu avais des données désuètes , pour excel, l'étendue des cellules
qu'il garde en mémoire demeure la même. En excel, comme dans les autres logiciels, le texte (contenu des cellules), les
formules ou un module de code (macros), ne prennent pas beaucoup d'espace mémoire, mais la grandeur de la plage de
cellules que tu utilises dans chacune des feuilles requiert beaucoup d'espace. Comme excel conserve les lignes et les
colonnes en mémoire qui ne servent plus à rien parce qu'elles sont vides, tu peux te retrouver avec un gros fichier même
si le contenu est très limité.

Pour solutionner le problème des fichiers obèses, il s'agit de supprimer obligatoirement à l'aide de la commande du menu
édition / supprimer (à ne pas confondre avec le fait d'effacer le contenu des cellules), en sélectionnant dans toutes
les dernières lignes complètes et les dernières colonnes complètes qui contenaient des informations et qui n'en
contiennent plus et en utilisant la commande suggérée "Supprimer" . Tu peut faire la manoeuvre manuellement ou tu peux
utiliser la macro suivante.

Tu copies cette macro dans un module standard et tu l'exécutes.
Cela devrait faire le travail pour toutes les feuilles de ton classeur.

Cette macro est inspirée de celle de jacxl ...

'-------------------------------
Sub ménage()
Dim sh As WorkSheet
On Error Resume Next
For Each sh In Worksheets


sh.Range(sh.Cells.SpecialCells( _
xlCellTypeLastCell).EntireRow, _
sh.Cells.Find("*", , xlFormulas, _
, xlByRows, xlPrevious).EntireRow) _
.Offset(1, 0).Delete

sh.Range(sh.Cells.SpecialCells( _
xlCellTypeLastCell).EntireColumn, _
sh.Cells.Find("*", , xlFormulas, _
, xlByColumns, xlPrevious). _
EntireColumn).Offset(0, 1).Delete
Next
ActiveWorkbook.Save
Set Sh = Nothing
End Sub
'-----------------------------------------





En supplément,

Lorsque tu élabores ton classeur, si tu veux faire des expériences ( peu importe la nature) c'est une très mauvaise idée
d'utiliser les "Scrollbar" (les ascenseurs) et effectuer tes test en bas ou à droite de ta zone de travail. Lorsque tu
effaces les données de ton test, tu pourrais oublier quelques cellules qui ont par exemple seulement un espace (fait pas
la barre d'espacement) ou une formule qui retourne "", donc non visible à l'oeil, et, cela pourrait être suffisant pour
rendre certaines macros inopérantes à cause de cela. Il n'est pas facile par la suite de trouver pourquoi certaines
macros ne donnent pas le résultat attendu. IL est très important de protéger l'espace de travail de sa feuille de toutes
données indésirables que l'on ne désire pas conserver. Tu es mieux d'utiliser une feuille destinée spécialement à ça.
Quand ton classeur est terminé, Tu supprimes cette feuille. C'est beaucoup plus sécuritaire.

À cet égard, si la macro sur les fichiers obèses ne donnent pas un bon résultat , et, que tu as fait toutes sortes
d'expériences comme décrit ci-haut, il se peut qu'à cause de certaines cellules qui ne sont pas complètement vides que
la macro ne fonctionne pas correctement. Il faudra que tu utilises la commande "Supprimer" pour supprimer toutes les
lignes et colonnes devenues inutiles.







Salutations!




"André" <andré@aol.com> a écrit dans le message de news:
Bonjour à tous

2 questions en une si vous le permettez...

J'ai fait un logiciel avec des macros et l'ai distribué dans différentes
villes..
puis je le mets à jour périodiquement chez moi...
j'ai donc ajouté qq macros mais très peu

je récupère un des anciens déjà en utilisation et il fait 1200 ko (je
n'avais pas noté ça)
je viens de me rendre compte que le mien fait maintenant 3200 ko !!!
Ils fonctionnent tous les deux parfaitement...!!!

je ne vois rien d'accroché au mien Que peut il se passer ?

2°) Malgré que VBA soit un interptétateur, je vois qu'on peut compiler les
macros et ça va plus vite..
mais que veut dire "arguments conditionnels de compilation" dans la boite
de dialogue propriétés de VBA :
J'ai dans mes macro une passe conditionnelle #if# fonction de la plateforme
sur laquelle mon logiciel tourne..
Cette condition est elle bloquée sur la configuration de ma plateforme si je
compile puis distribue ?

j'éspère etre assez clair mais va savoir...

En tous cas merci d'avance et Une noix d'honneur à qui me dépannera... Merci





Avatar
André
Merci de ta réponse cher Clément, toi qui me dépanne souvent...
cette fois ci ça ne marche pas, dommage
voir ma réponse à Michel
j'irai voir dans excellabo

merci tout de mm et cordialement
André


Bonjour,

j'ai donc ajouté qq macros mais très peu
je récupère un des anciens déjà en utilisation et il fait 1200 ko
(je

n'avais pas noté ça)
je viens de me rendre compte que le mien fait maintenant 3200 ko !!!
Ils fonctionnent tous les deux parfaitement...!!!

je ne vois rien d'accroché au mien Que peut il se passer ?


Cela arrive souvent dans des classeurs avec des macros.

Il a peut-être quelque chose là-dessus dans Excelabo.

Il y a aussi VBA Clode Cleaner de Rob Bovey:

http://www.bmsltd.ie/MVP/Default.htm

Vers le bas de la page

2°) Malgré que VBA soit un interptétateur, je vois qu'on peut
compiler les macros et ça va plus vite..


En fait, la "compilation" demeure une compilation strictement
"interne" et ne génère pas d'exécutable.

Tu pourrais envisager, d'utiliser un vrai langage compilé et piloter
Excel par automation, mais je ne suis pas convaincu que que ce serait
un meilleur choix. Personnellement, je trouve que la combinaison
VB6-Excel 2002 donne des applications fragiles. (Pour d'autres
langages, ou d'autres version de VB, et d'Excel, je ne sais pas). De
plus, dès que tu pilotes Excel en mode "invisible", tu dois tuer Excel
en passant par l'API à la fin. Puis Automation demande beaucoup de
ressources, et il est préférable d'avoir beaucoup de mémoire.

D'un autre côté, VB-VisualStudio vien avec plusieurs contrôles de type
"grille". Sauf que tu dois tout programmer. Mais là, tu aurais
probablement une application plus stable.