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 :

Gestion d'une colonne date en fonction d'une autre colonne [XL-2016]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    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
    Points : 23
    Points
    23
    Par défaut Gestion d'une colonne date en fonction d'une autre colonne
    Bonjour à tous,
    je travaille actuellement sur un programme vba sous excel 2016.

    Je souhaite dans une feuille intitulée "LASER" modifier les cellules de la colonne K intitulée "délai" (les cellules sont en format date : "dd/mm/aaaa") en fonction de la colonne R.

    Par exemple :

    • Si R2 = "OP_DECOUPE_INOX", enlever 2 jours à la date de K2.
    • Si R2 = "OP_DECOUPE_NOIR", enlever 6 jours à la date de K2.
    • Si R2 = "DESSIN", ne rien faire.


    Après des recherches et plusieurs essais, j'ai essayé ce code (je sens que je suis pas loin mais c'est pas encore ç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
    23
     
    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("K:R")
     
        If cell.Value = "OP_DECOUPE_INOX" Then
            cell.Cells(1, -6).Value = DateAdd("d", -2, cell)
     
        ElseIf cell.Value = "OP_DECOUPE_NOIR" Then
            cell.Cells(1, -6).Value = DateAdd("d", -6, cell)
     
        End If 
     
    Next cell
     
    End Sub
    Merci pour votre aide.

    PS: Si la demande ne vous semble pas clair, n'hésitez pas à me le dire.

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 593
    Points : 34 256
    Points
    34 256
    Par défaut
    Salut,

    si tu veux faire un decalage de cellule, on utilise normalement Offset

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cell.Offset(1, -6).Value = DateAdd("d", -2, cell.Value)
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Membre à l'essai
    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
    Points : 23
    Points
    23
    Par défaut
    Bonjour Jean-Philippe,

    je viens d'essayer ton code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    cell.Offset(1, -6).Value = DateAdd("d", -2, cell.Value)
    Il me met une erreur d'exécution '13' : incompatibilité de type alors que si je remplace ("d", -2, cell.Value) par ("d", -2, date), le programme fonctionne correctement (mais il efface la date enregistrée pour rentrer la date d'aujourd'hui).

    Pour info, le programme me donne cell.value = "OP_DECOUPE_INOX" alors qu'il devrait logiquement me donner "21/07/2017".

    Cela me parait pas logique que ça fonctionne dans un cas et pas dans l'autre.

  4. #4
    Membre à l'essai
    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
    Points : 23
    Points
    23
    Par défaut
    Merci pour ton aide Jean-Philippe, en utilisant ton code j'ai réussi à résoudre mon problème.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    cell.Offset(0, -7).Value = DateAdd("d", -2, cell.Offset(0, -7).Value)
    ça fait tellement plaisir quand ça marche

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 31/10/2012, 17h20
  2. [AC-2007] Bloquer une date en fonction d'une autre date.
    Par marco_t dans le forum Access
    Réponses: 3
    Dernier message: 20/10/2010, 11h11
  3. Somme en fonction d'une même date
    Par zella dans le forum Excel
    Réponses: 5
    Dernier message: 05/03/2010, 01h43
  4. Réponses: 4
    Dernier message: 31/10/2006, 19h03

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