Problème d'erreur de compilation

Bonjour à toutes et à tous,

J'ai un petit problème et j'aimerais que quelqu'un puisse m'éclairer sur cette erreur de compilation.

Pour mon code, mon but est de pouvoir réaliser une duplication de feuille par rapport à la date du jour en reprenant la date d'hier (hebdomadaire).

Donc, pour ce faire, j'utilise "If" pour vérifier les condition d'un changement de journée, d'un changement par rapport au week-end mais j'obtiens comme erreur que le "ElseIf" n'est pas dans le bloc du "If".

Merci d'avance.

Sub Duplication2()

maDate = Date
maDate = maDate - 1

maDate2 = maDate - 3

'Condition de changement de journée'
    If maDate = Date - 1 Then _
        Sheets(Format(maDate, "ddmmyy""- onglet actif")).Copy After:=Worksheets(Worksheets.Count)
        ActiveSheet.Name = Format(Date, "ddmmyy""- onglet actif")
        'Onglet actif'
        Sheets(Format(maDate, "ddmmyy""IV")).Copy After:=Worksheets(Worksheets.Count)
        ActiveSheet.Name = Format(Date, "ddmmyy""IV")
        'Inspection Visuelle'
        Sheets(Format(maDate, "ddmmyy""TC")).Copy After:=Worksheets(Worksheets.Count)
        ActiveSheet.Name = Format(Date, "ddmmyy""TC")
        'Tests Complet'
        Sheets(Format(maDate, "ddmmyy""MP")).Copy After:=Worksheets(Worksheets.Count)
        ActiveSheet.Name = Format(Date, "ddmmyy""MP")
        'Matières premières'

          'Condition de changement de semaine'
    ElseIf maDate2 = Date - 3 Then
        Sheets(Format(maDate2, "ddmmyy""- onglet actif")).Copy After:=Worksheets(Worksheets.Count)
        ActiveSheet.Name = Format(Date, "ddmmyy""- onglet actif")
        'Onglet actif'
        Sheets(Format(maDate2, "ddmmyy""IV")).Copy After:=Worksheets(Worksheets.Count)
        ActiveSheet.Name = Format(Date, "ddmmyy""IV")
        'Inspection Visuelle'
        Sheets(Format(maDate2, "ddmmyy""TC")).Copy After:=Worksheets(Worksheets.Count)
        ActiveSheet.Name = Format(Date, "ddmmyy""TC")
        'Tests Complet'
        Sheets(Format(maDate2, "ddmmyy""MP")).Copy After:=Worksheets(Worksheets.Count)
        ActiveSheet.Name = Format(Date, "ddmmyy""MP")
        'Matières premières'

End Sub

Bonjour

Il vous manque un END IF juste avant le END SUB

rem : n'oubliez pas déclarer vos variables.... madate, madate2 --> Dim madate as date, madate2 as date

Cordialement

Bonjour Dan,

Merci de ta réponse, j'ai appliqué les modifications que tu m'as donné mais ça n'a pas réglé le problème de compilation.

J'en suis toujours au même stade et je ne vois pas où est l'erreur.

Sub Duplication2()

Dim madate As Date, madate2 As Date

madate = Date - 1
madate2 = Date - 3

    'Condition de changement de journée'
    If madate = Date - 1 Then _
        Sheets(Format(madate, "ddmmyy""- onglet actif")).Copy After:=Worksheets(Worksheets.Count)
        ActiveSheet.Name = Format(Date, "ddmmyy""- onglet actif")
        'Onglet actif'
        Sheets(Format(madate, "ddmmyy""IV")).Copy After:=Worksheets(Worksheets.Count)
        ActiveSheet.Name = Format(Date, "ddmmyy""IV")
        'Inspection Visuelle'
        Sheets(Format(madate, "ddmmyy""TC")).Copy After:=Worksheets(Worksheets.Count)
        ActiveSheet.Name = Format(Date, "ddmmyy""TC")
        'Tests Complet'
        Sheets(Format(madate, "ddmmyy""MP")).Copy After:=Worksheets(Worksheets.Count)
        ActiveSheet.Name = Format(Date, "ddmmyy""MP")
        'Matières premières'

    'Condition de changement de semaine'
    ElseIf madate2 = Date - 3 Then _
        Sheets(Format(madate2, "ddmmyy""- onglet actif")).Copy After:=Worksheets(Worksheets.Count)
        ActiveSheet.Name = Format(Date, "ddmmyy""- onglet actif")
        'Onglet actif'
        Sheets(Format(madate2, "ddmmyy""IV")).Copy After:=Worksheets(Worksheets.Count)
        ActiveSheet.Name = Format(Date, "ddmmyy""IV")
        'Inspection Visuelle'
        Sheets(Format(madate2, "ddmmyy""TC")).Copy After:=Worksheets(Worksheets.Count)
        ActiveSheet.Name = Format(Date, "ddmmyy""TC")
        'Tests Complet'
        Sheets(Format(madate2, "ddmmyy""MP")).Copy After:=Worksheets(Worksheets.Count)
        ActiveSheet.Name = Format(Date, "ddmmyy""MP")
        'Matières premières'
    End If

