XL 2019 Fichier très lent à cause de calcul

sabagof

XLDnaute Junior
Salut à tous,
J'ai cherché par tous les moyens sans suite favorable.
J'ai un fichier excel sous office 2010 avec un tableau. Chaque fois que je dois intervenir sur ce fichier un calcul automatique se lance ralentissant ainsi tout traitement.
je joins ici le fichier en l'état à toutes fins utiles. Existe til un moyen de contourner ce calcul ? ou trouver vous quelque chose de particulier sur le fichier à corriger ?
Merci pour votre aide.....
 

Pièces jointes

  • booking.xlsm
    101.3 KB · Affichages: 27
Solution
Pour ajouter/modifier/supprimer un article, il y aurait tout ce qu'il faut.
Pour une ligne de booking il faudrait un CLs et un CAs pour ce tableau là.
Attention toujours à ce qu'une ComboBox ne soit pas prise en charge en même temps par deux CLs. Pour quelqu'un j'avait fait mettres les infos spécifiques du tableau à mettre à jour dans un cadre (Frame) et je changeais le CLs actif à l'entrée et à la sortie de ce Frame, ce qui permettait de faire gérer une même ComboBox par les deux, mais pas en même temps. Dans d'autres je constituai un Dictionary de code articles pour pouvoir charger un article d'après ce code qu'une ComboBox était déjà réservée à sa recherche ailleurs que dans la base articles.

sabagof

XLDnaute Junior
Bonjour. Alors virez ces formules et utilisez l'objet ComboBoxLiées du projet CLsCAs de mon CBxLCtlA.xlam avec des ComboBox dépourvues de RowSource. Les listes classées et sans doublon il connait, et s'en occupe tout seul (méthode .Actualiser), tout comme la restitution des n° de lignes où correspondent toutes les valeurs spécifiées dans les ComboBox qu'on lui a fait prendre en charge (évènement _Résultat ou _Bingo).
Merci Dranreb pour cette solution qui à mon avis sera très fructueuse mais le hic ! c'est mon faible niveau en vba qui ne me permet pas encore tout de suite de quitter le terrain du tableau avec filtre et les combobox. Je me suis déjà mis sur les recherches. Pour le moment je t"envois ci-joint mon projet pour d"éventuelles corrections. C'est une gestion de stock suivi d'une facturation.....
 

Dranreb

XLDnaute Barbatruc
Joignez peut être une version avec référence cochée à CLsCAs et sans mot de passe sur le projet VBA. Je vous assure que les variables objets globales de type ComboBoxLiées et ControlsAssociés ont tendance à fonctionner du premier coup.
 
Dernière édition:

sabagof

XLDnaute Junior
Mon cher
Oui, continuez à parler tout seul votre langage et débrouillez vous, ou choisissez une solution facile et très rapide à mettre en œuvre, c'est vous qui voyez …
Mon cher Dranreb toutes mes excuses, voici le projet dévérouillé, au fait je te donnais dans le poste =21, le code de déverouillage. Merci pour la compréhension.
 

Pièces jointes

  • GESTION STOCK.xlsm
    961.3 KB · Affichages: 5

Dranreb

XLDnaute Barbatruc
Désolé du malentendu.
Alors, j'ai ouvert le fichier. Il y a beaucoup de choses !
Quel UserForm a ces fameuse ComboBox ?
Avez vous laissé s'installer le CBxLCtlA.xlam à partir du précurseur .xlsm de la ressource ?
Notez qu'il serait possible d'équiper le classeur des modules de service nécessaires (1 standard et 11 de classe) si vous préfériez.
Je vois des UserForm qui ne semble conçus que pour des ajouts ? D'habitude je les fais à la fois pour consultation, ajout et modification. C'est l'UserForm qui décide si c'est un ajout ou une modification quand on valide, selon que la combinaison des valeurs choisies dans les listes ou de préférence tapées dans les ComboBox existait déjà ou non. C'est le même bouton dont le Caption est soit "Ajouter" soit "Modifier".
 
Dernière édition:

sabagof

