Mémoire insuffisante à la fermeture

Bonjour,

J'ai un fichier excel avec du code qui fonctionne bien.

Mais dès que j'ouvre une feuille ("Calendrier") en passant par une des combobox de l'userform "Menu", tout fonctionne bien mais à la fermeture du fichier j'ai le message "mémoire insuffisante pour cette opération".

Je n'ai pas ce message pour les autres combobox ou les autres boutons.

Je n'arrive pas à trouver l'erreur, je ne sais pas si cela vient de la combobox ou du code de la feuille "calendrier" ou de la sub ReglesResPVisible (Module)

Pourriez vous svp m'aider?

Voici une partie du code, je ne peux pas joindre le fichier (5Mo)

Code de la combobox de l'userform "Menu"

Edit modo

Code de la feuille "Calendrier"

Edit modo

Code du module ReglesResPVisible

Edit modo

Je vous remercie par avance de votre aide précieuse

Cordialement

Edit modo : fichier joint avec code

Bonjour Sylvainpic,

Beau record du monde du code le plus long !

Mais si le problème survient à la fermeture du fichier, c'est peut-être lié au code du module thisworkbook ? Peut-être un problème d'évènements infinis...

cdlt,

Bonjour SylvainPYC

Vous êtes sérieux de publier du code à rallonge ainsi est-il compliqué de mettre ce code dans un fichier vierge !?

La prochaine fois, je supprime purement et simplement le post

A bon entendeur

Nota : très bonne remarque de 3GB que je salue

Bonjour,

Je vous remercie

Je suis désolé d'avoir posté trop de code et je comprends votre remarque.

Mais je suis perdu et je n'arrive pas à trouver la cause de ce message, je vais chercher dans Workbook et ... en espérant trouver l'erreur.

Je suis accompagnateur de personnes handicapées dans un Foyer d'Hébergement et je crée cet outil pour gérer les présences des résidents et salariés au Foyer et aux repas.

Je ne suis donc pas spécialiste de programmation, c'est pour faciliter le travail de mon équipe et éviter de perdre du temps à tout faire à la main comme on faisait précédemment, ce temps perdu est du temps perdu à l'accompagnement des résidents.
J'imagine et je conscient que mon fichier contient surement trop de codes et que ce code est loin d'être propre.
Mais malgré ces larges défauts, ce fichier nous sert bien ces dernières années et j'essaie selon mes petites connaissances de l'améliorer chaque année.

Je m'excuse encore pour ce post trop vague, trop long...

Je vous remercie de votre compréhension et de votre aide.

Je vous souhaite une bonne journée

Cordialement

Bonjour Sylvain, Salut BrunoM45,

Ce n'est pas une critique mais une façon décalée de dire qu'il vaut mieux se contenter de poster le nécessaire pour que ce soit digeste.

Quant au problème, il se produit à la fermeture du classeur. Donc, il y a fort à parier que la source du problème se trouve dans la procédure beforeclose du module thisworkbook. Il faut déjà commencer par là le cas échéant inspecter les procédures appelées par cette procédure évènementielle.

Cdlt,

Bonjour

Je vous remercie de votre aide.

J'essaie de supprimer (') les appels des procédures depuis la combobox et le procédure "Générer Calendrier" mais rien n'y fait pour l'instant.

Dans Worbook before close je n'ai pas beaucoup de code ert ce message intervient à la fermeture du fichier seulement si je sélectionne un résident dans la comboboxCal.

Private Sub Workbook_BeforeClose(Cancel As Boolean) 'Enregistre Copie
    Application.ScreenUpdating = False: Application.DisplayAlerts = False
    Dim Cible As Byte: Dim FichierB As String: Dim chemin As String, FichierC As String
    'Call ListeL(col14 à définir)
    ActiveWorkbook.save
    'Call HorairesVersOutlook 'Mis à jour des infos dans outlook après sauvegarde
    Randomize 'Initialisation du générateur de nombres aléatoires
    Cible = Int((26 * Rnd) + 1): Cible1 = Int((26 * Rnd) + 1): Cible2 = Int((26 * Rnd) + 1): Cible3 = Int(50 * Rnd) + 1
    Code1 = " - " & Format(Now, "dd") & Month(Date) & Year(Date) & "-" & Chr(Cible + 64) & Chr(Cible1 + 64) & Chr(Cible2 + 64) & Cible3
    'chemin = "Q:\Commun\5. Plannings\2021\FH\"
    'FichierB = "CopieFH2021.xlsx"
    'FichierC = "FH2021" & Code1 & ".xlsm"
    'ActiveWorkbook.SaveCopyAs chemin & FichierC
    'ThisWorkbook.SaveAs "Q:\Commun\5. Plannings\2021\" & FichierB, FileFormat:=xlOpenXMLWorkbook
    Code_Archive = 0 'Rappeller ce que signifie Code Archive 
    Application.CommandBars("Ply").Enabled = True: Application.ScreenUpdating = True: Application.DisplayAlerts = True
