Fichier Excel macro de plus en plus lent

Bonjour,

J'utilise un fichier Excel depuis maintenant plus de 2 ans. Ce fichier me sert de gestion de stock pour un parc de véhicules.

J'ai intégré des macros liées a des boutons de commande pour simplifier ma tache de couper /coller de lignes qui transitent d'un onglet a un autre onglet.

Mon fichier commence a avoir quelques lignes de crées (plus de 10000). La saisie sur le fichier et l'application des macros deviennent de plus en plus compliquées et longue.

Je ne suis pas un spécialiste d'Excel, j'ai donc tatonné en faisant mes macros.

Y a t'il moyen d'optimiser ces macros afin de retrouver un fonctionnement normal du fichier en sachant que mon fichier fait 1.7Mo?

Bonjour,

As-tu regardé par CTRL END (ou FIN) quelle est la dernière cellule occupée ou qui l'a été ?

Si elle est trop éloignée de la vraie fin du tableau il faudra lancer un petit code vba

P.

Salut Nico, Patrick,

et... un fichier, peut-être?

A+

Merci pour vos retours,

Patrick, oui j'ai supprimé les lignes vides en dessous et a côté pour cahque onglet sans résoudre le le probleme.

Curulis, mon fichier fait 1.7mo et je suis bloqué a 1Mo en envoi je ne sais pas comment je peux le réduire.. une idée?

Via CJOINT.COM ! Sans zipper, stp!

A+

Et voici

https://www.cjoint.com/c/GKdncoX8Igl


Le MDP est 531077 s'il celui-ci est demandé

Salut Nico,

une première solution serait déjà d'éviter ces longues boucles de mise à jour et d'opter pour des affectations directes dès le changement opéré dans tes listes de validation ('STOCK').

Je ne connais pas le temps de traitement de ta boucle mais j'imagine, surtout si tu fais ça en fin de journée...

Je n'ai travaillé que sur la feuille 'STOCK' pour l'instant. Voici une petite macro qui opère les COPY/DELETE dès lchangement en [L:L].

Je trouve déjà cela très lent...

A copier telle quelle dans le module de la feuille 'STOCK'.

Private Sub Worksheet_Change(ByVal Target As Range)
'
Dim iRow As Integer, iRowT As Integer
'
Application.EnableEvents = False
Application.ScreenUpdating = False
'
iRowT = Target.Row
With Worksheets(Switch(UCase(Target) = "GIMENEZ", "AFFECTATION", UCase(Target) = "TRANSPORT", "TRANSPORT", UCase(Target) = "SUD", "VO SUD"))
    iRow = .Range("A" & Rows.Count).End(xlUp).Row + 1
    Range("A" & iRowT & ":L" & iRowT).Copy Destination:=.Range("A" & iRow & ":L" & iRow)
    Rows(iRowT).Delete shift:=xlUp
End With
'
Application.ScreenUpdating = True
Application.EnableEvents = True
'
End Sub

Par ailleurs, en collant ceci dans THISWORKBOOK, un simple clic-droit n'importe où dans n'importe quelle feuille t'amène directement en fin de tableau.

Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
'
Cancel = True
ActiveWindow.ScrollRow = Sh.Range("A" & Rows.Count).End(xlUp).Row
'
End Sub

A tester dans un premier temps.

A+

Merci pour ton retour.

En fait je travaille sur le fichier tout au long de la journée.

