[VBA] Erreur incompatibilité de type

Bonjour à tous,

Lorsque je lance une macro nommé AjouterUneNouvelleLigne qui me donne l'erreur suivante :

image

Comme j'ai pu comprendre, j'ai dû faire une erreur dans la dénomination de mon code présent dans ThisWorkBook et qui causerait cette erreur, mais je ne vois pas ce que j'ai fais de faux. Quelqu'un peut-il m'éclairer sur mon problème ?

Le code dans ThisWorkBook :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 4 And Target.Row > 6 Then
    If (Target.Row - 7) Mod 7 = 0 Then
        If Target.Offset.Value = "" Then Target.Offset.Value = "Couleur"
    End If
    If Target.Value = "Couleur" Then
        Target.Font.ColorIndex = 1
        Target.Interior.ColorIndex = 2
    Else
        If Target.Value > Range("T2").Value + 2 Or Target.Value < Range("T2").Value - 2 Then
            Target.Font.ColorIndex = 1
            Target.Interior.ColorIndex = 6
        Else
            Target.Font.ColorIndex = 1
                Target.Interior.ColorIndex = 2
            End If
        End If
End If
End Sub

Cédric.

6cedric-test.xlsm (218.55 Ko)

Bonjour,

La macro "Sub AjouterUneNouvelleLigne()" modifie la feuille ...

Or cette feuille a elle-même une macro événementielle "Private Sub Worksheet_Change(ByVal Target As Range)" ...

D'où un conflit entre les deux > la 1re actionne la 2e et l'erreur survient ...

Une suggestion en désactivant temporairement les événements ...

Voir les 2 lignes marquées '' << Ajout" ...

