IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Incrémentation d'une date en fonction de deux variables [XL-2016]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Avril 2017
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2017
    Messages : 54
    Par défaut Incrémentation d'une date en fonction de deux variables
    Bonjour à tous,

    je viens chercher un peu d'aide sur le forum. J'ai créé un code le mois dernier me permettant de modifier une date d'une cellule en fonction de la valeur d'une autre cellule.

    Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     Public Sub delai(nomOp As String)
     
    Dim cell As Range
     
    Application.ScreenUpdating = False
     
    For Each cell In Sheets("LASER").Range("J:R")
     
        If cell.Value = "OP_DECOUPE_INOX" Then
            cell.Offset(0, -7).Value = DateAdd("w", -2, cell.Offset(0, -7).Value)
     
        ElseIf cell.Value = "OP_DECOUPE_NOIR" Then
            cell.Offset(0, -7).Value = DateAdd("w", -6, cell.Offset(0, -7).Value)
     
        End If
     
    Next cell
     
    End Sub
    Ce code fonctionne correctement mais je souhaite également modifier la date correspondant à "OP_DESSIN" en fonction de l'opération qui suit ("OP_DECOUPE_INOX" ou "OP_DECOUPE_NOIR").

    J'ai pensé à ceci dans un premier temps :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     Public Sub delai(nomOp As String)
     
    Dim finpage As Long
    Dim cell As Range
     
    Application.ScreenUpdating = False
     
    finpage = Sheets("LASER").Cells(Rows.Count, 2).End(xlUp).Row
     
    For Each cell In Sheets("LASER").Range("J:R")
     
        If cell.Value = "OP_DECOUPE_INOX" Then
            cell.Offset(0, -7).Value = DateAdd("w", -2, cell.Offset(0, -7).Value)
     
        ElseIf cell.Value = "OP_DECOUPE_NOIR" Then
            cell.Offset(0, -7).Value = DateAdd("w", -6, cell.Offset(0, -7).Value)
     
        End If
     
        If cell.Value = "OP_DECOUPE_INOX" And cell.Offset(1, 0).Value = "OP_DESSIN" Then
            cell.Offset(0, -7).Value = DateAdd("w", -2, cell.Offset(0, -7).Value)
     
        If cell.Value = "OP_DECOUPE_NOIR" And cell.Offset(1, 0).Value = "OP_DESSIN" Then
            cell.Offset(0, -7).Value = DateAdd("w", -6, cell.Offset(0, -7).Value)
     
        End If
     
    End If
     
    Next cell
     
    End Sub
    Excel me mets : "Erreur 1004 : Erreur définie par l'application ou par l'objet" pour la ligne n°20 mais je ne comprends pas pourquoi.

    Qu'en pensez-vous ? Auriez-vous fait autrement ?

  2. #2
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    Bonjour
    essayer ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     Public Sub delai(nomOp As String)
     
    Dim finpage As Long
    Dim cell As Range
     
    Application.ScreenUpdating = False
     
    finpage = Sheets("LASER").Cells(Rows.Count, 2).End(xlUp).Row
     
    For Each cell In Sheets("LASER").Range("J:R")
     
     
     
     
        If cell.Value = "OP_DECOUPE_INOX" And cell.Offset(1, 0).Value = "OP_DESSIN" Then  cell.Offset(0, -7).Value = DateAdd("w", -2, cell.Offset(0, -7).Value)
     
     
        If cell.Value = "OP_DECOUPE_NOIR" And cell.Offset(1, 0).Value = "OP_DESSIN" Then cell.Offset(0, -7).Value = DateAdd("w", -6, cell.Offset(0, -7).Value)
     
    Next cell
     
    End Sub

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Avril 2017
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2017
    Messages : 54
    Par défaut
    Bonjour BENNASR,

    dans ta version je perds la modification de ma première version qui est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      If cell.Value = "OP_DECOUPE_INOX" Then
            cell.Offset(0, -7).Value = DateAdd("w", -2, cell.Offset(0, -7).Value)
     
        ElseIf cell.Value = "OP_DECOUPE_NOIR" Then
            cell.Offset(0, -7).Value = DateAdd("w", -6, cell.Offset(0, -7).Value)
     
        End If

  4. #4
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Bonjour,

    Es-tu sûr de tes conditions ? Voici un tableau qui résume tes conditions :
    Nom : conditions et.png
