Excel a cessé de fonctionner . . . Quoi Faire ?

Bonsoir vba-new,

OK, je vais mettre le niveau de sécurité à "faible" et je verrai demain ce que cela donne au fur et à mesure de mes modifs.

Bonsoir et merci.

Bonsoir,

De mon coté pas de souci pour ouvrir ton fichier sauf un pb sur --> "lgedit"

Toutefois pour fermer excel, je n'y arrive plus. Il me faut utiliser la manière forte.

A la vue de ton fichier, je pense que tu devrais déjà ouvrir sans mettre les macros puis éliminer tous les modules où il n'y a pas de macro.

Il y a à peu près 60 modules dans ton fichier !!!. Il me semble que tu devrais mettre de l'ordre dans tous cela.

Beaucoup d'instructions ne servent à rien, des variables non déclarées, etc...

A voir mais il y a de fortes chances que tes pb soient solutionnés rien que par cela.

A te relire

Dan

Bonjour Nad Dan,

D'accord avec toi j'ai bien trop de modules vides mais je ne sais pas comment ils arrivent.

Je vais les supprimer, mais en même temps, il me semble intéressant de nommer les vivants. Je l'ai fait une fois mais je ne me souviens plus comment on fait ! . . .

Qu'est-ce que lgedit ?

Re,

Les modules sont créés à chaque fois que tu utilises l'enregistreur automatique de macro d'excel.

Le mieux est de regrouper tes macros dans quelques modules plutôt qu'une macro par module. Exemple un module par thème ou un module global reprenant toutes les macros.

Tu peux par exemple faire un module pour les mises en forme, un module pour les recherches, etc...

Pour nommer un module :

  • ALT + F11 pour accéder à VBA
  • CTRL +R pour afficher VBA project
  • un click sur le module puis appuies sur F4 pour avoir accès aux propriétés
  • Sous l'onglet "alphabétique" , rubrique (NAME), mets le nom que tu souhaites

Amicalement

Dan

Bonjour Nad Dan,

Je viens de faire la grosse opération de nettoyage avec les informations que tu m'as communiquées.

C'est beaucoup plus "joli" mais surtout utile et efficace.

J'ai désormais 7 modules ayant chacun une fonction bien identifiée (j'ai regroupé les procédures spécifiques à chaque fonction dans un même module). Je les ai nommés et j'ai supprimé tous les modules vides.

J'ai ramené le niveau de sécurité des macro à "moyen" et je vais voir ce que ça va donner.

Je te tiendrai au courant.

Bonjour vba-new,

J'ai mis en application les conseils de Nad-Dan concernant :

1) le regroupement de mes procédures dans des modules "génériques"

2) la suppression de tous les modules vides

J'ai ensuite remonté le niveau de sécurité des macros à "moyen" et pour l'instant je n'ai plus de problèmes.

Il m'en reste un qui est probablement un problème de logique d'enchaînement de procédures que je n'arrive pas à solutionner depuis une semaine :

Dois-je ouvrir une nouvelle question ou puis-je la poser ici ? N'hésite pas à m'envoyer ballader si ce n'est pas conforme à l'éthique du forum.

Mais si ça l'est, voici en gros :

J'ai une feuille "Accueil" dans laquelle des cellules sont soumises à la fonction Intersect pour lancer Fonction 1 (en cellule C7), Fonction 2 (en cellule C9), Fonction 3 (en cellule C11.

Je lance fonction 3 (saisie de données ) à partir de la cellule C11 de "Accueil" et la saisie se déroule.

A la fin : Question Voulez-vous continuer ?

Si je réponds NON à la fin de la première saisie, tout va bien, je fais un Sheets("Accueil").Select qui me ramème proprement à la feuille d'Accueil.

Si je réponds NON après la 2ème ou 3ème etc. . . saisie, avec la même procédure de sortie, il enchaîne sur la fonction 1 de la feuille "Accueil", c'est à dire qu'il semble avoir sollicité la cellule C7 !

Ci-dessous, le code de la feuille "Accueil"

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)

If Not Intersect(Target, Range("C7")) Is Nothing Then

Range("B2").Select

Call CLASSEUR_CREATION

End If

'

If Not Intersect(Target, Range("C9")) Is Nothing Then

Range("B2").Select

Call CALENDRIER_CREATION

End If

'

If Not Intersect(Target, Range("C11")) Is Nothing Then

Range("B2").Select

Call SAISIE_ACTIVITE

End If

'

End Sub

Re,