Sub AjouterUneNouvelleLigne()
Application.ScreenUpdating = False
Application.EnableEvents = False    '' << Ajout
On Error Resume Next
    If ActiveSheet.Range("D2").Value = "Template" Then
        MsgBox "Action non autorisé sur le template !"
        Exit Sub
    End If
    If ActiveSheet.Range("B1").Value = "Changement de la sonde thermocouple" Then
        Dim strPw As String
        strPw = "lu"

        If InputBox("La sonde thermocouple a été changée sur ce torréfacteur et l'adaptation de la température sur cette qualité n'a pas encore été faite et nécessite de l'adapter en conséquence ! Écrivez ""lu"" pour confirmer la lecture de ce message ou cliquez sur ""Annuler"".", "Changement de la sonde thermocouple") <> strPw Then
        Exit Sub
        Else
        Range("B1").FormulaR1C1 = ""
        End If
    End If
    ActiveSheet.Rows("6:12").Insert Shift:=xlDown = Worksheets("Template").Rows("6:12").Copy
    Rows("6:12").PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    Sheets("Template").Visible = False
    Range("D11:W12").ClearContents
    Range("AE13").Formula = "=IF(AND(B15=""Température du torréfacteur (si démarrage à froid) ?"",B8=""Température du torréfacteur (si démarrage à froid) ?""),"""",""Démarrage à froid"")"
    Range("AE14").Formula = "=IF(AND(B15=""Température du torréfacteur (si démarrage à froid) ?"",B8=""Température du torréfacteur (si démarrage à froid) ?""),"""",""Démarrage à froid"")"
    Range("AE15").Formula = "=IF(AND(B15=""Température du torréfacteur (si démarrage à froid) ?"",B8=""Température du torréfacteur (si démarrage à froid) ?""),"""",""Démarrage à froid"")"
    Range("AE16").Formula = "=IF(AND(B15=""Température du torréfacteur (si démarrage à froid) ?"",B8=""Température du torréfacteur (si démarrage à froid) ?""),"""",""Démarrage à froid"")"
    Range("AE17").Formula = "=IF(AND(B15=""Température du torréfacteur (si démarrage à froid) ?"",B8=""Température du torréfacteur (si démarrage à froid) ?""),"""",""Démarrage à froid"")"
    Range("AE18").Formula = "=IF(AND(B15=""Température du torréfacteur (si démarrage à froid) ?"",B8=""Température du torréfacteur (si démarrage à froid) ?""),"""",""Démarrage à froid"")"
    Range("AE19").Formula = "=IF(AND(B15=""Température du torréfacteur (si démarrage à froid) ?"",B8=""Température du torréfacteur (si démarrage à froid) ?""),"""",""Démarrage à froid"")"
    Range("C10").Value = "=C17"
    With Range("B9:C9").Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=OFFSET(Template!$A$13,0,0,COUNTA(Template!$A:$A))"
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = "Erreur"
        .InputMessage = ""
        .ErrorMessage = "Merci de sélectionner une qualité présente dans la liste déroulante !"
        .ShowInput = True
        .ShowError = True
    End With
    Range("B6").Select
    Range("B6").Select
Application.EnableEvents = True  '' << Ajout
End Sub

ric

Merci, c'est parfait !

Petite question encore si je peux me permettre, j'ai remarqué que si dans la cellule T2 j'ai du texte à la place d'une valeur numérique, il me met quand même la même erreur. Est-ce possible de contourner ça également ?

Cédric.

Bonjour,

Étant donné que la cellule "T2" a un format personnalisé > si c'est possible > je ne sais pas comment faire ...

Désolé ...

ric

Pas de soucis, merci quand même d'avoir essayé .

Pendant que tu es dans les parages, tu vois qu'est-ce qui coince dans mon code suivant ? :
(Du premier bloc (ligne 6 à 10) les conditions marchent, puis pour les blocs suivants les deux conditions s'entremêlent et ça ne marche plus correctement.)

If Target.Column = 4 And Target.Row > 5 Then
    If (Target.Row - 6) Mod 7 = 0 Then
        If Target.Offset.Value = "" Then Target.Offset.Value = "Température"
        Else
            If Target.Value = "Température" Then
                Target.Font.ColorIndex = 15
                Target.Interior.ColorIndex = 2
        Else
            Target.Font.ColorIndex = 1
            Target.Interior.ColorIndex = 2
        End If
    End If
End If

If Target.Column = 4 And Target.Row > 6 Then
    If (Target.Row - 7) Mod 7 = 0 Then
        If Target.Offset.Value = "" Then Target.Offset.Value = "Couleur"
        Else
            If Target.Value = "Couleur" Then
                Target.Font.ColorIndex = 15
                Target.Interior.ColorIndex = 2
        Else
            Target.Font.ColorIndex = 1
            Target.Interior.ColorIndex = 2
        End If
    End If
End If

Bonjour,

Pas sûr d'avoir bien compris le traitement désiré ...

Un essai ...

   If Target.Column = 4 And Target.Row > 5 Then
      If (Target.Row - 6) Mod 7 = 0 Then
         If Target.Offset.Value = "" Then Target.Offset.Value = "Température"
         If Target.Value = "Température" Then
            Target.Font.ColorIndex = 15
            Target.Interior.ColorIndex = 2
         Else
            Target.Font.ColorIndex = 1
            Target.Interior.ColorIndex = 2
         End If
      End If
   End If

   If Target.Column = 4 And Target.Row > 6 Then
      If (Target.Row - 7) Mod 7 = 0 Then
         If Target.Offset.Value = "" Then Target.Offset.Value = "Couleur"
         If Target.Value = "Couleur" Then
            Target.Font.ColorIndex = 15
            Target.Interior.ColorIndex = 2
         Else
            Target.Font.ColorIndex = 1
            Target.Interior.ColorIndex = 2
         End If
      End If
   End If

ric

Bonjour,

2 syntaxes pour le If : sur 1 ligne ou sur plusieurs lignes.

If Target.Offset.Value = "" Then Target.Offset.Value = "Couleur"
If sur 1 ligne, le Else suivant s'applique au If précédent.
Mauvaise indentation de ton code pour le voir.

eric

de rien...

Bonjour à tous,

@ eriiic ...
Excuse-moi de ne pas avoir répondu plus tôt à ta suggestion d'amélioration ...

J'ai pas mal décroché du forum dernièrement > j'ai perdu passablement de motivation ...

Une claque de Troll > ça laisse des traces ...

Quoi qu'il en soit > je te remercie de l'aide que tu nous apportes ...

Je reviendrai regarder cela dès que cela sera possible ...

En attendant > bon printemps ...

ric

Bonjour,

Ah mais ce n'était pas du tout pour toi, ta réponse est correcte.
J'expliquais au demandeur le pourquoi de son erreur qu'il progresse.
J'avais oublié pourquoi je l'avais mis en liste noire et j'ai quand même répondu, ça s'est éclairci...

J'ai pas mal décroché du forum dernièrement > j'ai perdu passablement de motivation ..

c'est pourquoi je suis de plus en plus sélectif .
Un de plus qui apparait surligné
eric

Bonjour à vous deux ;-),

Désolé de ne pas avoir répondu, j'ai cru que j'avais répondu mais c'est qu'en voyant vos messages ce matin que j'ai réalisé que non.
Je peux comprendre votre mécontentement et je comprendrais si à l'avenir vous ne vouliez plus répondre à mes sujets.

Un grand merci à vous deux pour votre aide, les solutions proposés marchent !

Bonjour à tous,

@ cedric-pillonel ...

Je répondrai à tes futurs demandes avec plaisir > quand elles seront dans la plage de mes connaissances ...

A+

ric

Merci

Rechercher des sujets similaires à "vba erreur incompatibilite type"