XL 2016 Erreur 1004 - Erreur définie par l'application ou par l'objet

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

ReneDav14000

XLDnaute Occasionnel
Bonjour à tous,
Lorsque j'exécute le code ci-dessous, j'ai le message d'erreur ci-dessus qui apparaît et la dernière ligne du code est surlignée en jaune. D'où provient cette erreur s'il vous plaît ?
Merci par avance pour votre aide

VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Code As Variant
Dim Systeme, Retard As Date

Application.ScreenUpdating = False
    
    If Not Intersect(Target, Range("C3")) Is Nothing Then
        Sheets("BDD").Select
        
            Code = Sheets("BDD").Range("C3").Value
            
                If Not IsError(Application.Match(Code, Sheets("BDD").Range("C6:C1048576"), 0)) Then
                
            Ligne = Application.Match(Code, Sheets("BDD").Range("C6:C1048576"), 0) + 5
            Systeme = Format(Now, "hh:mm")
            
                If Sheets("BDD").Range("G" & Ligne).Value = "" Then
                    Sheets("BDD").Range("G" & Ligne).Value = Systeme
                
                ElseIf Sheets("BDD").Range("H" & Ligne).Value = "" Then
                    Sheets("BDD").Range("H" & Ligne).Value = Systeme
                    
                 ElseIf Sheets("BDD").Range("I" & Ligne).Value = "" Then
                    Sheets("BDD").Range("I" & Ligne).Value = Systeme
                  
                ElseIf Sheets("BDD").Range("J" & Ligne).Value = "" Then
                    Sheets("BDD").Range("J" & Ligne).Value = Systeme
                  
                ElseIf Sheets("BDD").Range("K" & Ligne).Value = "" Then
                    Sheets("BDD").Range("K" & Ligne).Value = Systeme
                  
                ElseIf Sheets("BDD").Range("L" & Ligne).Value = "" Then
                    Sheets("BDD").Range("L" & Ligne).Value = Systeme
                  
                Sheets("BDD").Range("C3").Select
                    Selection.ClearContents
                
                Sheets("BDD").Range("C3").Select
        End If
        End If
       End If
                        
                        DLigne = Range("A1048576").End(xlUp).Row
                            '[B]CETTE LIGNE EN-DESSOUS[/B]                  
                           Sheets("BDD").Range("M6:M" & DL).FormulaLocal = "si(et(G6<>"";H6<>"");H6-G6;si(et(G6<>"";H6="";et(I6<>"";J6=""));"";si(et(G6<>"";H6="";I6;J6<>"");Max_Matin-G6;si(et(G6<>"";H6="";et(K6<>"";L6<>""));"";si(et(G6<>"";H6="";I6="";J6="";K6="";L6<>"");Max_Matin-G6;"")))))"
                            
      
End Sub
 
Solution
Bonjour,

Ecrire à la fin :
VB:
DLigne = Range("A1048576").End(xlUp).Row
If DLigne < 6 Then DLigne = 6
Application.EnableEvents = False
Sheets("BDD").Range("M6:M" & DLigne).FormulaLocal = "=si(et(G6<>"""";H6<>"""");H6-G6;si(et(G6<>"""";H6="""";et(I6<>"""";J6=""""));"""";si(et(G6<>"""";H6="""";I6;J6<>"""");Max_Matin-G6;si(et(G6<>"""";H6="""";et(K6<>"""";L6<>""""));"""";si(et(G6<>"""";H6="""";I6="""";J6="""";K6="""";L6<>"""");Max_Matin-G6;"""")))))"
Application.EnableEvents = True
Comme le dit Dranreb il faut doubler les guillemets dans la formule.

A+
Bonjour


Logiquement je dirais que
DLigne = Range("A1048576").End(xlUp).Row
'CETTE LIGNE EN-DESSOUS
Sheets("BDD").Range("M6:M" & DL).FormulaLocal =...

Devrait plutôt être, non ?

DLigne = Range("A1048576").End(xlUp).Row
'CETTE LIGNE EN-DESSOUS
Sheets("BDD").Range("M6:M" & DLigne ).FormulaLocal =...
 
Bonjour à tous,
Après modification du code comme me l'a suggéré Staple1600, que je remercie, j'ai maintenant cette erreur toujours sur la même ligne. Il copie la ligne de formule en L, je n'y comprends rien.
Merci pour votre aide s'il vous plait.
1665907815499.png
 
Bonjour,

Ecrire à la fin :
VB:
DLigne = Range("A1048576").End(xlUp).Row
If DLigne < 6 Then DLigne = 6
Application.EnableEvents = False
Sheets("BDD").Range("M6:M" & DLigne).FormulaLocal = "=si(et(G6<>"""";H6<>"""");H6-G6;si(et(G6<>"""";H6="""";et(I6<>"""";J6=""""));"""";si(et(G6<>"""";H6="""";I6;J6<>"""");Max_Matin-G6;si(et(G6<>"""";H6="""";et(K6<>"""";L6<>""""));"""";si(et(G6<>"""";H6="""";I6="""";J6="""";K6="""";L6<>"""");Max_Matin-G6;"""")))))"
Application.EnableEvents = True
Comme le dit Dranreb il faut doubler les guillemets dans la formule.

A+
 
Dernière édition:
Il n'empêche qu'on pourrait probablement écrire cette formule d'une façon un peu plus courte, si on parvenait déjà à comprendre d'une façon un peu plus synthétique ce qu'elle est censée faire.
(Quel dommage que dans vos images, celle du message cache les titres …)
 
Dernière édition:
Dranreb,
Merci pour votre proposition. Vous trouverez les explications dans une discussion que j'avais ouverte :
S'il vous manque des éléments, n'hésitez pas à revenir vers moi.
Je joins également le fichier.
 

Pièces jointes

Alors pourquoi tentez vous de liez les 3 paires d'informations alors qu'elles semble indépendantes ?
En M6 :
Code:
=SI([@[Heure départ matin]]>0;SI([@[Heure arrivée matin]]>[@[Heure arrivée matin]];[@[Heure départ matin]]-[@[Heure arrivée matin]];Max_Matin);"")
VB:
Feuil2.[M6].FormulaR1C1 = "=IF([@[Heure départ matin]]>0,IF([@[Heure arrivée matin]]>[@[Heure arrivée matin]],[@[Heure départ matin]]-[@[Heure arrivée matin]],Max_Matin),"""")"
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
479
Réponses
2
Affichages
153
Réponses
8
Affichages
233
Retour