End Sub

mais ça n'a pas réglé le problème de compilation.

Au fait je vois que vous avez mis 1 souligné derrière THEN, pourquoi ? --> supprimez le
Sinon :

- Le code s'arrête sur quelle ligne ?
- quand votre code utilise ceci --> Sheets(Format(madate, "ddmmyy""- onglet actif") --> quel est le nom exact de votre feuille ?

Edit :

Puis en y regardant, vous contrôlez que votre date est jour - 1 ou jour - 3. Dès lors pourquoi faites-vous ceci

ElseIf madate2 = Date - 3 Then 

plutôt que ceci

ElseIf madate = Date - 3 Then 

Du coup madate2 ne sert plus

- Mon code s'arête sur le "ElseIf".

ElseIf madate2 = Date - 3 Then 

- Le nom de la feuille c'est "Date - onglet actif" enfaite, c'est une feuille qui va reprendre des données de la veille tout les jours donc la date change à chaque nouvelle journée hormis le week-end et les jours fériés.

- Pour les variables madate et madate2, je crois qu'ils ne servent pas à grand chose dans ces conditions (je viens de comprendre les conditions).

Enfaite, les variables madate sont nécessaire afin de pouvoir dupliquer les bonnes feuilles

- Le nom de la feuille c'est "Date - onglet actif" enfaite, c'est une feuille qui va reprendre des données de la veille tout les jours donc la date change à chaque nouvelle journée hormis le week-end et les jours fériés.

Oui. Donc si je comprends vous vous placez sur une feuille de votre fichier et vous dupliquez selon que cette feuille active est en date - 1 ou en date - 3 ? Juste ?

Mon but est de dupliquer 4 feuilles "Date - onglet actif", "DateIV", "DateTC" et "DateMP", et c'est 4 feuilles seront dupliqués tout les jours :

madate = Date - 1

sauf le week-end

madate = Date - 3

et les jours fériés ( pas encore réfléchis).

On va juste dupliquer des feuilles qui sont utilisés une journée.

je sais pas si c'est plus clair comme ça mais je ne peux pas me basé sur une feuille standard car sur chacune de ces feuilles y' aura des données qui seront utilisés sur ces nouvelles feuilles.

Mon but est de dupliquer 4 feuilles "Date - onglet actif", "DateIV", "DateTC" et "DateMP", et c'est 4 feuilles seront dupliqués tout les jours

Oui mais cela j'ai compris.

Pour vous donner un exemple sur la feuille "Date-onglet actif" :

si votre feuille est datée d'aujourd'hui, elle se nomme "170123 onglet actif". Demain vous allez sélectionner cette feuille et vous la dupliquez parce que demain sera Date - 1. du coup le code doit dupliquer la feuille nommée "170123 onglet actif"

Le tout est de comprendre comment le code voit qu'il doit choisir date - 1 ou date - 3.

Justement, c'est pour ça que le code voir différente condition :

- le "If" regarde si la Date = Date - 1 (la date d'hier)

-le "ElseIf" regarde si la Date = Date - 3 (la différence de jour entre le vendredi et le lundi)

edit : ce n'est pas correct ce que je vous avais donné

J'ai modifié les premières lignes de code car pour copier la feuille de Vendredi lorsque vous êtes sur un Lundi, votre date doit être Date - 3
On doit considérer que vous ne dupliquez jamais un samedi ou un dimanche

Sub Duplication2()
Dim madate As Date

Select Case Weekday(Date) 'on verifie le jour correspondant a la date du jour
    Case vbMonday: madate = Date - 3'si jour est Lundi, madate vaut Date du jour - 3 pour allez chercher la feuille du jour de vendredi
    Case Else: madate = Date - 1 'si jour est mardi et suivant, madate vaut date du jour - 1 pour aller cherche la feuille du jour precedent
End Select

Sheets(Format(madate, "ddmmyy""- onglet actif")).Copy After:=Worksheets(Worksheets.Count)
ActiveSheet.Name = Format(Date, "ddmmyy""- onglet actif")
'Onglet actif'
Sheets(Format(madate, "ddmmyy""IV")).Copy After:=Worksheets(Worksheets.Count)
ActiveSheet.Name = Format(Date, "ddmmyy""IV")
'Inspection Visuelle'
Sheets(Format(madate, "ddmmyy""TC")).Copy After:=Worksheets(Worksheets.Count)
ActiveSheet.Name = Format(Date, "ddmmyy""TC")
'Tests Complet'
Sheets(Format(madate, "ddmmyy""MP")).Copy After:=Worksheets(Worksheets.Count)
ActiveSheet.Name = Format(Date, "ddmmyy""MP")
'Matières premières'

End Sub

Crdlt

D'accord, j'ai un peu de mal à comprendre le code mais je pense qu'il fonctionne bien (j'ai fait un test pour date - 1 mais pour date - 2 ça sera plus tard), Merci beaucoup pour l'aide et si je veux faire les duplication quand il y a des jours fériés, je dois utiliser des "Case elseif", si je dis pas de bêtise ?

Ah mince, j'avais pas fais attention au commentaire dans le code, désolé

j'ai un peu de mal à comprendre le code

j'ai ajouté un commentaire dans mon post précédent

pour date - 2 ça sera plus tard),