Affichages : 130
Taille : 9,4 Ko
    On remarque qu'il suffit de 2 conditions :
    • cell.Value = "OP_DECOUPE_INOX"
    • cell.Value = "OP_DECOUPE_NOIR"

    En effet, si une des 2 dernières conditions est vérifiée, cela veut dire qu'une des 2 premières étaient déjà vérifiées. Et tu effectues la même opération dans les 2 cas. Je ne sais pas si c'est très clair

    Es-tu sûr de ta plage pour la boucle ? Tu fais la boucle sur toutes les colonnes J à R. As-tu vraiment besoin de parcourir toutes les lignes de ces colonnes ? Je vois qu'auparavant tu cherches la dernière colonne non vide, pourquoi ne l'utilises-tu pas pour définir ta plage pour la boucle ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Public Sub delai(nomOp As String)
    Dim finpage As Long
    Dim cell As Range
     
    Application.ScreenUpdating = False
    finpage = Sheets("LASER").Cells(Rows.Count, 2).End(xlUp).Row
    For Each cell In Sheets("LASER").Range("J" & finpage & ":R" & finpage)
        If cell.Value = "OP_DECOUPE_INOX" And cell.Offset(1, 0).Value = "OP_DESSIN" Then  
            cell.Offset(0, -7).Value = DateAdd("w", -2, cell.Offset(0, -7).Value)
        ElseIf cell.Value = "OP_DECOUPE_NOIR" And cell.Offset(1, 0).Value = "OP_DESSIN" Then 
            cell.Offset(0, -7).Value = DateAdd("w", -6, cell.Offset(0, -7).Value)
        End If
    Next cell
    End Sub
    A quoi te sert nomOp ?

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Avril 2017
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2017
    Messages : 54
    Par défaut
    Bonjour Riaolle,

    Effectivement tu as raison la taille de ma plage est inutile puisque je me sers uniquement des colonnes R et J.

    Pour le nomOp, il me sert à faire le lien entre ma fonction secondaire ("delai") et la fonction principale qui est dans un autre module. Si je l'enlève j'ai une erreur, j'ai su pourquoi mais je ne m'en souviens plu

    Oui mes deux dernières conditions sont vérifiées mais il y a une nuance dans le tableau :

    Nom : img.JPG
Affichages : 138
Taille : 36,4 Ko

    A moins que le fait d'utiliser le cell.Offset(1, 0) décale la cellule à modifier avec la fonction DateAdd ? Ton code ne prends pas en compte la première ligne en du coup ?

  6. #6
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Citation Envoyé par david-lt Voir le message
    Oui mes deux dernières conditions sont vérifiées mais il y a une nuance dans le tableau
    Ouïe, désolée, j'avais pas bien regardé.
    Je vois pas trop pourquoi tu aurais une erreur sur la ligne 20 étant donné que c'est exactement le même type de syntaxe que les conditions précédentes et que celles-ci passent ...

  7. #7
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Avril 2017
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2017
    Messages : 54
    Par défaut
    J'ai réussi à créer un code sans erreur mais rien ne se passe, le délai correspondant à l'OP_DESSIN ne corresponds pas à l'OP_DECOUPE_NOIR ou l'OP_DECOUPE_INOX.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    Public Sub delai(nomOp As String)
     
    Dim finpage As Long
    Dim cell As Range
     
    Application.ScreenUpdating = False
     
    finpage = Sheets("LASER").Cells(Rows.Count, 2).End(xlUp).Row
     
    For Each cell In Sheets("LASER").Range("J:R")
     
        If cell.Value = "OP_DECOUPE_INOX" Then
            cell.Offset(0, -7).Value = DateAdd("w", -2, cell.Offset(0, -7).Value)
     
        ElseIf cell.Value = "OP_DECOUPE_NOIR" Then
            cell.Offset(0, -7).Value = DateAdd("w", -6, cell.Offset(0, -7).Value)
     
        ElseIf cell.Value = "OP_DECOUPE_INOX" And ActiveCell.Offset(1, 0).Value = "OP_DESSIN" Then
            cell.Offset(1, -7).Value = DateAdd("dw", -2, cell.Offset(1, -7).Value)
     
        ElseIf cell.Value = "OP_DECOUPE_NOIR" And ActiveCell.Offset(1, 0).Value = "OP_DESSIN" Then
            cell.Offset(1, -7).Value = DateAdd("dw", -6, cell.Offset(1, -7).Value)
     
        End If
     
    Next cell
     
    End Sub

  8. #8
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Si tu étais plus explicite sur ta demande ce serait réglé depuis longtemps!

    Présentes un tableau!

    OP_DECOUPE_INOX=-2
    OP_DECOUPE_INOX et OP_DESSIN =-4
    OP_DECOUPE_NOIR=-6
    OP_DECOUPE_NOIR et OP_DESSIN=-12

  9. #9
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    ëux-tu expliquer un peu mieux (avec des mots) quelles sont tes conditions, stp? Est-ce que ce ne serait pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Public Sub delai(nomOp As String)
    Dim finpage As Long
    Dim cell As Range
    Application.ScreenUpdating = False
    finpage = Sheets("LASER").Cells(Rows.Count, 2).End(xlUp).Row
     
    For Each cell In Sheets("LASER").Range("J:R")
        If cell.Value = "OP_DECOUPE_INOX" Then
            cell.Offset(0, -7).Value = DateAdd("w", -2, cell.Offset(0, -7).Value)
            If ActiveCell.Offset(1, 0).Value = "OP_DESSIN" Then cell.Offset(1, -7).Value = DateAdd("dw", -2, cell.Offset(1, -7).Value)
        ElseIf cell.Value = "OP_DECOUPE_NOIR" Then
            cell.Offset(0, -7).Value = DateAdd("w", -6, cell.Offset(0, -7).Value)
            If ActiveCell.Offset(1, 0).Value = "OP_DESSIN" Then cell.Offset(1, -7).Value = DateAdd("dw", -6, cell.Offset(1, -7).Value)
        End If
    Next cell
    End Sub
    En attendant, tu n'utilises toujours pas finpage, est-ce normal?

  10. #10
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Avril 2017
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2017
    Messages : 54
    Par défaut
    Je souhaite enlever :
    • 2 jours pour une OP_DECOUPE_INOX
    • 6 jours pour une OP_DECOUPE_NOIR
    • 2 jours pour une OP_DESSIN précédée de l'OP_DECOUPE_INOX
    • 6 jours pour une OP_DESSIN précédée de l'OP_DECOUPE_NOIR


    Voilà ce que j'ai dans mon tableau

    Nom : img 2.JPG
