Microsoft 365 Compter date en fonction valeur tableau.

mld.sebastien

XLDnaute Junior
Bonjour,

J essaye de calculer le nombre de ticket pour le mois sous deux valeur. Mais je bug dessus mon code ce trouve utiliser dans la box_creation_evt userform initialisation.
 
Solution
il faut peut etre effacer la fiche avant de la remplir....
VB:
Private Sub Cmd_ImpressionFiche_Click()
    If Me.Cbx_NMR.ListIndex = -1 Then 'si il n'y a pas de selection OU qu'il y a une saisie ne correspondant pas à la liste du combo
        Me.Lbl_DateOuverture = ""
        Me.Lbl_DateModification = ""
        Me.Lbl_DateCloture = ""
        Me.Lbl_Description = ""
        Exit Sub
    End If
    
'*******************************
    'Controls de saisie
    If Me.Lbl_DateOuverture = "" Or Not IsDate(Me.Lbl_DateOuverture) Then 'on vérifie que il y a une date et qu'elle est valide
        'TxtDateCloture.BackColor = RGB(255, 0, 0)
        MsgBox "Merci Il y pas de date Ouverture"
        Lbl_DateOuverture.SetFocus
        Exit Sub...

mld.sebastien

XLDnaute Junior
Ah oui en formule Excel je l'avais fait pour avoir les même résultat en vba,

enfaite pour le mois, je vois dans qu'elle sens que je voudrait c'est sélectionner le mois de l'année n'importe lequel et qui me donne l'information la.

Exemple 1 : si je sélectionne janvier(B8) 2023(B7) j'ai temps de ticket en cours ou clos ou total du mois janvier.
Exemple 2 : sur une période sélectionner la même chose.

Je met le bon fichier ;).
Merci pour ta patience.
 

Pièces jointes

  • EVT 2023.xlsm
    79.7 KB · Affichages: 2

mld.sebastien

XLDnaute Junior
bonjour,
Es possible de regarder mon fichier et voir si des choses peuvent être améliorer ou plus simple,

Pour la récupération de données vers ma fiche, es possible d’incrémenter des lignes dans la partis description? et je vais sans doute mettre un bouton pour imprimer cela je cherche un code pour cela.

J'ai dans le module1 les code mensuel et calendrier faudra t il les supprimer? quand penser vous de cela on peu faire mieux le code??
 

Pièces jointes

  • EVT 2023.xlsm
    86.2 KB · Affichages: 0

mld.sebastien

XLDnaute Junior
bonjour,

Je voudrais comprendre ou es mon erreur sur ce code(me former) : celui -ci ce trouve dans Module1

VB:
Sub Calendrier()

Dim Debut As Date
Dim Fin As Date
Dim nbjour As Integer

Dim NBR_COURS_mois As Integer
Dim NBR_CLOS_mois As Integer

NMR_LIGNE = Sheets("EVT-MUSE").Range("B3").Value
Sheets("EVT-MUSE").Activate

Statut = Cells(NMR_LIGNE + 3, 18)
Date_Creation = Format(Cells(NMR_LIGNE + 2, 3), "dd/mm/yyyy")
Debut = CDate(Sheets("Préface").Range("E17").Value)
Fin = CDate(Sheets("Préface").Range("E18").Value)

On Error GoTo date_erreur
    If Debut <= Fin Then
        While NMR_LIGNE > 0
            If Date_Creation >= Fin And Date_Creation <= Debut Then
                Else
                Select Case Statut
                    Case "Clos"
                        NBR_CLOS_mois = NBR_CLOS_mois + 1
                    Case "En cours"
                        NBR_COURS_mois = NBR_COURS_mois + 1
                End Select
            End If
                NMR_LIGNE = NMR_LIGNE - 1
        Wend
                  
        'MsgBox Cells(NMR_LIGNE + 2, 18).Value
        Sheets("Préface").Range("E22") = NBR_CLOS_mois
        Sheets("Préface").Range("D22") = NBR_COURS_mois
        Sheets("Préface").Select
    Exit Sub
        Else
            MsgBox "La date de fin saisie est avant la date de début." & vbCrLf & " Veuillez saisir des bonnes valeurs!!", vbInformation + vbOKOnly, "INFORMATION"
    Exit Sub
    End If
date_erreur:
    MsgBox "Soit la valeur saisie ne correspond pas a une date" & vbCrLf & "Soit vous avez arreter la saisie", vbCritical
End Sub
 

Pièces jointes

  • EVT 2023.xlsm
    91.2 KB · Affichages: 4

vgendron

XLDnaute Barbatruc
bonjour

il suffit d'executer ton code en mode pas à pas pour déceler le problème
NMR_Ligne = 1 dès le début
comme tu fais NMR_Ligne - 1 ==> il arrive tout de suite à 0 ; donc fin de boucle while

si tu restais sur la méthode déjà proposée:
for i=1 to listrows.count
tu serais sur de parcourir toutes les lignes, et tu n'aurais pas à trier ton tableau en ordre décroissant ..
 