Que voulez vous dire ? c'est date - 3 non ?

si je veux faire les duplication quand il y a des jours fériés, je dois utiliser des "Case elseif", si je dis pas de bêtise ?

Là c'est nettement plus complexe. D'abord établir une liste des jours fériés. Ensuite il faudra introduire dans chaque cas un contrôle sur madate afin de savoir si elle ne tombe pas un jour férié ou pas
Il pourrait y avoir plusieurs cas.
Exemple : Vous êtes un mardi et Lundi était jour férié... là vous devez allez reprendre Vendredi.
Autre cas : vous êtes un mercredi, et Mardi est férié, là il faut aller chercher Lundi et vérifier aussi que Lundi n'est pas aussi férié. Si oui, il faut aller reprendre Vendredi..

Le mieux est que établissiez en premier la liste des jours fériés et congés dans une feuille séparée par exemple.
Après je pense que faire un boucle sur madate afin de contrôler si elle ne fait pas partir des jours fériés ne devrait pas être trop complexe.

Merci bien en tout cas, ça m'a beaucoup aider et pour les jours fériés, je vais faire comment vous l'avez dit, je ne vois comment un code pourrait voir ça.

Merci encore.

Pour les jours fériés faite une feuille séparée avec les jours fériés en congés éventuels
Ensuite donnez moi le nom de la feuille et la colonne où vous avez mis les dates.

Un truc du genre par exemple

presse papier01

Je regarderai pour vous donner le code

Edit : jours fériés avec les formules si besoin

presse papier01

Bonjour Dan,

Du coup, le nom de ma feuille "jour férié pour pointsupply", et le placement des dates est identique au votre.

Après, j'ai plus cas insérer dans les formules "case", une boucle de vérification afin de savoir si ces dates ne correspondent pas à ma feuille.

Je voulais savoir aussi, si on pouvait masquer cette feuille et appliquer la vérification sur celle-ci ?

Je voulais savoir aussi, si on pouvait masquer cette feuille et appliquer la vérification sur celle-ci ?

Vous parlez de quelle feuille ? Jour férié ? si oui, elle peut être masquée. Le code n'a pas besoin que la feuille soit affichée pour vérifié les jours fériés

Votre code comme ceci :

Sub Duplication()
Dim madate As Date
Dim i As Integer

Select Case Weekday(Date)
    Case vbMonday: madate = Date - 3
    Case Else: madate = Date - 1
End Select

With Sheets("jour férié pour pointsupply") 'contrôle si madate est un jour férié
    For i = 2 To .Range("B" & Rows.Count).End(xlUp).Row
        If madate = .Range("B" & i).Value Then
            Select Case madate
                Case vbMonday: madate = Date - 3
                Case Else: madate = madate - 1
            End Select
            Exit For
        End If
    Next i
End With

Sheets(Format(madate, "ddmmyy""- onglet actif")).Copy After:=Worksheets(Worksheets.Count)
ActiveSheet.Name = Format(Date, "ddmmyy""- onglet actif")
'Onglet actif'
Sheets(Format(madate, "ddmmyy""IV")).Copy After:=Worksheets(Worksheets.Count)
ActiveSheet.Name = Format(Date, "ddmmyy""IV")
'Inspection Visuelle'
Sheets(Format(madate, "ddmmyy""TC")).Copy After:=Worksheets(Worksheets.Count)
ActiveSheet.Name = Format(Date, "ddmmyy""TC")
'Tests Complet'
Sheets(Format(madate, "ddmmyy""MP")).Copy After:=Worksheets(Worksheets.Count)
ActiveSheet.Name = Format(Date, "ddmmyy""MP")
'Matières premières'

End Sub

si ok, pensez à

Cordialement

Le code marche super bien.

Merci beaucoup pour votre aide et de m'avoir consacrer du temps

Bonjour Dan,

Pour la suite, j'ai un nouveau problème de taille.

Pourriez-vous m'aider ?

Merci d'avance.

Rechercher des sujets similaires à "probleme erreur compilation"