XL 2013 Afficher date arrivé sous condiotion

chaelie2015

XLDnaute Accro
Bonjour FORUM;
ci dessous un code; voici ces étapes: :

1. Le code commence par définir des variables pour référencer les feuilles de travail nécessaires et stocker les valeurs pertinentes.
2. Il récupère la date de départ, le nombre et les dates de début et de fin à partir de la feuille "Motif".
3. Il vérifie d'abord si la date de départ est dans l'intervalle spécifié (entre la date de début et la date de fin) et si le nombre est supérieur à zéro.
4. S'il satisfait à ces conditions, le code initialise un compteur à zéro.
5. Il commence ensuite à parcourir les cellules de la colonne AS de la feuille "CRT" (de AS17 à AS47).
6. À chaque itération, il vérifie si la cellule AS est vide. Si la cellule est vide, il passe à la cellule suivante. Si la cellule AS n'est pas vide, il incrémente le compteur.
7. Il continue de parcourir les cellules de la colonne AS jusqu'à ce que le compteur atteigne la valeur spécifiée dans la cellule O3 de la feuille "Motif".
8. Une fois que le compteur atteint la valeur spécifiée, le code enregistre la date correspondante de la cellule AS dans la variable `DerniereDate` et sort de la boucle.
9. Enfin, le code affiche la valeur de `DerniereDate` dans la cellule T3 de la feuille "Motif".

j'ai exécuté toutes ces étapes mais, ça n'a pas fonctionné ?


VB:
Sub CalculerDateArrivee()
    Dim wsMotif As Worksheet
    Dim wsCRT As Worksheet
    Dim DateDepart As Date
    Dim Nombre As Integer
    Dim DateDebut As Date
    Dim DateFin As Date
    Dim Compteur As Integer
    Dim DerniereDate As Variant
    
    ' Référence à la feuille "Motif"
    Set wsMotif = ThisWorkbook.Sheets("Motif")
    
    ' Référence à la feuille "CRT"
    Set wsCRT = ThisWorkbook.Sheets("CRT")
    
    ' Récupération des valeurs depuis la feuille "Motif"
    DateDepart = wsMotif.Range("R3").Value
    Nombre = wsMotif.Range("O3").Value
    DateDebut = wsMotif.Range("R2").Value
    DateFin = wsMotif.Range("T2").Value
    
    ' Vérification des conditions
    If DateDepart >= DateDebut And DateDepart <= DateFin And Nombre > 0 Then
        ' Comptage des cellules non vides dans la colonne AS de la feuille "CRT"
        Compteur = 0
        For Compteur = 17 To 47 ' Plage AS17:AS47
            If wsCRT.Cells(Compteur, "AS").Value <> "" Then
                Nombre = Nombre - 1
                If Nombre = 0 Then
                    DerniereDate = wsCRT.Cells(Compteur, "AS").Value
                    Exit For
                End If
            End If
        Next Compteur
    End If
    
    ' Affichage du résultat dans la cellule T3 de la feuille "Motif"
    wsMotif.Range("T3").Value = DerniereDate
End Sub

Merci par avance
 

Pièces jointes

  • CHARLIE date arruvée sous condition.xlsm
    18.8 KB · Affichages: 9
Solution
VB:
Sub CalculerDateArrivee()
    Dim wsMotif As Worksheet
    Dim wsCRT As Worksheet
    Dim DateDepart As Date
    Dim Nombre As Integer
    Dim DateDebut As Date
    Dim DateFin As Date
    Dim Compteur As Integer
    Dim DerniereDate As Variant
    
    ' Référence à la feuille "Motif"
    Set wsMotif = ThisWorkbook.Sheets("Motif")
    
    ' Référence à la feuille "CRT"
    Set wsCRT = ThisWorkbook.Sheets("CRT")
    
    ' Récupération des valeurs depuis la feuille "Motif"
    With wsMotif
        DateDepart = .Range("R3").Value
        Nombre = .Range("O3").Value
        DateDebut = .Range("R2").Value
        DateFin = .Range("T2").Value
    End With
    
    If DateDepart < DateDebut Or DateDepart > DateFin Then
        MsgBox "la...

vgendron

XLDnaute Barbatruc
Bonjour

tu dis ca n'a pas fonctionné....==>quel est le résultat attendu??
quand j'execute le code, le resultat correspond bien à la description..
donc.. qu'est ce qui ne va pas??

apparté: tu postes de nouveaux sujets pour toi, mais tu ne réponds pas à la question qui t'es posée dans un autre post sur lequel tu es intervenu.. ca serait bien d'apporter les précisions demandées...
 

vgendron

XLDnaute Barbatruc
et tu peux aussi faire un retour sur les réponses qui te sont données...

pour rappel, ici, ce n'est pas un self service
 

job75

XLDnaute Barbatruc
Bonjour chalie2015, [Edit] vgendron,

