Fermeture aléatoire d'Excel au lancement d'une Userform avec un bouton macr

Bonjour à tous

Je vous sollicite car j'ai des plantages aléatoires quand je clique sur mon bouton macro pour lancer mon Userform, Excel se ferme sans aucun message d’erreur.

Je viens de terminer ce job (3 mois de travail) et ce plantage aléatoire me fait craquer

Si quelqu'un à déjà eu le cas et peut m'aider à résoudre cette fermeture inopiné d'Excel

Merci d'avance

ci-dessous le code de ma macro de lancement et le début du code de mon userform

code bouton

Sub EDRHICRH() 'ou le nom que vous avez défini pour la macro

UserForm4.Show vbModeless '(*)

End Sub

début code userform

Option Explicit 'Activation de la déclaration explicite des variables
Dim Ws As Worksheet 'Variable pour un Objet Worksheet en PUBLIC pour tous les Controls de cet UserForm
'Correspond au programme du FORMULAIRE
'Cet évènement est important car il permet de définir les propriétés des objets et les valeurs par défaut des variables, lors du lancement du Userform.
Private Sub UserForm_Initialize() 'à l'initialisation de l'userform
' Déclaration des variables grâce à Dim
' 1° Choisir un nom
' 2° Choisir un TYPE (= définir la nature du contenu)
' --------------------------------------------------------
Dim J As Long 'déclare la variable J
Dim i As Integer
' Affecter une valeur à une variable (= fixer la valeur de la variable)
Set Ws = Sheets("Base de données-Destinataires") 'Attention ce nom doit correspondre au nom de votre ONGLET
'On stock le nom de la feuille "Base de données-Destinataires" dans une variable nommée WS
With Me.ComboBox1
For J = 2 To Ws.Range("A" & Rows.Count).End(xlUp).Row
.AddItem Ws.Range("A" & J)
Next J
End With
ComboBox33.List = Application.Transpose(Range("UM"))
ComboBox37.List = Application.Transpose(Range("UM"))
ComboBox41.List = Application.Transpose(Range("UM"))
ComboBox45.List = Application.Transpose(Range("UM"))
ComboBox49.List = Application.Transpose(Range("UM"))
ComboBox54.List = Application.Transpose(Range("UM"))
ComboBox58.List = Application.Transpose(Range("UM"))
ComboBox62.List = Application.Transpose(Range("UM"))
ComboBox66.List = Application.Transpose(Range("UM"))
ComboBox70.List = Application.Transpose(Range("UM"))
ComboBox75.List = Application.Transpose(Range("UM"))
ComboBox79.List = Application.Transpose(Range("UM"))
ComboBox83.List = Application.Transpose(Range("UM"))
ComboBox87.List = Application.Transpose(Range("UM"))
ComboBox91.List = Application.Transpose(Range("UM"))
ComboBox96.List = Application.Transpose(Range("UM"))
ComboBox100.List = Application.Transpose(Range("UM"))
ComboBox104.List = Application.Transpose(Range("UM"))
ComboBox108.List = Application.Transpose(Range("UM"))
ComboBox112.List = Application.Transpose(Range("UM"))
ComboBox117.List = Application.Transpose(Range("UM"))
ComboBox121.List = Application.Transpose(Range("UM"))
ComboBox125.List = Application.Transpose(Range("UM"))
ComboBox129.List = Application.Transpose(Range("UM"))
ComboBox133.List = Application.Transpose(Range("UM"))

Call AdapterTailleFormAEcran
End Sub

Sub AdapterTailleFormAEcran()

Application.WindowState = xlMaximized

If ActiveWindow.Width > Me.Width And ActiveWindow.Height > Me.Height Then Exit Sub