End Sub

je continue à chercher

Cordialement

Bonjour,

Comme nous n'aimons pas parler dans le vide en général et comme il est indiqué dans la charte du forum

  • Joignez (si possible) un fichier pour augmenter vos chances d'obtenir de l'aide en cliquant sur le bouton Fichier de l'éditeur. Si votre fichier est trop lourd ou contient des données personnelles, créez une version allégée de votre fichier avec juste assez d'informations pour permettre de comprendre votre problème. Dans tous les cas, ne postez JAMAIS de fichiers avec des informations personnelles ou confidentielles (cet utilitaire peut vous aider à les retirer).

Par avance merci

Voici un échantillon de mon fichier avec des noms anonymes comme vous avez dit

Je vous remercie

Re,

Wouhaouu, très bel outil même si pour le code ce n'est pas ça

Avec le fichier donné il ne se passe rien de mon côté à la fermeture, pas de message d'erreur

Je pense qu'il faudrait :
- mettre "Option Explicit" tout en haut de chaque module
- Définir obligatoirement toutes les variables (fastidieux mais efficace en cas de bug)
- Mettre à Nothing en fin de module toutes les variables objet qui sont définies

Après cela, on pourra peut-être y voir plus clair

A+

Merci

Je savais que mon code était lourd et pas "conventionné", mais ça fait du bien d'entendre que c'est malgré tout un bel outil.

J'ai supprimé d'autres pages de gestion pour alléger le fichier.

C'est vrai que j'ai pas mis Option Explicit sur toutes mes procédures, je vais attaquer par ça. (que sur les modules ou aussi en début de toutes les procédures des feuilles et userform?)

Que veut dire svp "Variable objet ou variable de bloc with non définie" => message quand je mets option explicit dans userform "Menu"

Et ensuite Nothing que je n'ai jamais utilisé, je vais essayer : qu'est ce qu'une variable objet svp?

Et je ne sais pas faire la gestion des erreurs (on error...)

Je me mets de suite au travail (Option Explicit et Nothing)

Je vous remercie beaucoup de votre aide

Je vous en suis très reconnaissant, je me sens moins paniqué, ca fait du bien d'être conseillé, soutenu.

