Erreur incompatibilité de type Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
Avatar du membre
vip4rk
Jeune membre
Jeune membre
Messages : 31
Inscrit le : 17 janvier 2020
Version d'Excel : 2016 FR

Message par vip4rk » 17 janvier 2020, 20:42

Rebonsoir,

J'ai bien avancé sur la customisation de mon fichier Excel; ceci dit j'ai une erreur quand j'exécute l'action suivante :
sélection d'une plage de cellule manuellement et suppression de leur contenu => cela dérange mon code vba a priori => "Erreur d'exécution 13, incompatibilité de type".
La plage de cellule que je supprime est effectivement une plage concernée par mes lignes de code...

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

'On facilite la saisie de l'utilisateur en préremplissant certaines cellules

'Extensions
If Target.Address = "$E$16" And Target.Value = "Non" Then
    [E17] = "NA"
    [E18] = "NA"
End If
If Target.Address = "$E$16" And Target.Value = "Oui" Then
    [E17] = "Oui"
    [E18] = "Non"
End If

'Clés
If Target.Column = 3 And (Target.Row >= 22 And Target.Row <= 50) Then
    If Target.Value = "Clé" Then
        Target.Offset(0, 2) = "NA"
        Target.Offset(0, 3) = "NA"
        Target.Offset(0, 4) = "NA"
        Target.Offset(0, 5) = "NA"
    End If
End If

'Cylindres
If Target.Column = 3 And (Target.Row >= 22 And Target.Row <= 50) Then
    If Target.Value = "Cylindre" Then
        Target.Offset(0, 4) = "Standard (Laiton nickelé satiné)"
        Target.Offset(0, 5) = "NA"
    End If
End If

'Double entrée
If Target.Column = 4 And (Target.Row >= 22 And Target.Row <= 50) Then
    If Target.Value = "Double entrée" Then
        Target.Offset(0, 1) = "31,5"
        Target.Offset(0, 2) = "31,5"
    End If
End If

'Boutons
If Target.Column = 4 And (Target.Row >= 22 And Target.Row <= 50) Then
    If Target.Value = "Bouton" Then Target.Offset(0, 4) = "Standard (forme H)"
End If

'Demi-cylindres
If Target.Column = 4 And (Target.Row >= 22 And Target.Row <= 50) Then
    If Target.Value = "Demi-cylindre" Then
        Target.Offset(0, 1) = "10"
        Target.Offset(0, 2) = "31,5"
    End If
End If

End Sub
Une exécution pas à pas détaillée me mène à la première ligne de code mais pourtant cette ligne ainsi que l'ensemble de mon code fonctionne.

Comment empêcher l’apparition de ce message d'erreur quand je veux reset mes cellules?

Merci d'avance pour votre aide :)

Vip4rk
Avatar du membre
LouReeD
Contributeur
Contributeur
Messages : 6'261
Appréciations reçues : 280
Inscrit le : 14 octobre 2014
Version d'Excel : 2013 FR, 2016 FR
Contact :
Téléchargements : Mes applications

Message par LouReeD » 17 janvier 2020, 20:58

Bonsoir,

en début de code vous pouvez essayer de mettre :
If Target.CountLarge > 1 Then Exit Sub
ce qui a pour effet de sortir du code si une sélection multiple est faite

@ bientôt

LouReeD
1 membre du forum aime ce message.
Quelques règles à lire ICI ;;)
______________________________________________________Vous pouvez allez faire un tour sur : Index de "Mes applications" ;;)
Avatar du membre
LouReeD
Contributeur
Contributeur
Messages : 6'261
Appréciations reçues : 280
Inscrit le : 14 octobre 2014
Version d'Excel : 2013 FR, 2016 FR
Contact :
Téléchargements : Mes applications

Message par LouReeD » 17 janvier 2020, 21:01

Vous pourriez également faire ceci :
mettre en commun :
If Target.Column = 3 And (Target.Row >= 22 And Target.Row <= 50) Then
et ensuite imbriquer les test pour connaître la forme

@ bientôt

LouReeD
1 membre du forum aime ce message.
Quelques règles à lire ICI ;;)
______________________________________________________Vous pouvez allez faire un tour sur : Index de "Mes applications" ;;)
Avatar du membre
vip4rk
Jeune membre
Jeune membre
Messages : 31
Inscrit le : 17 janvier 2020
Version d'Excel : 2016 FR

Message par vip4rk » 17 janvier 2020, 21:04

Merci énormément @LouReeD ça marche nikel!! :)

Et de plus ton conseil est effectivement approprié et logique haha :-)))

Vip4rk
Avatar du membre
LouReeD
Contributeur
Contributeur
Messages : 6'261
Appréciations reçues : 280
Inscrit le : 14 octobre 2014
Version d'Excel : 2013 FR, 2016 FR
Contact :
Téléchargements : Mes applications

