[VBA] Erreur incompatibilité de type
Bonjour à tous,
Lorsque je lance une macro nommé AjouterUneNouvelleLigne qui me donne l'erreur suivante :
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.
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
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