2022 approche et je stressais un peu que ce fichier ne soit pas opérationnel dans 2 semaines (même si mes collègues ne m'en voudront pas vu que mon travail est d'accompagner les résidents, c'est un plus que j'essaie d'apporter à l'équipe et qui n'est pas compté dans mon temps de travail que je fais à la maison et pendant des temps calmes au boulot, il faut que cela fonctionne car ma nouvelle directrice qui voudrait bien que je lui présente), mais la confiance revient grâce à vous.

MERCI BEAUCOUP

Cordialement

Re,

C'est vrai que j'ai pas mis Option Explicit sur toutes mes procédures, je vais attaquer par ça. (que sur les modules ou aussi en début de toutes les procédures des feuilles et userform?)

"Option explicit" se met 1 seule fois en entête de tout objet contenant du code (feuille, Userform, Module)

Que veut dire svp "Variable objet ou variable de bloc with non définie" => message quand je mets option explicit dans userform "Menu"

Cela veut simplement dire que la variable n'est pas définit, c'est à ça que sert "Option Explicit"

Et ensuite Nothing que je n'ai jamais utilisé, je vais essayer : qu'est ce qu'une variable objet svp?

Une variable Objet est définit en général par le début d'instruction "Set" sauf pour les tableaux
Donc quand en début de Sub on a quelque chose du style

Sub Machin()
  ' Déclaration d'une variable objet qui est un Range
  Dim Plage as Range
  '  Initialisation de l'objet
  Set Plage = ThisWorkbook.Worksheets("Truc").Range("A1:A100")
  ' .... suite du code ...
  ' ICI fin de la Sub et donc avant de sortir
  Set Plage = Nothing
End Sub

Don't panic get organized

A+

Bonjour,

J'ai essayé de déclarer les variables avec option explicit dans l'userform "UserMenu" pour commencer.

Mais quand je clique sur le bouton Menu de la feuille "Stats repas" j'ai le message "Incomptabilité de type" à ce niveau la

Private Sub CBmenu_Click() 'Ouvrir Menu
 UserMenu.Show 0
End Sub

et voici le code de l'userform "UserMenu"

Le pb vient de cette ligne:

'ComboBoxCal.ColumnCount = 2: ComboBoxCal.RowSource = plage33

en enlevant cette ligne, le menu s'ouvre sans message, avec cette ligne j'ai le message "Incomptabilité de type"

Private Sub UserForm_Initialize()
    Dim plage33 As Range
    With Me
        .startUpPosition = 3: .Left = Application.Width - Me.Width - 30: .Top = 30: .Show 0
    End With
    ComboBoxMenu1.RowSource = "MenuD" ' remplit la list box des personnes
    Set plage33 = Sheets("Fiche_Resident").Range("A42:B61")
    'ComboBoxCal.ColumnCount = 2: ComboBoxCal.RowSource = plage33
    If Worksheets("Utilisateur").Range("b1").Value = 1 Then 'Verifie si un utilisateur est connecté
        Label7.Caption = Worksheets("Utilisateur").Range("a1").Value & " est connecté(e)"
    Else
        Label7.Caption = "Connectez vous SVP"
    End If

    Set plage33 = Nothing
End Sub

Merci

Bonsoir Sylvain,

Inscrivez plutôt

ComboBoxCal.ColumnCount = 2: ComboBoxCal.List = plage33

RowSource demande un String or vous lui donnez un Range

A+

Merci

J'ai maintenant ce message

"Impossible de définir la propriété List.Index de table de propriétés non valide

Private Sub UserForm_Initialize()
    Dim plage33 As Range
    With Me
        .startUpPosition = 3: .Left = Application.Width - Me.Width - 30: .Top = 30: .Show 0
    End With
    ComboBoxMenu1.RowSource = "MenuD" ' remplit la list box des personnes
    Set plage33 = Sheets("Fiche_Resident").Range("A42:B61")
    ComboBoxCal.ColumnCount = 2: ComboBoxCal.List = plage33
    If Worksheets("Utilisateur").Range("b1").Value = 1 Then 'Verifie si un utilisateur est connecté
        Label7.Caption = Worksheets("Utilisateur").Range("a1").Value & " est connecté(e)"
    Else
        Label7.Caption = "Connectez vous SVP"
    End If

    Set plage33 = Nothing
End Sub

???

J'ai corrigé

ComboBoxCal.ColumnCount = 2: ComboBoxCal.List = plage33

par

ComboBoxCal.ColumnCount = 2: ComboBoxCal.List = plage33.Value

Ca fonctionne

et quand je ferme le fichier je n'ai plus le message "Mémoire insuffisante".

Merci beaucoup de votre aide, vous êtes top et patient.

Je vais essayer d'insérer Option Explicit partout et ensuite Nothing.

Mon code, c'est pas ça, mais ca reste acceptable pour faire fonctionner cet outil à votre avis ?

Je vous remercie

Cordialement

Re

Juste un petit exemple de l'utilité de "Option Explicit"

image

Le nom de la variable définit, n'est pas le même que celui intialiser

A+

Un autre

image

ça promet, je vais en baver

et pour Nothing, je dois le rajouter en fin de procédure quand j'utilise Set, c'est ça?

Je vais m'y mettre ce weekend et la semaine prochaine.

Sinon le code vous parait acceptable sur l'échantillon que j'ai posté?

Merci encore

Re,

Sylvain, j'avais un peu de temps ce soir, voici le fichier avec le code modifié comme nécessaire

Il manque des USF et des Sub, j'ai mis un MsgBox et un "Stop" à chaque fois ou il y a besoin

Je n'ai pas mis non plus les

Set VariableObjet = Nothing

Mais pas forcément nécessaire

Le code est certainement optimisable de ce que j'ai pu voir, mais il fonctionne et on m'a toujours dis : "le mieux est l'ennemi du bien"

A+

Rechercher des sujets similaires à "memoire insuffisante fermeture"