Message par LouReeD » 17 janvier 2020, 21:11

Pour le fun j'ai réduit votre code :
Private Sub Worksheet_Change(ByVal Target As Range)
    ' s'il y a une sélection multiple on quitte
    If Target.CountLarge > 1 Then Exit Sub
    'On facilite la saisie de l'utilisateur en préremplissant certaines cellules
    'Extensions
    If Target.Address = "$E$16" Then
        If Target.Value = "Non" Then
            [E17] = "NA"
            [E18] = "NA"
        ElseIf Target.Value = "Oui" Then
            [E17] = "Oui"
            [E18] = "Non"
        End If
    End If
    If Target.Row >= 22 And Target.Row <= 50 Then
    If Target.Column = 3 Then
        'Clés
        If Target.Value = "Clé" Then Target.Offset(0, 2).Resize(, 4) = "NA"
        'Cylindres
        If Target.Value = "Cylindre" Then
            Target.Offset(0, 4) = "Standard (Laiton nickelé satiné)"
            Target.Offset(0, 5) = "NA"
        End If
    ElseIf Target.Column = 4 Then
        'Double entrée
        If Target.Value = "Double entrée" Then
            Target.Offset(0, 1) = "31,5"
            Target.Offset(0, 2) = "31,5"
        End If
        'Boutons
        If Target.Value = "Bouton" Then Target.Offset(0, 4) = "Standard (forme H)"
        'Demi-cylindres
        If Target.Value = "Demi-cylindre" Then
            Target.Offset(0, 1) = "10"
            Target.Offset(0, 2) = "31,5"
        End If
    End If
End Sub
@ voir si ça marche toujours !

@ bientôt

LouReeD
1 membre du forum aime ce message.
Quelques règles à lire ICI ;;)
______________________________________________________Vous pouvez allez faire un tour sur : Index de "Mes applications" ;;)
Avatar du membre
curulis57
Passionné d'Excel
Passionné d'Excel
Messages : 3'717
Appréciations reçues : 217
Inscrit le : 4 janvier 2016
Version d'Excel : 2016 FR / 2019 FR

Message par curulis57 » 17 janvier 2020, 21:24

Salut vip4rk,
Salut LouReed,

décidément, aujourd'hui, je suis toujours prêt après la guerre :lole:
Private Sub Worksheet_Change(ByVal Target As Range)
'
'On facilite la saisie de l'utilisateur en préremplissant certaines cellules
'
If Selection.Count > 1 Then Exit Sub
Application.EnableEvents = False
'
'Extensions
If Not Intersect(Target, Range("E16")) Is Nothing Then
    [E17] = IIf(Target = "Oui", "Oui", "NA")
    [E18] = IIf(Target = "Oui", "Non", "NA")
End If
'Clés
If Not Intersect(Target, Range("C22:C50")) Is Nothing Then
    If Target.Value = "Clé" Then Target.Offset(0, 2).Resize(1, 4).Value = "NA"
    If Target.Value = "Cylindre" Then
        Target.Offset(0, 4) = "Standard (Laiton nickelé satiné)"
        Target.Offset(0, 5) = "NA"
    End If
End If
'Double entrée
If Not Intersect(Target, Range("D22:D50")) Is Nothing Then
    If Target.Value = "Double entrée" Then Target.Offset(0, 1).Resize(1, 2).Value = 31.5
    If Target.Value = "Bouton" Then Target.Offset(0, 4) = "Standard (forme H)"
    If Target.Value = "Demi-cylindre" Then
        Target.Offset(0, 1) = "10"
        Target.Offset(0, 2) = "31,5"
    End If
End If
'
Application.EnableEvents = True
'
End Sub
8-)
A+
1 membre du forum aime ce message.
Avatar du membre
vip4rk
Jeune membre
Jeune membre
Messages : 31
Inscrit le : 17 janvier 2020
Version d'Excel : 2016 FR

Message par vip4rk » 17 janvier 2020, 21:47

Purée merci les gars je vais utiliser votre code !

Un grand merci!

C'est passionnant le vba quand même :D

Vip4rk
Avatar du membre
LouReeD
Contributeur
Contributeur
Messages : 6'261
Appréciations reçues : 280
Inscrit le : 14 octobre 2014
Version d'Excel : 2013 FR, 2016 FR
Contact :
Téléchargements : Mes applications

Message par LouReeD » 17 janvier 2020, 21:50

Bonsoir curulis57 !
je n'avais pas vu la "double entrée" ! et le reste non plus ! :lol:

@ bientôt

LouReeD
Quelques règles à lire ICI ;;)
______________________________________________________Vous pouvez allez faire un tour sur : Index de "Mes applications" ;;)
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message