Erreur VBA "erreur d'exécution '13' : incompatibilité de type"

Résolu/Fermé
rolynx Messages postés 73 Date d'inscription mardi 12 février 2008 Statut Membre Dernière intervention 10 avril 2014 - 11 mars 2014 à 21:30
rolynx Messages postés 73 Date d'inscription mardi 12 février 2008 Statut Membre Dernière intervention 10 avril 2014 - 12 mars 2014 à 19:01
Bonjour à tous,

Je débute en VBA et aimerais un coup de pouce.
Je souhaite, sur un tableau excel, lorsque j'insère la lettre T dans la première colonne :
- toutes les cellules de cette ligne soient vidées jusqu'à la 9eme colonne
- Et qu'une ligne soit créée en dessous de celle où je me trouve.

J'arrive à réaliser ces fonctions mais dès que je les teste une erreur apparaît "erreur d'exécution '13' : incompatibilité de type"

Voici mon code ! J'ai remarqué que lorsque que j'enlève les 2 lignes ayant la fonction de rajouter la ligne je n'ai plus d'erreur. Mais je n'ai pas assez de connaissance pour trouver mon erreur malgré tous les renseignements que j'ai pu récupérer sur le net.

Private Sub Worksheet_Change(ByVal Target As Range)


If Target.Column = 1 And Target.Value = "T" Then
Cells(Target.Row, 2).ClearContents
Cells(Target.Row, 3).ClearContents
Cells(Target.Row, 4).ClearContents
Cells(Target.Row, 5).ClearContents
Cells(Target.Row, 6).ClearContents
Cells(Target.Row, 7).ClearContents
Cells(Target.Row, 8).ClearContents
Cells(Target.Row, 9).ClearContents
Cells(ActiveCell.Row, 1).EntireRow.Select
Selection.Insert Shift:=xlDown
End If
End Sub


Merci de votre aide !!!

3 réponses

pilas31 Messages postés 1823 Date d'inscription vendredi 5 septembre 2008 Statut Contributeur Dernière intervention 24 avril 2020 634
12 mars 2014 à 01:15
Bonjour,

L'erreur vient du fait que l'évènement se produit autant de fois qu'il y a des modifications (même à l'intérieur de la macro récursivement). Il faut donc neutraliser la gestion des événements à l'intérieur de la macro comme ceci :
Private Sub Worksheet_Change(ByVal Target As Range)
 If Target.Column = 1 And Target.Value = "T" Then
    Application.EnableEvents = False
    Cells(Target.Row, 2).ClearContents
    Cells(Target.Row, 3).ClearContents
    Cells(Target.Row, 4).ClearContents
    Cells(Target.Row, 5).ClearContents
    Cells(Target.Row, 6).ClearContents
    Cells(Target.Row, 7).ClearContents
    Cells(Target.Row, 8).ClearContents
    Cells(Target.Row, 9).ClearContents
    Cells(ActiveCell.Row, 1).EntireRow.Select
    Selection.Insert Shift:=xlDown
    Application.EnableEvents = True
 End If
End Sub
3
eriiic Messages postés 24494 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 29 janvier 2023 7 156
12 mars 2014 à 11:09
Bonjour,

en complément tu peux remplacer tous tes .clearcontents par un seul :
Cells(Target.Row, 2).resize(,8).ClearContents

eric
2
rolynx Messages postés 73 Date d'inscription mardi 12 février 2008 Statut Membre Dernière intervention 10 avril 2014 9
12 mars 2014 à 19:01
Merci pilas31 et eriiic pour votre aide !
0