XLDnaute Junior
Désolé du malentendu.
Alors, j'ai ouvert le fichier. Il y a beaucoup de choses !
Quel UserForm a ces fameuse ComboBox ?
Avez vous laissé s'installer le CBxLCtlA.xlam à partir du précurseur .xlsm de la ressource ?
Notez qu'il serait possible d'équiper le classeur des modules de service nécessaires (1 standard et 11 de classe) si vous préfériez.
Je vois des UserForm qui ne semble conçus que pour des ajouts ? D'habitude je les fais à la fois pour consultation, ajout et modification. C'est l'UserForm qui décide si c'est un ajout ou une modificatlion quand on valide, selon que la combinaison des valeurs choisies dans les listes ou de préférence tapées dans les ComboBox existait déjà ou non. C'est le même bouton dont le Caption est soit "Ajouter" soit "Modifier".
Bonjour mon cher ami,
Cette fois ci j'ai laissé s'installer le CBxLCtlA.xlam et je joins une version avec référence cochée à CLsCAs. Je te souhaite une bonne continuité avec moi et mon projet. Je pense que mon niveau en vba me permet d'etre un bon tricheur.......... Donc je demande un début et je suivrai surement. Merci bcp.
 

Pièces jointes

  • GESTION STOCK.xlsm
    885.2 KB · Affichages: 6

sabagof

XLDnaute Junior
Bonjour Dranreb, merci de me suivre.
Je pense que nous allons commencé par la feuille nommée :
"Add_booking" dans le projet ;
son userform est nommé "entrée/sortie"
dans le classeur excel cela prend en compte les tableaux 5 et 9 des feuilles "article" et "booking"
Bonne journée.
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Alors automatiquement, je commencerais par écrire en tête :
VB:
Option Explicit
Private WithEvents CLsA As ComboBoxLiées, CAsA As ControlsAssociés, LCouA As Long, TVLA()
Private WithEvents CLsB As ComboBoxLiées, CAsB As ControlsAssociés, LCouB As Long, TVLB()
Private Sub UserForm_Initialize()
   Set CLsA = Création.ComboBoxLiées: CLsA.Plage Feuil19 ' (article)
   Set CAsA = Création.ControlsAssociés: Set CAsA.Colonnes = CLsA.Colonnes
   Set CLsB = Création.ComboBoxLiées: CLsB.Plage Feuil5 ' (booking)
   Set CAsB = Création.ControlsAssociés: Set CAsB.Colonnes = CLsB.Colonnes
Derrière, tous les CxsX.Add Me.chaquecontrole, "Titre de la colonne dans son tableau"
avec CxsX: CLsX pour une ComboBox devant faire l'objet d'une recherche dans son tableau, CAsX pour tout autre contrôle, avec X: A ou B selon le tableau source concerné.
Terminer par :
VB:
   CLsA.Actualiser
   CLsB.Actualiser
   End Sub
Rien qu'avec ça le fonctionnement autonome des ComboBox est normalement déjà assumé.
Les CLsA et CLsB figurent dans la liste déroulante de gauche qui surmonte la fenêtre de code.
En y sélectionnant CLsA ça implante un modèle de Private Sub CLsA_Change(ByVal Complet As Boolean, ByVal NbrLgn As Long), en sélectionnant Résultat dans celle de droite ça met une Private Sub CLsA_Résultat(Lignes() As Long)
On verra quoi y mettre peut un peu plus tard, quand vous aurez déjà fait les .Add

Attention, quand il y a plusieurs ComboBoxLiées utilisés, une certaine ComboBox ne doit en principe être prise en charge que par un seul d'entre eux. Sinon ça complique sérieusement, mais ce n'est pas complètement insurmontable.

Pour une ComboBox dédiée au N°Article par exemple, j'en confierais la charge à CLsB et à CAsA, quitte à utiliser un Dictionnary pour retrouver la LCouA (numéro de ligne courant dans la base Articles) d'après ce code article en vue de regarnir la TVLA (tableau des valeurs de la ligne courante Articles). Mais je vais peu être un peu trop vite pour vous …
 
Dernière édition:

sabagof

