Où est l'erreur?

[Fermé]
Signaler
Messages postés
7
Date d'inscription
mardi 19 juin 2018
Statut
Membre
Dernière intervention
20 juin 2018
-
Messages postés
16838
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 septembre 2021
-
Bonjour,
Je souhaite créer un calendrier qui me permettrait de griser les cases correspondant au jours fériés.
Lorsque je lance le programme un message d'erreur "n°424 Objets requis" apparait mais je ne comprends pas d'où vient l'erreur. Excel m'indique que l'erreur vient de cette ligne.
Une idée???

If ((Range("N5").Value = "S" Or Range("N5").Value = "D") And Weekend.Value = True) Or (Range("L5").Value >= Toussaint_Deb And Range("L5").Value <= Toussaint_Fin And Vacances.Value = True) Then
    Range("O5").Interior.ColorIndex = 15
    Else: Range("O5").Interior.ColorIndex = 0
End If



Merci

9 réponses


Bonjour

Comment sont définis et initialisés Weekend et Vacances ?
Messages postés
7
Date d'inscription
mardi 19 juin 2018
Statut
Membre
Dernière intervention
20 juin 2018

Weekend et Vacances sont deux cases à cocher.
Weekend permet d'afficher (Masquer) les weekend en fond gris et même principe pour Vacances.
Messages postés
7
Date d'inscription
mardi 19 juin 2018
Statut
Membre
Dernière intervention
20 juin 2018

Voilà comment je fais fonctionner ma case à cocher Weekend.

Private Sub Weekend_Click()
If Weekend = True Then
Call AfficheWeekend
Else: Call MasqueWeekend
End If
End Sub

Décompose le grand 'if' qui provoque l'erreur en plusieurs parties pour cerner quelle partie ne convient pas.
Messages postés
7
Date d'inscription
mardi 19 juin 2018
Statut
Membre
Dernière intervention
20 juin 2018

Le père j'ai suivi ton conseil. Il semble que le problème vienne de la partie en gras.

If ((Range("N5") = "S" Or Range("N5") = "D") And Weekend_Click = True) Or (Range("M5").Value >= Toussaint_Deb And Range("M5").Value <= Toussaint_Fin And Vacances_Click = True) Then
Range("O5").Interior.ColorIndex = 15
Else: Range("O5").Interior.ColorIndex = 0
End If
Messages postés
16838
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 septembre 2021
900
bonsoir, peux-tu montrer l'ensemble de ton code, ou partager ton fichier?
as-tu bien mis "option explicit" en début de module?
Messages postés
7
Date d'inscription
mardi 19 juin 2018
Statut
Membre
Dernière intervention
20 juin 2018

Voilà le code complet. Après découpage et différents tests, le problème vient des cases à cocher. Je ne sais pas si elles sont bien déclarées.

Sub MasqueJoursferies()
Dim i As Integer 'colonne
Dim j As Integer 'ligne
Dim Rentree As Date
Dim Toussaint_Deb As Date
Dim Toussaint_Fin As Date
Dim Noel_Deb As Date
Dim Noel_Fin As Date
Dim Hiver_Deb As Date
Dim Hiver_Fin As Date
Dim Paques_Deb As Date
Dim Paques_Fin As Date
Dim Ete_Deb As Date
Dim Weekend As CheckBox
Dim Vacances As CheckBox


ActiveSheet.Unprotect


Rentree = Range("AX3")
Toussaint_Deb = Range("AX6")
Toussaint_Fin = Range("AX7")
Noel_Deb = Range("AX10")
Noel_Fin = Range("AX11")
Hiver_Deb = Range("AX14")
Hiver_Fin = Range("AX15")
Paques_Deb = Range("AX18")
Paques_Fin = Range("AX19")
Ete_Deb = Range("AX22")


Range("O5").ClearContents 'Toussaint
If ((Range("N5") = "S" Or Range("N5") = "D") And Weekend.Value = xlOn) Or (Range("M5") >= Toussaint_Deb And Range("M5") <= Toussaint_Fin And <bold>Vacances.Value = xlOn</bold>) Then
Range("O5").Interior.ColorIndex = 15
    Else: Range("O5").Interior.ColorIndex = 0
End If
ActiveSheet.Range("O5").Locked = False

Range("O15").ClearContents   'Armistice
If ((Range("N15") = "S" Or Range("N15") = "D") And Weekend = True) Or (Range("M5") >= Toussaint_Deb And Range("M5") <= Toussaint_Fin And Vacances = True) Then
    Else: Range("O15").Interior.ColorIndex = 0
End If
ActiveSheet.Range("O15").Locked = False

Range("S29").ClearContents    'Noël
If ((Range("R29") = "S" Or Range("R29") = "D") And Weekend = True) Or (Range("R29") >= Noel_Deb And Range("R29") <= Noel_Fin And Vacances = True) Then
    Else: Range("S29").Interior.ColorIndex = 0
End If
ActiveSheet.Range("S29").Locked = False

Range("W5").ClearContents 'Jour de l'an
If ((Range("V5") = "S" Or Range("V5") = "D") And Weekend = True) Or (Range("V5") >= Noel_Deb And Range("V5") <= Noel_Fin And Vacances = True) Then
    Else: Range("W5").Interior.ColorIndex = 0
End If
ActiveSheet.Range("W5").Locked = False