mld.sebastien

XLDnaute Junior
bonjour

il suffit d'executer ton code en mode pas à pas pour déceler le problème
NMR_Ligne = 1 dès le début
comme tu fais NMR_Ligne - 1 ==> il arrive tout de suite à 0 ; donc fin de boucle while

si tu restais sur la méthode déjà proposée:
for i=1 to listrows.count
tu serais sur de parcourir toutes les lignes, et tu n'aurais pas à trier ton tableau en ordre décroissant ..
Merci ,

j'ai refait avec le for mais j'ai la même chose, je trouve pas mon erreur je veux comprendre.

VB:
Sub Calendrier()

Dim Debut As Date
Dim Fin As Date

Dim NBR_COURS_mois As Integer
Dim NBR_CLOS_mois As Integer

'NMR_LIGNE = Sheets("EVT-MUSE").Range("B3").Value
Sheets("EVT-MUSE").Activate
'NMR_LIGNE = NMR_LIGNE - 1
'Statut = Cells(NMR_LIGNE + 3, 18)
'Date_Creation = Format(Cells(NMR_LIGNE + 2, 3), "dd/mm/yyyy")
Debut = CDate(Sheets("Préface").Range("E17").Value)
Fin = CDate(Sheets("Préface").Range("E18").Value)

'On Error GoTo date_erreur
    With Sheets("EVT-MUSE").ListObjects("t_EvtMuse") 'avec la table "t_EvtMuse" de la feuille
        For i = 1 To .ListRows.Count 'pour chaque ligne
    If Debut < Fin Then
            If .ListColumns("Date Ouverture").DataBodyRange(i) >= Fin And .ListColumns("Date Ouverture").DataBodyRange(i) <= Debut Then
                Else
                Select Case .ListColumns("Statut").DataBodyRange(i)
                    Case "Clos"
                        NBR_CLOS_mois = NBR_CLOS_mois + 1
                    Case "En cours"
                        NBR_COURS_mois = NBR_COURS_mois + 1
                End Select
            End If
        
        MsgBox NBR_CLOS_mois
        Sheets("Préface").Range("E22") = NBR_CLOS_mois
        Sheets("Préface").Range("D22") = NBR_COURS_mois
        Sheets("Préface").Select
    Exit Sub
        Else
            MsgBox "La date de fin saisie est avant la date de début." & vbCrLf & " Veuillez saisir des bonnes valeurs!!", vbInformation + vbOKOnly, "INFORMATION"
    Exit Sub
    End If
       Next i
    End With
'date_erreur:
   ' MsgBox "Soit la valeur saisie ne correspond pas a une date" & vbCrLf & "Soit vous avez arreter la saisie", vbCritical
End Sub
 

vgendron

XLDnaute Barbatruc
une meilleure indentation de ton code t'aiderait aussi....

VB:
Sub Calendrier()

Dim Debut As Date
Dim Fin As Date
Dim NBR_COURS_mois As Integer
Dim NBR_CLOS_mois As Integer

'NMR_LIGNE = Sheets("EVT-MUSE").Range("B3").Value
Sheets("EVT-MUSE").Activate
'NMR_LIGNE = NMR_LIGNE - 1
'Statut = Cells(NMR_LIGNE + 3, 18)
'Date_Creation = Format(Cells(NMR_LIGNE + 2, 3), "dd/mm/yyyy")
Debut = CDate(Sheets("Préface").Range("E17").Value)
Fin = CDate(Sheets("Préface").Range("E18").Value)

'On Error GoTo date_erreur
With Sheets("EVT-MUSE").ListObjects("t_EvtMuse") 'avec la table "t_EvtMuse" de la feuille
    For i = 1 To .ListRows.Count 'pour chaque ligne
        If Debut < Fin Then
            If .ListColumns("Date Ouverture").DataBodyRange(i) >= Fin And .ListColumns("Date Ouverture").DataBodyRange(i) <= Debut Then
                'on ne fait rien
            Else
                Select Case .ListColumns("Statut").DataBodyRange(i)
                    Case "Clos"
                        NBR_CLOS_mois = NBR_CLOS_mois + 1
                    Case "En cours"
                        NBR_COURS_mois = NBR_COURS_mois + 1
                End Select
            End If
                   
        Else
            MsgBox "La date de fin saisie est avant la date de début." & vbCrLf & " Veuillez saisir des bonnes valeurs!!", vbInformation + vbOKOnly, "INFORMATION"
            Exit Sub
        End If
    Next i
  'bloc suivant à mettre HORS de la boucle
    'MsgBox NBR_CLOS_mois
    Sheets("Préface").Range("E22") = NBR_CLOS_mois
    Sheets("Préface").Range("D22") = NBR_COURS_mois
    Sheets("Préface").Select
    'Exit sub
         
End With
'date_erreur:
' MsgBox "Soit la valeur saisie ne correspond pas a une date" & vbCrLf & "Soit vous avez arreter la saisie", vbCritical
End Sub
 

