Erreur: La méthode '_Default' de l'obget 'Range' a échoué

Résolu
bassmart Messages postés 281 Date d'inscription   Statut Membre Dernière intervention   -  
bassmart Messages postés 281 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

J'ai une code qui fonctionnais très bien, jusqu'au moment que j'ai ajouter des lignes de code pour que les colonnes 3, 4 et 5 soit mis en majuscule.

Quand j'ajoute des valeurs tout est Ok, mais j'ai une erreur dès que je supprime une valeur dans l'une de ces colonnes. [erreur d'exécution '-2147417848(80010108)' La méthode '_Default' de l'obget 'Range' à échoué]. Il me pointe alors la dernière ligne Target = Ucase(Target).

Je ne sais pas comment écrire mon code pour éviter ce problème!

Private [/contents/446-fichier-sub Sub] Worksheet_Change(ByVal Target As Range)

ActiveSheet.Unprotect

If Target.Column = 4 Then
Target = UCase(Target)
End If
If Target.Column = 5 Then
Target = UCase(Target)
End If
If Target.Column = 3 Then
Target = UCase(Target)
End If

If Target.Cells.Count > 1 Then Exit Sub
If Target.Row < 5 Or Target.Column <> 5 Then Exit Sub
If Target.Value = "" Then Cells(Target.Row, 1).ClearContents
If Range("A5") <> "" Then
    DLig = Range("E5").End(xlDown).Row
    Set PL = Range("A5:A" & DLig)
    PL.Value = Range("a5").Value
   
End If

ActiveSheet.Protect

End Sub


Merci de votre aide!

1 réponse

  1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    bonjour,

    essayez comme ceci:
    Private Sub Worksheet_Change(ByVal Target As Range)
        ActiveSheet.Unprotect
        If Target.Column >= 3 And Target.Column <= 5 Then
            'desactive les evenements excel: eviter appel recurcif a la suite du passage en majuscule
            Application.EnableEvents = False
            Target = UCase(Target)
        End If
        'active les evenements excel
        Application.EnableEvents = True
    
        If Target.Cells.Count > 1 Then Exit Sub
        If Target.Row < 5 Or Target.Column <> 5 Then Exit Sub
        If Target.Value = "" Then Cells(Target.Row, 1).ClearContents
        If Range("A5") <> "" Then
            DLig = Range("E5").End(xlDown).Row
            Set PL = Range("A5:A" & DLig)
            PL.Value = Range("a5").Value
        End If
        ActiveSheet.Protect
    End Sub
    1
    1. bassmart Messages postés 281 Date d'inscription   Statut Membre Dernière intervention   1
       
      Merci beaucoup f894009!! Ça fonctionne très bien!!
      0