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+

Dranreb

XLDnaute Barbatruc
Pareil, pourquoi tenez vous compte des colonnes J à L pour calculer ce qui ne dépend que de G et H ?
En M6 :
Code:
=SI(G6<>"";SI(H6>G6;H6-G6;MAX_Matin);"")
VB:
Feuil12.[M6].FormulaR1C1 = "=IF(RC[-6]<>"""",IF(RC[-5]>RC[-6],RC[-5]-RC[-6],MAX_Matin),"""")"
Ou bien ;
VB:
Feuil12.[M6].Resize(NbLgn).FormulaR1C1 = "=IF(RC7<>"""",IF(RC8>RC7,RC8-RC7,MAX_Matin),"""")"
 
Dernière édition:

ReneDav14000

XLDnaute Occasionnel
Parce que par exemple si l'employé a pointé en G à 7:30 à son arrivée et pointe à 18:00 en J, j'ai besoin de calculer les horaires du matin (12:00-7:30) soit dans la formule (MAX_Matin-G) puis les horaires de l'après-midi soit (J-MIN_PM).
Il me faut calculer le temps pour chaque période.
 

ReneDav14000

XLDnaute Occasionnel
Je vais essayer d'être assez clair dans mon explication :
L'employé(e) arrive à 7:00 (G) et repart à 12:00 (H) pas de soucis particulier (M=H-G)
L'employé(e) arrive à 12:00 (I) et repart à 19:00 (J) pas de soucis particulier (N=J-I)
L'employé(e) arrive à 19:00 (K) et repart à 23:00 (L) pas de soucis particulier (O=L-K)
MAIS si
L'employé(e) arrive à 7:00 (G) et repart à 18:00 (J) alors il faut calculer le temps passé entre G et 12:00 (MIN_matin) puis de 12:00 (MIN_PM) à J.
L'employé(e) arrive à 7:00 (G) et repart à 23:00 (L) alors il faut calculer le temps passé entre G et 12:00 (MIN_PM) puis de 12:00 (MIN_PM) à 19:00 (MAX_PM) puis de L à (MIN_Soir).
MAIS si
L'employé(e) arrive à 7:30 (G) mais ne pointe pas et puis repart à 12:00 (H) en pointant alors 0.
Une heure d'arrivée doit toujours aller de pair avec une heure de départ et vice-versa.
7:30 (G) - 12h00 (H) ou 7:30 (G) - 18:00 (I) ou 7:30 (G) - 23:00 (L)
12:00 (H) - 18:00 (I) ou 12:00 (H) - 23:00 (L)
18:00 (K) - 23:30 (L)
Bien entendu les heures indiquées sont fictives sauf MIN_Matin, MIN_PM, MAX_PM et MIN_Soir qui sont des horaires fixes.
J'espère que mes explications vous éclaireront.
 

Discussions similaires

Statistiques des forums

Discussions
315 098
Messages
2 116 190
Membres
112 679
dernier inscrit
Yupanki