J'ai rarement vu un code aussi tarabiscoté !!!

Chez moi la date 01/04/2023 s'affiche en Motif!T3.

Et c'est normal puisqu'il y a le code Nombre = Nombre - 1 => on sort de la boucle à la 1ère itération.

A+
 
Dernière édition:

chaelie2015

XLDnaute Accro
Bonjour

tu dis ca n'a pas fonctionné....==>quel est le résultat attendu??
quand j'execute le code, le resultat correspond bien à la description..
donc.. qu'est ce qui ne va pas??

apparté: tu postes de nouveaux sujets pour toi, mais tu ne réponds pas à la question qui t'es posée dans un autre post sur lequel tu es intervenu.. ca serait bien d'apporter les précisions demandées...
Bonjour vgendron
Merci pour les remarques; pour le fichier joint ; si je change la cellule O3 par une autre valeur par exemple 3 , j'aurai automatiquement dans la cellule T3 = 04/04/2023 ( 02/04/2023 + 3)
 

vgendron

XLDnaute Barbatruc
à mon avis, tu ne maitrises pas ce que fait ton code
ou du moins, tu n'as pas codé ce que tu voulais faire..

en R2 et T2, ce sont les dates min et max de la plage
en R3: tu mets une date de départ..
===> Elle ne sert à rien.. si tu mets une date entre le min et max, la boucle est executée.. sinon. pas de boucle

la boucle.. récupère la nième date NON vide de la plage
si tu mets1 ==> tu auras le 01/04
si tu mets 7==> tu as la 7eme date de la plage = 08/04

la date de départ n'a donc aucun impact sur ta boucle...
 

RyuAutodidacte

XLDnaute Impliqué
Bonjour,
@chaelie2015
Lire ton code en te faisant un représentation + claire :
1693734354710.png

T'as logique ne parait pas correct dans ta boucle, je suis pas rentré dans le détails
Déjà pourquoi faire : à effacer
VB:
        Compteur = 0
alors que :
VB:
For Compteur = 17 To 47
mais faut tester comme cela je pense (explication pas claire) :
Ajout de :
VB:
 Dim Nb as integer
pour la boucle :
VB:
            Nb = -1
            For Compteur = 17 To 47 ' Plage AS17:AS47
                If wsCRT.Cells(Compteur, "AS").Value <> "" Then
                    If wsCRT.Cells(Compteur, "AS").Value >= DateDepart Then
                        Nb = Nb + 1
                        If Nombre = Nb Then
                            DerniereDate = wsCRT.Cells(Compteur, "AS").Value
                            Exit For
                        End If
                    End If
                End If
            Next Compteur
 

vgendron

XLDnaute Barbatruc
VB:
Sub CalculerDateArrivee()
    Dim wsMotif As Worksheet
    Dim wsCRT As Worksheet
    Dim DateDepart As Date
    Dim Nombre As Integer
    Dim DateDebut As Date
    Dim DateFin As Date
    Dim Compteur As Integer
    Dim DerniereDate As Variant
    
    ' Référence à la feuille "Motif"
    Set wsMotif = ThisWorkbook.Sheets("Motif")
    
    ' Référence à la feuille "CRT"
    Set wsCRT = ThisWorkbook.Sheets("CRT")
    
    ' Récupération des valeurs depuis la feuille "Motif"
    With wsMotif
        DateDepart = .Range("R3").Value
        Nombre = .Range("O3").Value
        DateDebut = .Range("R2").Value
        DateFin = .Range("T2").Value
    End With
    
    If DateDepart < DateDebut Or DateDepart > DateFin Then
        MsgBox "la date de départ est hors limites"
        Exit Sub
    End If
    
    With wsCRT
        For Compteur = 17 To 47 ' Plage AS17:AS47
            If .Range("AS" & Compteur).Value <> "" And .Range("AS" & Compteur).Value > DateDepart Then
                Nombre = Nombre - 1
                If Nombre = 0 Then
                    DerniereDate = .Range("AS" & Compteur).Value
                    Exit For
                End If
            End If
        Next Compteur
    End With
    
    ' Affichage du résultat dans la cellule T3 de la feuille "Motif"
    wsMotif.Range("T3").Value = DerniereDate
End Sub
 

RyuAutodidacte