If (Round((ActiveWindow.Width * 0.95) / Me.Width, 2) * 100) - 1 < (Round((ActiveWindow.Height * 0.95) / Me.Height, 2) * 100) - 1 Then
Me.Zoom = (Round((ActiveWindow.Width * 0.95) / Me.Width, 2) * 100) - 1
Me.Width = Me.Width * Me.Zoom / 100
Me.Height = Me.Height * Me.Zoom / 100
Else
Me.Zoom = (Round((ActiveWindow.Height * 0.95) / Me.Height, 2) * 100) - 1
Me.Width = Me.Width * Me.Zoom / 100
Me.Height = Me.Height * Me.Zoom / 100
End If

End Sub

Function NomDefini(Nom As String) As Boolean
Dim Noms As Name
NomDefini = False
For Each Noms In ThisWorkbook.Names
If Noms.Name = Nom Then NomDefini = True: Exit Function
Next Noms
End Function

Function CaracSpec(Nom As String) As String
CaracSpec = Replace(Nom, " ", "_")
CaracSpec = Replace(CaracSpec, "-", "_")
End Function

'Correspond au programme du bouton QUITTER
Private Sub CommandButton1_Click()
Unload Me
'Unload => Permet de fermer l'Userform et de l'effacer de la mémoire, les valeurs de ses contrôles sont à alors perdues.
' Me => Référence à l'objet en cours
End Sub

'Correspond au programme du bouton MODIFIER
Private Sub CommandButton2_Click()
Dim Ligne As Long
Dim i As Integer

If MsgBox("Etes-vous certain de vouloir ENREGISTRER ce Profil ?", vbYesNo, "Demande de confirmation") = vbYes Then
Application.ScreenUpdating = False ' << modif
Application.Calculation = xlCalculationManual ' << modif
If Me.ComboBox1.ListIndex = -1 Then Exit Sub 'On sort si pas de sélection
Ligne = Me.ComboBox1.ListIndex + 2
For i = 290 To 479
If Me.Controls("TextBox" & i).Visible = True Then
Ws.Cells(Ligne, i) = Me.Controls("TextBox" & i)
End If
Next i
End If 'fin de la condition
Application.Calculation = xlCalculationAutomatic ' << modif
Rows("20:72").Select
Selection.EntireRow.Hidden = False
Range("C16").Select
Unload Me
End Sub

'Correspond au programme de la LISTE DEROULANTE
Private Sub ComboBox1_Change()
Dim Ligne As Long
Dim i As Integer
If Me.ComboBox1.ListIndex = -1 Then Exit Sub
Ligne = Me.ComboBox1.ListIndex + 2
For i = 1 To 4
Me.Controls("TextBox" & i) = Ws.Cells(Ligne, i)
Next i
Sheets("demandes").Cells(1, 1).Value = ComboBox1.Text
End Sub

bonjour,

Quand tu vas chez le toubib pour ton gamin : Tu lui apporte pas seulement sa photo ?

Ici c'est pareil : Il faut fournir ton fichier.

A+

Bonjour,

Le toubib non. Mais un bon marabout te fait ça sans souci

Merci Galopin01