XLDnaute Junior
Bonjour.
Alors automatiquement, je commencerais par écrire en tête :
VB:
Option Explicit
Private WithEvents CLsA As ComboBoxLiées, CAsA As ControlsAssociés, LCouA As Long, TVLA()
Private WithEvents CLsB As ComboBoxLiées, CAsB As ControlsAssociés, LCouB As Long, TVLB()
Private Sub UserForm_Initialize()
   Set CLsA = Création.ComboBoxLiées: CLsA.Plage Feuil19 ' (article)
   Set CAsA = Création.ControlsAssociés: Set CAsA.Colonnes = CLsA.Colonnes
   Set CLsB = Création.ComboBoxLiées: CLsB.Plage Feuil5 ' (booking)
   Set CAsB = Création.ControlsAssociés: Set CAsB.Colonnes = CLsB.Colonnes
Derrière, tous les CxsX.Add Me.chaquecontrole, "Titre de la colonne dans son tableau"
avec CxsX: CLsX pour une ComboBox devant faire l'objet d'une recherche dans son tableau, CAsX pour tout autre contrôle, avec X: A ou B selon le tableau source concerné.
Terminer par :
VB:
   CLsA.Actualiser
   CLsB.Actualiser
   End Sub
Rien qu'avec ça le fonctionnement autonome des ComboBox est normalement déjà assumé.
Les CLsA et CLsB figurent dans la liste déroulante de gauche qui surmonte la fenêtre de code.
En y sélectionnant CLsA ça implante un modèle de Private Sub CLsA_Change(ByVal Complet As Boolean, ByVal NbrLgn As Long), en sélectionnant Résultat dans celle de droite ça met une Private Sub CLsA_Résultat(Lignes() As Long)
On verra quoi y mettre peut un peu plus tard, quand vous aurez déjà fait les .Add

Attention, quand il y a plusieurs ComboBoxLiées utilisés, une certaine ComboBox ne doit en principe être prise en charge que par un seul d'entre eux. Sinon ça complique sérieusement, mais ce n'est pas complètement insurmontable.

Pour une ComboBox dédiée au N°Article par exemple, j'en confierais la charge à CLsB et à CAsA, quitte à utiliser un Dictionnary pour retrouver la LCouA (numéro de ligne courant dans la base Articles) d'après ce code article en vue de regarnir la TVLA (tableau des valeurs de la ligne courante Articles). Mais je vais peu être un peu trop vite pour vous …
Bonjour Dranreb,
Après la fete du travail et tout le week end je reviens sur mon projet. Enfin j'ai réussi à faire les Add. comme indiqué, c'est très passionnant et conviviale. Le fonctionnement autonome de mes combobox est actuellement assumé. J'ai supprimé toutes "les formules bizarres" cachées.

Jusque là mes combobox ne me servent qu'a remplir. Je suis suspendu à votre secours pour la suite c'est à dire les modifications et autres.....

Ci-joint le projet en l'état. Merci pour la suite.
NB ; Les CLsA et CLsB figurant dans la liste déroulante de gauche qui surmonte la fenêtre de code sont verrouillés. comment faire ?
 

Pièces jointes

  • GESTION STOCK_PHQ_ABT(ss) classe_envoi.xlsm
    914.1 KB · Affichages: 3

Dranreb

XLDnaute Barbatruc
Bonjour.
Quand je fais Alt+DL je tombe sur des erreurs qui n'ont rien à voir avec l'affaire. C'est gênant. j''ai été obligé de chercher ".Add" pour tomber sur diverse choses, un UserForm où les objets n'ont pas été déclarés en variable globales Private, un autre qui m'inspire ces deux observation: 1) — Pour profiter pleinement de transferts facile entre contrôles et données, ce ne sont pas seulement les ComboBox qu'il faut faire gérer par des objets ComboBoxLiées, mais aussi tous les autres contrôles par des objets ControlsAssociés.
2) — En guise de colonnes on peut spécifier dans les Add les titres des colonnes quand ce sont des tableaux Excel comme c'est le cas ici. Sinon leurs numéros d'ordre seraient je crois préférables à leurs entêtes de colonne.
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 438
Messages
2 088 421
Membres
103 847
dernier inscrit
Girardon