effectivement tu aurais pu ouvrir une nouveau fil ou utiliser un ancien parlant du même sujet. Mais laisse je te réponds sur celui-ci.

Sans voir le fichier que tu as modifié tu peux essayer ceci :

1. Dans le module "Déclarationvariables...." mets cette instruction

Public Ok As Boolean

2. Dans la feuille "Accueil" remplace ton code par celui-ci :

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
If Ok = True Then Exit Sub
If Not Intersect(Target, Range("C7")) Is Nothing Then
Ok = True
    Range("B2").Select
    Call CLASSEUR_CREATION
Ok = False
End If
'
If Not Intersect(Target, Range("C9")) Is Nothing Then
Ok = True
    Range("B2").Select
    Call CALENDRIER_CREATION
Ok = False
End If
'
If Not Intersect(Target, Range("C11")) Is Nothing Then
Ok = True
    Range("B2").Select
    Call SAISIE_ACTIVITE
    Ok = False
End If
End Sub

Il me semble que tu aurais pu aussi éviter les Range("B2").select si ta macro était :

Private Sub Worksheet_Change(ByVal Target As Range)
...le code...
End Sub

A vérifier évidemment avec ton fichier.

Amicalement

Dan

Bonjour Nad Dan,

Merci d'avoir accepté de prendre en charge mon problème de "Logique de programmation"

1) Concernant celui de "Excel a cessé de fonctioner" malgré le gros ménage fait dans mes modules comme tu me l'as conseillé, ça continue de le faire, sans raison apparente. Je m'en sors en faisant une copie à chaque modif pour pouvoir récupérer la version antérieure quand ça plante . . . mais c'est pas une vie !

Pour le 2ème problème : c'est mieux avec tes modifs sur les fonctions Intersect de ma page d'Accueil, mais il y a un nouveau problème (lié sans doute à ma mauvaise connaissance de la réaction de VBA en sortie de procédures) :

Je retourne bien à la feuille "Accueil" (je la vois apparaître 1/10ème de seconde dans son intégrité, mais elle s'efface apparemment par l'exécution de la macro "SAISIE-ACTIVITE_CLEAR_TOUT qui devrait être effective sur la feuille "Saisie" et pas sur la feuille "Accueil").

On a l'impression que l'ordre d'affichage de la page "Accueil") qui est après l'appel de la procédure de nettoyage de la feuille "Saisie" se fait avant l'exécution de la procédure de nettoyage, car c'est elle qui "nettoie la feuille "Accueil" que je retrouve vide.

Ci- après : La fin de ma procédure directrice ( "SAISIE_ACTIVITE")

' ********* DECISION : Continuer ou pas

Call USF_SAISIE_CONTINUER ' A ce moment, je suis dans la feuille "Saisie"

Range("B2").Select

If Range("AK8").Value = "oui" Then

Range("AK1:AL20").Select

Selection.ClearContents

Call SAISIE_ACTIVITE ' on fait un nouveau tour de saisie

End If

FIN_ACTIVITE:

Call SAISIE_ACTIVITE_CLEAR_TOUT ' on nettoie la feuille "Saisie"

Sheets("Accueil").Select

Range("B2").Select

End Sub

re,

Pour ton premier pb, c'est un peux bizarre car je n'ai apzs ce pb.

Pour ton deuxième pb, la macro Call SAISIE_ACTIVITE_CLEAR_TOUT doit s'exécuter sur la feuille SAISIE. Es-tu sur que tes instructions le spécifie bien ?

Dan

Nad Dan,

J'ai bien vérifié, la macro "SAISIE_ACTIVITE_CLEAR_TOUT" s'applique bien à la feuille "Saisie"

Ce qui est très curieux est que ça marche parfaitement si j'arrête après la premiière saisie. Dans ce cas je retourne bien à la feuille "Accueil" qui reste intègre.

Par contre, si je réponds "terminé" au delà de la première saisie (c'est à dire si j'ai répondu au moins une fois "oui on continue", là je retourne bien à la feuille "Accueil" lorsqu'enfin je réponds "terminé", mais la feuille "Accueil" s'efface ! . .

Bonjour à toutes et à tous,

mon problème est résolu, j'avais un horrible conflit d'appel de procédure dans mon module directeur qui me renvoyait a l'appel d'un USF qui faisait la même chose . . .

Bref une soupe pas possible.

Depuis que j'ai corrigé cette embrouille, Excel ne plante plus.

Merci à tous . . .

Rechercher des sujets similaires à "cesse fonctionner quoi"