Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Autres VBA - Erreur d'exécution '13'

Elisa47

XLDnaute Nouveau
Bonjour le forum,

Dans un tableau, j'ai un code qui me permet de détecter les doublons et de les supprimer.
Le code fonctionne correctement, mais si je sélectionnne plusieurs cellules et que je supprime les valeurs de ces cellules, j'ai le message suivant :
Erreur d’exécution ‘13’:
Incompatibilité de type

Voici le code :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)

If Application.WorksheetFunction.CountIf(Range("b2:f35"), Target) > 1 Then
    If MsgBox("Attention ce joueur est déjà dans la grille." & Chr(10) & "Veux-tu l'effacer ?", vbYesNo + vbQuestion) = vbYes Then
        If vbYes Then
            Target.Value = ""
        Else
            Exit Sub
        End If
    End If
End If

End Sub

Merci pour votre aide
 

Pièces jointes

  • exemple.xlsm
    14.4 KB · Affichages: 1

TooFatBoy

XLDnaute Barbatruc
Bonjour,

Le code fonctionne correctement
Certes, mais au niveau de sa logique il me semble ne pas être bon.


VB:
    If MsgBox("Attention ce joueur est déjà dans la grille." & Chr(10) & "Veux-tu l'effacer ?", vbYesNo + vbQuestion) = vbYes Then
        If vbYes Then
            Target.Value = ""
        Else
            Exit Sub
        End If
    End If

1- Le "Exit Sub" ne sert à rien puisqu'il n'y a aucune instruction ensuite jusqu'à la fin de la macro.

2- Ici on ne teste pas la réponse de l'utilisateur, on teste simplement la valeur de vbYes. Donc quelle que soit la réponse de l'utilisateur, le résultat du test sera toujours le même.

3- Le "Exit Sub" ne sert à rien puisque, comme expliqué au point numéro 2, on ne passera jamais par le "Else".


Une seule ligne devrait suffire :
VB:
    If MsgBox("Attention ce joueur est déjà dans la grille." & Chr(10) & "Veux-tu l'effacer ?", vbYesNo + vbQuestion) = vbYes Then Target.ClearContents
 
Dernière édition:

Elisa47

XLDnaute Nouveau
Bonjour TooFatBoy,

Merci beaucoup pour vos remarques. Effectivement, c'est beaucoup mieux ainsi.
Pour écrire ce code je m'étais servi d'une vidéo trouvée sur internet ..., mes connaissances en VBA étant très limitées.
Encore merci.
 

Discussions similaires

Réponses
1
Affichages
256
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…