Il y a plusieurs types d'expertises de véhicules.

  • Ceux dont les véhicules appartiennent à mon établissements (qui transitent dans l'onglet AFFECTATION)
  • Ceux dont les véhicules transitent simplement chez nous (qui passent directement sur TRANSPORT une fois retiré)

Mes experts me transmettent des dossiers que je saisi sur mon fichier de suivi tout au long de la journée. J'ai des enlèvements de transporteurs tout au long de la journée, donc je dois faire une trentaine de MISE A JOUR par jour, mon délai est donc plus court pour chaque boucle , mais plus le fichier se remplis, plus c'est compliqué et long. Sauf que nous n'avons pas des bêtes de courses comme PC au boulot .

Lorsque j'ai suffisamment de dossiers de véhicules qui nous appartiennent, je les transferts dans l'onglet AFFECTATION et je copie la liste classée par ordre alphabétique au chef de vente VO sur un autre fichier que je lui transmets.

Une fois qu'il m'a affecté les véhicules vers une destination, je remplis ma liste AFFECTATION avec ces choix et je mets a jour l'onglet qui dispatche vers les autres onglets.

Je ne peux donc pas activer une mise a jour instantanée car je n'ai un retour du chef de vente VO qu'une fois par jour, voir tout les 2 jours .

Concernant les véhicules qui ne m'appartiennent pas, je les transferts sur l'onglet TRANSPORT qu'une fois enlevés par les transporteurs.

bonjour à vous

mon avis : passer à un SGBD (Access...) ou bien simplifier.

supprimer tout VBA, travailler sur 2 ou 3 feuilles maxi (et des TCD pour filtrer et/ou synthétiser)

voir la réification (une table véhicules, une table locations (ou entrées/sorties), une table réparations. Des RECHERCHEV pour lier les tables entre elles. C'est déjà beaucoup pour Excel qui n'est pas du tout fait pour ça.

VBA donne l'illusion qu'on peut faire automatiquement ce qu'on fait au stylo sur des registres papier. C'est absolument une illusion.

les SGBD sont faits pour ça, rien que pour ça. Pourquoi les bouder ?

Bonjour jmd,

Je suis entièrement d'accord avec tout le contenu de ton message.

À propos des SGBD (Systèmes de Gestion des Bases de Données) tels que Microsoft Access,

tu as posé cette question : « Pourquoi les bouder ? » ; sans doute parce que Microsoft

persiste bêtement à ne pas mettre Access dans Office Famille et Étudiants 2016 !

« bêtement » ? ah, non, pardon ! au contraire, c'est tout à fait volontaire, pour obliger

les clients-consommateurs-vaches-à-lait de Sa-Seignerie-Microsoft qui aimeraient

utiliser Access à passer à l'abonnement si coûteux et ruineux sur une longue période ;

c'est pourquoi je n'ai pas pris cet abonnement ! BRAVO à Microsoft pour son ingéniosité

commerciale ! un ban pour son PDG et toute l'équipe du service Marketing !


Résultat de cette décision si intelligente, si pertinente, et si cupide :

On se retrouve bêtement avec plein de personnes qui refusent à juste titre d'être de

perpétuelles vaches à lait, et qui utilisent le tableur Excel comme une Base de

données alors qu'il n'est pas fait pour ça !

Merci à qui ? Devinez !

Cordialement

re à tous

dhany,

d'accord avec toi pour dire que si Access était au prix d'Excel, on ferait tous de l'Access.

tu devrais essayer OpenOffice Base, assez similaire à Access et gratuit

elle est pas belle la vie ?

jmd a écrit :

d'accord avec toi pour dire que si Access était au prix d'Excel, on ferait tous de l'Access.

Pas sûr... Access me paraît bien plus compliqué et demande à faire rapidement des formulaires si on ne veut pas encoder en direct dans la base, ça demande déjà du taf Pour excel on met des titres et c'est parti (enfin je résume très fort là )

J'ai l'impression qu'une grosse majorité des utilisateurs s'en servent comme "simple base de données" mais si relations il doit y avoir , ça se complique vite

@jmd

Je te remercie beaucoup d'avoir mentionné OpenOffice Base qui est gratuit, et ça servira sûrement pour d'autres lecteurs du forum ;

pour moi, c'est inutile car d'une part, je tiens au VBA d'Access ; d'autre part, j'ai eu la chance de pouvoir acheter légalement Access

car il était inclus dans ma version de Microsoft Office 2003 ; et Access 2003 me convient très bien, merci !!!

Le plus drôle c'est qu'en ce qui me concerne, Microsoft s'est complètement fourvoyé, car sa politique commerciale pour Access

fait que ça m'a toujours dissuadé de passer à une version ultérieure !

Je ne suis donc pas concerné par sa politique actuelle, mais je n'en pense pas moins ! (voir mon message précédent qui parle

des clients-vaches-à-lait de Crosoft, et du coût prohibitif de l'abonnement sur le long terme).

Si tu as attrapé un fou-rire par ma faute, désolé !

Bonjour Forum

je vois un problème sur la feuille "TRANSPORT" mais je n'arrive pas à le résoudre

j'ai donc pris partie de refaire la feuille

bonne continuation sur cette belle discussion

https://www.cjoint.com/c/GKepQJbvhUu

@patrick1957

Heureusement que tu as précisé que tu résumes très fort !

Créer les Tables est rapide si on utilise l'automatisme d'Access, mais il vaut mieux peaufiner pour mettre les types de données

les plus adéquats possibles (y compris le bon nombre de caractères pour les chaînes, car celui par défaut n'est pas toujours top).

Il y a aussi les Formulaires instantanés et les États instantanés (automatiques), et c'est évident que ça simplifie bien les choses !

mais là aussi, c'est mieux de peaufiner !


Tu a écrit :

une grosse majorité des utilisateurs s'en servent comme "simple base de données"

Je pense que tu as voulu dire : comme une base de données mono-fichier, c'est-à-dire une BDD avec une seule table

et sans utiliser les relations ; si oui, je suis entièrement d'accord avec toi ; exemples les plus courants : une BDD des

adresses (famille, amis, connaissances) ; BDD de sa collection de livres, ou de films, etc...


C'est sûr qu'utiliser les Relations demande plus de travail, mais c'est comme pour tout logiciel :

il y a une période d'apprentissage incontournable pour pouvoir bien s'en servir !

Je ne connais encore personne pour qui c'est inné !

bonjour

du doit faire trop de copy car je trouve plus de 17000 shape

tu a du nettoyage a faire

A+

Maurice

Bonjour le fil

Je ne suis absolument pas d'accord avec vos théories sur Access !

Access est certes conçu pour gérer des Bases de Données, normal c'est SGBDR alors qu'Excel est un Tableur

Mais le problème ici posé ne relève absolument pas du domaine d'un SGBDR !

De plus le fonctionnement même d'Access est très compliqué pour un novice en informatique. Non seulement, il faut être capable de penser Base de Données mais également Relationnel ! Très peu de demandeurs sont capables de structurer correctement une Base de Données, alors quant à considérer ceux qui sont capables de penser Relationnel...

En réalité il n'y a que UN tableau dans cet outil ! les autres ne sont que des copies du premier (à quelques détails près, quelques colonnes supplémentaires saisies manuellement)

Ce qui cause la lenteur ce ni Excel, ni le volume des données, c'est la méthode employée !

Les méthodes Copy/Paste et Delete sont très longues !

Par ailleurs, il y a une foule de MFC identiques qui elles aussi ralentissent énormément le traitement !

Bonjour NCC 1701,

Il est clair pour tous que tu es vraiment contre les Bases de données en général et Access en particulier ;

c'est ton opinion et je la respecte : chacun est libre d'utiliser ou non Access ; mais je trouve vraiment

bizarre que tu cherches tant à décourager par tous les moyens ceux qui seraient tentés d'essayer ce

logiciel Access ! je ne trouve pas adéquat que tu te mettes à choisir à la place de l'utilisateur dans le

sens où Access sera plus ou moins facile à apprendre : c'est selon chacun ; tu ne peux pas démentir

que certains utilisateurs auront plus de facilité que d'autres à apprendre Access et à l'utiliser, surtout

s'il prennent le temps pour consulter l'aide en ligne (interne au logiciel) ou de la documentation sur

Internet au sujet d'Access.

Comme tu peux le constater, je suis un ardent défenseur d'Access, le 3ème logiciel de la trilogie

bureautique : permettre de stocker un volume important de données (jusqu'à 2 Go, et même

davantage si utilisation de liens sur des tableaux externes qui peuvent eux aussi être de 2 Go).

Mais je répète que tu as tout à fait raison quand tu dis que juste pour une centaine de fiches,

Excel suffit amplement (à condition d'être bien utilisé).


Lien sur un article de Microsoft au sujet des caractéristique d'Access 2016

(lisez bien les tableaux de diverses caractéristiques situés un peu plus bas) :

https://support.office.com/fr-fr/article/Caract%C3%A9ristiques-d-Access-2016-0cf3c66f-9cf2-4e32-9568-98c1025bb47c


@nico5310 : les 2 messages qui pourront le mieux t'aider sont celui

d'archer (hier à 18 h 46) et celui de BOB71AU (hier à 17 h 44).

Cordialement

Bonjour le fil

@dhany

réponse en MP

Bonsoir,

Merci pour votre retour, je suis donc en train de me pencher sur Access.

Est-il possible d'importer directement mes macros et les réaffecter a des boutons comme dans Excel ou pas ?

Merci pour votre retour.

Cordialement

Rechercher des sujets similaires à "fichier macro lent"