vgendron

XLDnaute Barbatruc
et il faut essayer de faire les choses dans l'ordre sans trop se compliquer
pas besoin de faire des
if condition non remplie alors
'rien
sinon
'tratiement
end if

VB:
Sub Calendrier()

Dim Debut As Date
Dim Fin As Date
Dim NBR_COURS_mois As Integer
Dim NBR_CLOS_mois As Integer

'NMR_LIGNE = Sheets("EVT-MUSE").Range("B3").Value
Sheets("EVT-MUSE").Activate
'NMR_LIGNE = NMR_LIGNE - 1
'Statut = Cells(NMR_LIGNE + 3, 18)
'Date_Creation = Format(Cells(NMR_LIGNE + 2, 3), "dd/mm/yyyy")

    Debut = CDate(Sheets("Préface").Range("E17").Value)
    Fin = CDate(Sheets("Préface").Range("E18").Value)
    If Debut > Fin Then 'on fait le test AVANT la boucle == pas la peine de le faire à chaque fois
        MsgBox "La date de fin saisie est avant la date de début." & vbCrLf & " Veuillez saisir des bonnes valeurs!!", vbInformation + vbOKOnly, "INFORMATION"
        Exit Sub
    End If
    'initialisation des compteurs
    NBR_CLOS_mois = 0
    NBR_COURS_mois = 0
    
    With Sheets("EVT-MUSE").ListObjects("t_EvtMuse") 'avec la table "t_EvtMuse" de la feuille
        For i = 1 To .ListRows.Count 'pour chaque ligne
            If .ListColumns("Date Ouverture").DataBodyRange(i) >= Debut And .ListColumns("Date Ouverture").DataBodyRange(i) <= Fin Then 'si la date est dans la période
                Select Case .ListColumns("Statut").DataBodyRange(i) 'selon le statut
                    Case "Clos"
                        NBR_CLOS_mois = NBR_CLOS_mois + 1
                    Case "En cours"
                        NBR_COURS_mois = NBR_COURS_mois + 1
                End Select
            End If
        Next i
        'mise à jour des résultats dans la feuille
        Sheets("Préface").Range("E22") = NBR_CLOS_mois
        Sheets("Préface").Range("D22") = NBR_COURS_mois
        Sheets("Préface").Select
    End With
End Sub
 

mld.sebastien

XLDnaute Junior
Ok sa fonctionne, merci je comprend mieux la façon de faire, et les commentaires super, merci

Aurais-tu 5min pour regarder mon code dans le formulaire BOX_RECHERCHE_EVT celui-ci copie les infos dans onglet Fiche suivi incident, comment je pourrais revoir ma copie pour la description, car quand j'utilise pas de modification, il y a juste la création et la clôture du ticket mais celui-ci ce met quand même.
 

vgendron

XLDnaute Barbatruc
je n'ai pas compris..
que souhaites tu que je modifie à mon code (puisque je le reconnais...)

dans le formulaire: quand tu selectionnes un NMR, les infos associées sont chargées..
mais à aucun moment ni aucun endroit tu ne peux modifier la description.. puisque les données sont mises dans un label..
 

mld.sebastien

XLDnaute Junior
Oui le formulaire bien BOX_Recherche_EVt le truc quand tu sélectionne un NMR les infos sont associées et chargées certes oui je l'ai copie dans la feuille Fiche Suivi Incident mais quand tu regarde la description de celle-ci si j'ai pas fait de modification sur mon tableau mais exemple la date modification y est.

Exemple pièce joint
 

Pièces jointes

  • 1683211717882.png
    1683211717882.png
    11 KB · Affichages: 7

vgendron

XLDnaute Barbatruc
je ne comprend pas ce que tu dis
le formulaire BOX_Recherche_EVT ne PERMET PAS de faire la moindre modification: il sert juste à remplir la feuille "Fiche Suivi Incident" à partir des données de la feuille "EVT-MUSE"

donc.. il n'ajoute pas de date
 

mld.sebastien

XLDnaute Junior
je ne comprend pas ce que tu dis
le formulaire BOX_Recherche_EVT ne PERMET PAS de faire la moindre modification: il sert juste à remplir la feuille "Fiche Suivi Incident" à partir des données de la feuille "EVT-MUSE"

donc.. il n'ajoute pas de date
Oui c'est cela, ah je vois pourquoi en faite ma fiche est toujours pleine peu importe si je prend une fiche creation ou modifier ou clôturer et du coup les ligne dans la description reste, il n'y a pas d'insertion de ligne dans cette partis. Essaye avec l'exemple NMR 7(modification fiche) et NMR 8(clôture)
 

Pièces jointes

  • EVT 2023.xlsm
    107.9 KB · Affichages: 3

Discussions similaires

  • Résolu(e)
Microsoft 365 Fonction excel
Réponses
7
Affichages
206
Réponses
23
Affichages
695

Statistiques des forums

Discussions
314 450
Messages
2 109 719
Membres
110 551
dernier inscrit
Khyolyanna