En effet (j'aime bien ton humour)

Ce fichier est confidentiel je viens de changer les informations pour pouvoir te l'envoyer, a titre d 'info j'ai aussi supprimer la moitié de la base de donnée (le fichier ne passait pas il faisait plus de 2 mo)

Pour faire apparaitre les boutons d'applications il faut saisir en cellule C10 : un NNI à choisir entre A00001 et A20000au choix

Voilà

Merci d'avance pour ton aide

Cordialement

Bonjour,

J'ai testé tous les boutons existants sans provoquer d'erreur : Expliquer quel bouton il faut tester.

EDIT ; Je me répond à moi même...ICRH Ok !

A+

J'ai essayé de nombreuses fois tous les boutons...

En première approche et sauf autres précision de ta part je ne vois pas trop ce qui peut poser problème. Il faudrait préciser le contexte. Est-ce que ça se produit en première ouverture, franchement. Ou au contraire plutôt en plein milieu d'une longue cession de trvail ou tu as déjà pas mal bricolé.

Sans vouloir être désagréable... c'est un code assez primitif :

Déjà tu peux remplacer :

Set Ws = Sheets("Base de données-Destinataires") par :

Set Ws = Feuil4

Ensuite moi je commencerai par virer cette macro qui me semble très susceptible de poser le problème :

AdapterTailleFormAEcran

Donc dans un premier temps tu mets une esperluette juste devant le Call pour voir si le problème subsiste... Et si ça ne suffit pas tu reviens avec des précisions...

A+

Merci d'avoir testé

Le bug est aléatoire

En cliquant sur le bouton E-demande RH et ICRH le bug se produit presque systématiquement.

Cordialement

Réposes simultanées : Relire ma réponse

Ok je vais désactiver le Adaptateur écran mais comment faire pour les définitions en 768 où mes userforms débordent et ou le bouton enregistrer n'est plus accessible ?

Aucun problème pour ta critique
"Sans vouloir être désagréable... c'est un code assez primitif ":

A titre d'info je débute dans la création VBA, je n'ai pas de formation initiale(tu as du t'en apercevoir) je récupère du code à gauche à droite et je bricole

Avec des personnes comme toi j’apprends beaucoup (comme dirai Platon le savoir c'est les autres)

J'ai fait les corrections que tu m'a suggérer mais j'ai toujours des plantages.(peut-être un pb de mémoire)

Cordialement

"peut-être un pb de mémoire"

Je ne pense pas.

C'est toujours sur une ouverture franche que ça plante ?

Tu as le temps d'entrevoir le userform avant que ça plante ou pas ?

Tu as essayé de commenter les Call pour ne plus exécuter cette macro.

Il faut essayer d'être plus descriptif dans tes manips. Evidemment si c'est tout de suite dès le clic que ça plante, Ya pas grand chose à décrire... Mébon.

As-tu d'autres fichiers Excel ouverts. Comment lances-tu ton classeur ?

A+

A titre d'info

Je viens de fermer mon PC

A l'ouverture je lance Excel, j'ouvre mon fichier, je mets le NNI qui fait apparaître les boutons.

Je clique sur le bouton Edmande RH et ICRH (Plantage)

je ne voix pas le userform s'ouvrir, Excel se ferme sans message d'erreur (sans fichier récupéré, sauvegarde excel par défaut quand excel plante).

Pour répondre à ta question sur le moment où cela se produit, il n'y a pas vraiment de moment précis

Cela peut se produire au premier clique comme après avoir déjà rempli d'autres userforms, c'est très aléatoire

Merci pour ta patience

Cordialement

Avant de tenter quelque chose de plus complexe As-tu essayer de supprimer les call que je t'ai indiqués ?

Cela se produit sur tous les NNI ?

Bonjour à tous,

à tout hasard, dans tes noms tu as Matricule à #REF!
As-tu pu reproduire l"erreur avec AdapterTailleFormAEcran désactivé comme demandé par galopin ?

Une fermeture sauvage comme ça est souvent dans l'Initialize. Et comme il n'y a pas grand chose de bizarre à part ça...
eric

Ne cherche pas plus loin !

Pour conclure : Après un examen approfondi...

Chacun de tes UserForm comportent plus de 3000 lignes de codes avec un nombre incalculable de Combo, Label, TextBox et Checkbox pour la plupart identiques.

C'est une limite en générale fatale bien avant : Il faut faire le ménage !

A+

Merci pour vos retours

Pour répondre à Eric oui j'ai désactivé adaptateur, sans succès.

Pour répondre à Galopin

Je me suis pas rendu compte du nombre de lignes et d'objets c'est vrai ça doit être trop lourd pour Excel

En attendant vos retours j'ai cherché partout sur la toile et j'ai peut-être trouvé

Je voudrais savoir ce que vous en pensez ?

En rajoutant "Controls" devant toutes mes "textbox" : Controls("Textbox123")

Ça à l'air de fonctionner, je n'ai pas encore réussi à reproduire le plantage, mais peut-être que je cri victoire trop vite

Pensez-vous que ça peut aider Excel à gérer la lourdeur de mon fichier

Dernière question pour Galopin, quand tu dis que je dois faire du ménage c'est que je dois répartir les éléments de mes "userform " dans plusieurs autres "userform"

La limite de ligne c'est par "Userform" ou c'est global ?

Juste pour savoir si je dois revoir à la baisse les possibilités de mon fichier ?

Merci infiniment pour votre aide

Dans l'attente d'un retour

Cordialement

Hum... C'est toujours pas pour être désagréable hein... On a tous commencé un jour. Mais c'est pas tant revoir à la baisse les possibilités que revoir à la hausse tes compétences !

Je n'ai pas épluché complètement le truc, mais j'ai l'impression qu'avec un seul UserForm et 500 lignes on devrait pouvoir faire la même chose que toi en 10 000 lignes.

La limite d'Excel est inconnue: Elle dépend essentiellement de la quantité de mémoire et de l'utilisation qui en est faite... Dans les pires conditions c'est à dire les tiennes, je pense qu'il peut te lâcher à tout moment. Alors évidemment le moment du chargement des USF est un moment clef...

A+

Personnellement je doute un peu, mais pourquoi pas. Ca serait intéressant que tu fasses un retour après un moment pour confirmer (ou infirmer ).

Une autre piste :
Les contrôles sont parfois longs à monter.
En les initialisant dans UserForm_Activate() tu diminues fortement le risque de chercher à remplir un contrôle non encore chargé complètement, ce qui te donnerait ce résultat.
eric

Bonjour

Merci à tous les 2 pour vos retours et surtout pour votre enthousiasme à essayer de régler mon problème.

Mon niveau de compétence c'est pas un scoop il est très bas.

Je progresse mais il me manque toutes les bases.

Pour Galopin

"un seul UserForm et 500 lignes on devrait pouvoir faire la même chose que toi en 10 000 lignes."

Ré-écrire tout le code pour faire plus simple et plus propre, sans aide j'en suis incapable.

Pour Ericc

Les contrôles sont parfois longs à monter. En les initialisant dans UserForm_Activate()

ok je peux essayer, mais peux-tu me mettre sur la voie en me donnant un exemple

Je dois rendre ce job impérativement pour Février, je n'ai pas le choix, je ne peux plus faire machine arrière.

Je suis ouvert à toutes nouvelles idées(nouvelle logique), pour éventuellement repartir de 0 mais je ne veux pas abuser de votre temps.

A titre d'info je n'arrive plus à faire planter le fichier depuis ma dernière modif(peut-être un coups de chance)

Je vous tiens au courant car comme dit Galopin (je pense qu'il peut te lâcher à tout moment.)

Je reste à l'écoute et je vous remercie une nouvelle fois pour votre aide précieuse et vos critiques (très enrichissantes) pour un "pauvre" comme moi.

A bientôt

Bonne journée

Hum... Moi je pense que c'est impossible dans les délais impartis :

Croise les doigts : il y a parfois des petits malins qui s'amusent à me contredire quand je fais des affirmations aussi tranchantes.

Mébon, dans ce cas ça m'étonnerait beaucoup. Après il faut voir à quoi ça sert. Si c'est censé être opérationnel, c'est pas de chance : Si c'est juste pour présenter à un maître de stage, il aura peut-être une lecture différente.

Mais à mon avis donner ce job à un débutant est une sottise ! Les demandeurs n'ont souvent aucune idée de ce que ça représente ! Avant de te lancer dans des jobs de ce genre demande l'avis de pro... Je le dis sans forfanterie, je n'en suis pas !

A+

Rechercher des sujets similaires à "fermeture aleatoire lancement userform bouton macr"