Range("AM5").ClearContents    'Fête du travail
If ((Range("AL5") = "S" Or Range("AL5") = "D") And Weekend = True) Or (Range("AL5") >= Hiver_Deb And Range("AL5") <= Hiver_Fin And Vacances = True) Then
    Else: Range("AM5").Interior.ColorIndex = 0
End If
ActiveSheet.Range("AM5").Locked = False

Range("AM12").ClearContents    'Armistice
If ((Range("AL12") = "S" Or Range("AL12") = "D") And Weekend = True) Or (Range("AL12") >= Hiver_Deb And Range("AL12") <= Hiver_Fin And Vacances = True) Then
    Else: Range("AM12").Interior.ColorIndex = 0
End If
ActiveSheet.Range("AM12").Locked = False

Range("AU18").ClearContents   'Fête Nationale
If ((Range("AT18") = "S" Or Range("AT18") = "D") And Weekend = True) Or (Range("AT18") >= Ete_Deb And Vacances = True) Then
    Else: Range("AU18").Interior.ColorIndex = 0
End If
ActiveSheet.Range("AY10").Locked = False

For i = 1 To 48 Step 4
        For j = 5 To 35
        If (Cells(j, i) <> "") Then
            If Cells(j, i) = Range("AZ12") Then
                Cells(j, i + 2).ClearContents
                If Not ((Cells(j, i + 1) = "S" Or Cells(j, i + 1) = "D") And Weekend = True) Or (Vacances = True) Then
                Cells(j, i + 2).Interior.ColorIndex = 0
                End If
                ActiveSheet.Cells(j, i + 2).Locked = False
             Else
                If Cells(j, i) = Range("AZ13") Then
                    Cells(j, i + 2).ClearContents
                    If Not ((Cells(j, i + 1) = "S" Or Cells(j, i + 1) = "D") And Weekend = True) Or (Vacances = True) Then
                        Cells(j, i + 2).Interior.ColorIndex = 0
                    End If
                    ActiveSheet.Cells(j, i + 2).Locked = False
                Else
                    If Cells(j, i) = Range("AZ14") Then
                        Cells(j, i + 2).ClearContents
                        If Not ((Cells(j, i + 1) = "S" Or Cells(j, i + 1) = "D") And Weekend = True) And (Vacances = True) Then
                            Cells(j, i + 2).Interior.ColorIndex = 0
                        End If
                        ActiveSheet.Cells(j, i + 2).Locked = False
                    Else
                        If Cells(j, i) = Range("AZ15") Then
                            Cells(j, i + 2).ClearContents
                            If Not ((Cells(j, i + 1) = "S" Or Cells(j, i + 1) = "D") And Weekend = True) Or (Vacances = True) Then
                                Cells(j, i + 2).Interior.ColorIndex = 0
                            End If
                            ActiveSheet.Cells(j, i + 2).Locked = False
                                Else
                                    If Cells(j, i) = Range("AZ16") Then
                                        Cells(j, i + 2).ClearContents
                                        If Not ((Cells(j, i + 1) = "S" Or Cells(j, i + 1) = "D") And Weekend = True) Or (Vacances = True) Then
                                            Cells(j, i + 2).Interior.ColorIndex = 0
                                        End If
                                        ActiveSheet.Cells(j, i + 2).Locked = False
                                        Else
                                            If Cells(j, i) = Range("AZ17") Then
                                                Cells(j, i + 2).ClearContents
                                                If Not ((Cells(j, i + 1) = "S" Or Cells(j, i + 1) = "D") And Weekend = True) Or (Vacances = True) Then
                                                    Cells(j, i + 2).Interior.ColorIndex = 0
                                                End If
                                                ActiveSheet.Cells(j, i + 2).Locked = False
                                            End If
                                    End If
                        End If
                    End If
                 End If
            End If
           End If
        Next j
    Next i

ActiveSheet.Protect

End Sub


EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.
Messages postés
16838
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 septembre 2021
900
as-tu bien mis "option explicit" en début de module?
Il me semble que tu déclares Vacances, que tu n'y assignes rien, et puis que tu le testes. bizarre, non?
Utilisateur anonyme
Si tu redéclares Weekend et Vacances dans la fonction, ce sont de nouvelles variables. Elles n'ont aucun rapport avec des cases à cocher déjà existantes, même si elles portent le même nom.
Messages postés
7
Date d'inscription
mardi 19 juin 2018
Statut
Membre
Dernière intervention
20 juin 2018

Yg_be, Je n'ai pas mis de option explicit. Je le place avant le sub?


Le père, je supprime donc la déclaration de weekend et vacances. Mais le programme comprends donc automatiquement que je fais référence aux cases à cocher? Car même en supprimant, ça ne fonctionne pas!
Messages postés
16838
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 septembre 2021
900
oui, en début de module, cela va t'aider à comprendre les erreurs.
Messages postés
16838
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 septembre 2021
900
les cases à cocher ne sont pas accessibles en utilisant simplement leur noms.
peux-tu partager ton fichier?
Messages postés
7
Date d'inscription
mardi 19 juin 2018
Statut
Membre
Dernière intervention
20 juin 2018




Je souhaite que quand je décoche Jours Fériés, le jour de Toussaint reste en gris puisqu'il est pendant les vacances et que la case Vacances est cochée.