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

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

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+

Staple1600

XLDnaute Barbatruc
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 =...
 

ReneDav14000

XLDnaute Occasionnel
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.
 

ReneDav14000

XLDnaute Occasionnel
MAX_Matin se trouve dans la feuille "Données" et c'est le nom d'une cellule, alors que la formule se trouve dans la feuille "BDD", le nom est valable pour tout le classeur, il faut peut-être que je l'indique dans la formule ?
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Il faut un quatre guillemets consécutifs pour spécifier la constante texte vide.
Si, à défaut de joindre le classeur, vous nous expliquiez exactement à quelle condition vous voulez que M6 soit égal Max_Matin-G16 …
 

job75

XLDnaute Barbatruc
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:

Dranreb

XLDnaute Barbatruc
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:

ReneDav14000

XLDnaute Occasionnel
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

  • Projet_Yannick(3).xlsm
    319.2 KB · Affichages: 1

Dranreb

XLDnaute Barbatruc
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),"""")"
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…