XLDnaute Impliqué
VB:
Sub CalculerDateArrivee()
    Dim wsMotif As Worksheet
    Dim wsCRT As Worksheet
    Dim DateDepart As Date
    Dim Nombre As Integer
    Dim DateDebut As Date
    Dim DateFin As Date
    Dim Compteur As Integer
    Dim DerniereDate As Variant
   
    ' Référence à la feuille "Motif"
    Set wsMotif = ThisWorkbook.Sheets("Motif")
   
    ' Référence à la feuille "CRT"
    Set wsCRT = ThisWorkbook.Sheets("CRT")
   
    ' Récupération des valeurs depuis la feuille "Motif"
    With wsMotif
        DateDepart = .Range("R3").Value
        Nombre = .Range("O3").Value
        DateDebut = .Range("R2").Value
        DateFin = .Range("T2").Value
    End With
   
    If DateDepart < DateDebut Or DateDepart > DateFin Then
        MsgBox "la date de départ est hors limites"
        Exit Sub
    End If
   
    With wsCRT
        For Compteur = 17 To 47 ' Plage AS17:AS47
            If .Range("AS" & Compteur).Value <> "" And .Range("AS" & Compteur).Value > DateDepart Then
                Nombre = Nombre - 1
                If Nombre = 0 Then
                    DerniereDate = .Range("AS" & Compteur).Value
                    Exit For
                End If
            End If
        Next Compteur
    End With
   
    ' Affichage du résultat dans la cellule T3 de la feuille "Motif"
    wsMotif.Range("T3").Value = DerniereDate
End Sub
oui on peut faire comme cela aussi ;)
 

chaelie2015

XLDnaute Accro
et tu peux aussi faire un retour sur les réponses qui te sont données...

pour rappel, ici, ce n'est pas un self service
Bonjour VGENDRON
Je m'excuse, c'est des erreurs de copier-coller ainsi que de répondre rapidement ont été la cause de cela.
 

chaelie2015

XLDnaute Accro
je n'avais pas raffraichi

par contre, ce qui me gêne;. c'est qu'on est obligé d'interpreter ce que souhaite l'auteur et lui fournir encore une fois une solution toute faite..
et la. s'il fait comme sur les autres posts..on ne va pas le revoir...
Bonjour tout le monde 🙄
La date de départ dans la cellule R3 revêt une grande importance. Pourquoi ? Parce que lorsque nous recherchons cette date dans la plage AS, si nous la trouvons, le comptage des cellules commence à partir de cette date.
🥺
 

chaelie2015

XLDnaute Accro
Bonjour tous le monde
Permettez-moi de réexpliquer mon problème, cette fois-ci son code :
Voici un résumé de ma procédure :
Elle effectue une vérification pour s'assurer que la DateDepart se situe entre DateDebut et DateFin, tout en vérifiant également que la valeur de Nombre O3 est supérieure à zéro.
Si ces conditions sont satisfaites, elle parcourt les cellules de la colonne AS (de la ligne 17 à la ligne 47) de la feuille "CRT" pour localiser la DateDepart. Une fois la date de départ trouvée dans cette plage, le code commence à compter vers le bas à partir de la cellule où la date a été trouvée, en fonction de la valeur de la cellule O3. Cependant, si une cellule est vide, elle n'est pas prise en compte dans le comptage, et le code passe à la suivante jusqu'à ce qu'il atteigne le nombre spécifié dans O3.
MERCI
 

chaelie2015

XLDnaute Accro
VB:
Sub CalculerDateArrivee()
    Dim wsMotif As Worksheet
    Dim wsCRT As Worksheet
    Dim DateDepart As Date
    Dim Nombre As Integer
    Dim DateDebut As Date
    Dim DateFin As Date
    Dim Compteur As Integer
    Dim DerniereDate As Variant
  
    ' Référence à la feuille "Motif"
    Set wsMotif = ThisWorkbook.Sheets("Motif")
  
    ' Référence à la feuille "CRT"
    Set wsCRT = ThisWorkbook.Sheets("CRT")
  
    ' Récupération des valeurs depuis la feuille "Motif"
    With wsMotif
        DateDepart = .Range("R3").Value
        Nombre = .Range("O3").Value
        DateDebut = .Range("R2").Value
        DateFin = .Range("T2").Value
    End With
  
    If DateDepart < DateDebut Or DateDepart > DateFin Then
        MsgBox "la date de départ est hors limites"
        Exit Sub
    End If
  
    With wsCRT
        For Compteur = 17 To 47 ' Plage AS17:AS47
            If .Range("AS" & Compteur).Value <> "" And .Range("AS" & Compteur).Value > DateDepart Then
                Nombre = Nombre - 1
                If Nombre = 0 Then
                    DerniereDate = .Range("AS" & Compteur).Value
                    Exit For
                End If
            End If
        Next Compteur
    End With
  
    ' Affichage du résultat dans la cellule T3 de la feuille "Motif"
    wsMotif.Range("T3").Value = DerniereDate
End Sub
Re
Je vous remercie pour votre réponse et la correction du code. Pourriez-vous s'il vous plaît m'indiquer comment supprimer le jour supplémentaire?
 
Dernière édition:

Discussions similaires

Réponses
3
Affichages
203

Statistiques des forums

Discussions
315 090
Messages
2 116 102
Membres
112 661
dernier inscrit
ceucri