Vider les variables

Bonjour le Forum,

Suite à un autre post où on a résolu mon 1er problème, un 2ème problème est apparu : "Microsoft Excel a cessé de fonctionner" et on m'a dit que c'était sans doute dû au fait que je ne vidais pas mes variables. J'ai essayé pour :

Dim Col As Long

Dim derniereligneB As Integer

Dim Lig As Long

De mettre :

set Col = Nothing

etc

Mais cela ne fonctionne pas. Il me semble que je n'ai pas compris le cours des variables objets ...

Bonjour Axolem,

Seul les variables de types object vba ont besoin d'avoir un Set, de ce que je vois tes variables, " Col ", "derniereligneB ", " Lig " ne sont pas des objects donc pas besoin de Set pour ces variables.

Pour ce qui est des objects voici la structure:

  • Set mon_objet = " ..........................."
  • Set mon_objet = Nothing

Et pour des variables tableau

- Erase mon_tableau

Bonjour Florian53,

Merci de t'être penché sur mon problème !

Comme je n'ai pas de variables objets ni tableau, dans ce cas ce n'est pas dû à mes variables, si ?

Voici ci-joint mon fichier simplifié

Le mot de passe est "Blanc"

14axolem-blanc.xlsm (330.90 Ko)

A quel moment le fichier Excel, Bug t-il , est ce lors d'une manipulation d'une de tes feuilles d' Userform ?

Quand j'ouvre mon fichier, un UserForm d'accueil se lance directement, ensuite en cliquant sur le buttoncommand "Validité des Formations" le message "Microsoft Office a cessé de fonctionner" apparaît ...

Je n'ai pas réussi à reproduire ton problème, mais quand je vois ton code celui demande à être beaucoup plus simplifié et avec plus de rigueur :

Prenons l'exemple de tes Combobox change :

Si tu ré agence correctement tes colonnes de requêtes afin qu'elles se suivent de la colonne n° 43 à n° 52 tu peux re créer une seconde boucle dans ton programme, ce qui réduirai considérablement ton code :

Dim sh As Worksheet ' Declaration Public
Dim derniereligneB As Long ' Déclaration Public

Private Sub ComboBox22_Change()

     Dim i As Integer

'''''''''''' A mettre dans l'initialize de l'Userform'''''''''''''''''''
Set sh = Sheets("Délai Formation")
derniereligneB = Range("B" & Rows.Count).End(xlUp).Row
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

    For i = 4 To derniereligneB
        For j = 1 To 11

            If combo = Cells(i, 2).Value Then
                Iff sh.Cells(i, 42 + j).Value = "INVALIDE", Label & 296 + j.Caption = "INVALIDE": Label297.ForeColor = vbRed

                Iff sh.Cells(i, 42 + j).Value = "OK", Label & 296 + j.Caption = "OK": Label297.ForeColor = vbGreen

                Iff sh.Cells(i, 42 + j).Value = "RAPPEL", Label & 296 + j.Caption = "RAPPEL", Label297.ForeColor = vbBlue

                Iff sh.Cells(i, 42 + j).Value = "NON FORME", Label & 296 + j.Caption = "NON FORME", Label297.ForeColor = vbBlack

        Next j
    Next i

    sh.Cells(22, 2).Value = ComboBox22

End Sub

Le code ci dessus est un exemple qui est surement à adapter à ton fichier, mais la encore la simplification ne s’arrête pas là. Tu pourrais créer un module générique pour cette requête, qui à chaque changement de n'importe quelle combobox cette requête soit appeler.

Ce qui ferait que tu ne disposerais que tu code ci dessus pour toutes tes combobox, Énorme simplification de code

Bonjour,

Je t'ai déjà dis que ton fichier ne bug pas. Quel que soit le nombre de fois ou je l'ouvre et le referme.

Donc ça me semble plutôt lié à tes conditions personnelles d'utilisation ou à ton matos.

En réalité je pense que le Userform en cause souffre surtout d'un problème de codage.

Je n'ai pas eu la patience de compter jusqu'au bout mais on peut penser qu'il "pèse" environ 1500 lignes de code dont à peine un dixième sont vraiment indispensable...

Revoie ton code à la manière dont on te l'a indiqué et je pense que ça devrait rentrer dans l'ordre.

Auparavant il te faudra résoudre le problème logique des 4 dernières colonnes...

Ceci dit je ne voudrait pas paraître un peu pisse froid, mais j'ai l'habitude de dire ce que je pense alors ne le prend pas mal, mais... Tu as eu les yeux plus grand que le ventre Je ne pense pas que tu puisses résoudre les choses à ta manière. C'est à dire avec des bribes de codes pêchées ici ou là et multipliées à l'infini...

De même pour cette feuille ton système de couleur façon SapinDeNoel me semble inapproprié.

Je vois se pointer encore 2 UserForm (InsertionDonnées et Tableau) dont tu n'as pas encore la moindre ligne.

Enfin sur le fond ton modèle de gestion me semble inapproprié : Il me semble que tu doives faire appel à quelqu'un qui a quelques notions d'analyse avant de te lancer dans de la production de code à l'échelle industrielle. Ni même dans la confection d'une maquette d'un UserForm !

Bon je dis ça. J'ai rien dis hein !

Cordialement

Merci Florian53, je vais revoir mon code.

Bonjour Galopin01, je vais revoir mon code, merci de ton avis. Concernant mes 2 autres UserForms ils fonctionnent à merveille ! J'ai juste effacer leurs codes car sinon le fichier était trop gros pour vous le partager ! Concernant les couleurs elles sont celles de l'entreprise.

Merci pour le partage de ton avis, je vais étudier tes remarques !

Bonsoir,

...Sans rancune !

En fait je me demande si quelque part l'erreur n'est pas liée au fait que tu es en mode Application.Visible = False

Essaie de fonctionner avec True pour vérifier si tu as toujours un plantage. avec True.

A+

Rechercher des sujets similaires à "vider variables"