Affichages : 123
Taille : 36,5 Ko

    Et voilà ce que je cherche à avoir

    Nom : img 3.JPG
Affichages : 133
Taille : 36,6 Ko

    Par contre, je peux avoir une OP_DESSIN suivie par plusieurs OP_DECOUPE_NOIR ou plusieurs OP_DECOUPE_INOX.
    Je peux également avoir plusieurs OP_DESSIN à suivre.

  11. #11
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Avril 2017
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2017
    Messages : 54
    Par défaut
    En attendant, tu n'utilises toujours pas finpage, est-ce normal?
    Oui, en réalité je dois le mettre en commentaire. C'était rappel pour m'aider à m'en souvenir.

  12. #12
    Invité
    Invité(e)
    Par défaut
    ton code fait déjà cela mais si c'est cumulatif alors c'est mon tableau qui est le bon!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    For Each cell In Sheets("LASER").Range("J:R")
        Select Case cell.Value
            Case "OP_DECOUPE_INOX"
                cell.Offset(0, -7).Value = DateAdd("w", -2, cell.Offset(0, -7).Value)
            Case "OP_DECOUPE_NOIR"
                cell.Offset(0, -7).Value = DateAdd("w", -6, cell.Offset(0, -7).Value)
           Case "OP_DESSIN"
                    If cell.Offset(-1, 0).Value = "OP_DECOUPE_INOX" Then cell.Offset(0, -7).Value = DateAdd("w", -2, cell.Offset(0, -7).Value)
                    If cell.Offset(-1, 0).Value = "OP_DECOUPE_NOIR" Then cell.Offset(0, -7).Value = DateAdd("w", -6, cell.Offset(0, -7).Value)
        End Select
    Next cell
    ar contre, je peux avoir une OP_DESSIN suivie par plusieurs OP_DECOUPE_NOIR ou plusieurs OP_DECOUPE_INOX.
    Je peux également avoir plusieurs OP_DESSIN à suivre.
    donnes un exemple!
    Dernière modification par Invité ; 24/05/2017 à 09h57.

  13. #13
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Avril 2017
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2017
    Messages : 54
    Par défaut
    Effectivement, ton tableau fonctionne !! J'obtiens le résultat attendu.

    Merci pour votre aide à tous les deux.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2013] Ajouter une entré dans une table en fonction de deux dates
    Par Eltom_octo dans le forum VBA Access
    Réponses: 2
    Dernier message: 04/07/2016, 19h03
  2. Réponses: 5
    Dernier message: 09/03/2007, 19h39
  3. [SQL] Une date en fonction du num de semaine
    Par frederic_s dans le forum Oracle
    Réponses: 1
    Dernier message: 07/03/2006, 11h52
  4. Réponses: 10
    Dernier message: 09/01/2006, 18h39
  5. [ORACLE 10G]Incrémentation d'une date d'un jour
    Par titanblanc dans le forum Oracle
    Réponses: 2
    Dernier message: 05/01/2006, 11h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo