Bug Excel à l'exécution de la macro
Bonjour,
Je n'ai pas trouvé de sujet semblable donc j'en ouvre un.
Voilà un fichier. Avant: pas de problème, tout s'exécutait parfaitement. Tout d'un coup, un jour, quand je l'exécute (cad que j'entre les initiales de prénoms dans la colonne A et que la macro doit automatiquement mettre le nom complet dans la colonne B), Excel bug et me met qu'il a rencontré un problème et qu'il doit redémarrer.
Pour info: la macro ne marche qu'à partir de la ligne 618.
Une idée du problème s'il vous plaît?
Bonjour,
Avec ton code, lorsqu’une modification est détectée dans la feuille ‘’ FNED 2014’’ on vérifie si la valeur de la cellule placée en colonne A, sur la même ligne que la cellule modifiée, fait partie de la liste des initiales de noms.
Si c’est le cas, on inscrit le nom complet dans la cellule adjacente en colonne B.
Le problème, c’est que cette inscription constitue une nouvelle modification dans la feuille ‘’ FNED 2014’’. Le programme est donc relancé et on effectue la même vérification, etc, etc... le programme se mord la queue.
Voici une proposition pour pallier ce dysfonctionnement
A+
Bonjour le fil
Une parade toute simple et efficace est d'arrêté les événements avant modification
et de ré-activer les événements après
Application.EnableEvents = False
' ....
Application.EnableEvents = TrueDans ton fichier, voici le code optimisé
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Initiales As String, Lig As Long, sNom As String
Dim RngSearch As Range, LigF As Long
' Mémoriser la ligne active
Lig = ActiveCell.Row
' Récupérer les initiales saisie
Initiales = Target.Value
' Si vide ou suppression des initiales
If Initiales = "" Then
' Désactiver les événements avant modification
Application.EnableEvents = False
' Effacer le nom si existe
Cells(Lig, 2).ClearContents
' Ré-activer les événements
Application.EnableEvents = True
' Sortir de la procédure
Exit Sub
End If
' Chercher dans la table des émetteurs
With Sheets("index")
' Définir la plage de recherche
Set RngSearch = .Range("A6:A" & .Range("A" & Rows.Count).End(xlUp).Row)
' Eviter les erreur si initiales non trouvée
On Error Resume Next
' Trouver la ligne correspondante
LigF = 0
LigF = RngSearch.Find(What:=Initiales).Row
On Error GoTo 0
' Si la ligne a été trovuée, récupérer le nom
If LigF <> 0 Then sNom = .Range("B" & LigF).Value
End With
' Effacer les variable objet
Set RngSearch = Nothing
' Désactiver les événements avant modification
Application.EnableEvents = False
' Inscrire le nom de la personne
Cells(Lig, 2).Value = sNom
' Ré-activer les événements
Application.EnableEvents = True
End SubA+
J'avais pas vu vos réponses!! C'est génial en tout cas! Je vous remercie bien!