Calcul Max If avec valeur entrée via TextBox

Kim75

XLDnaute Occasionnel
Bonsoir le forum,

Ce serait sympa si quelqu'un pouvait me sortir de cette impasse, le but est d’incrémenter un numéro de bon d’intervention de la manière suivante*:

J’ai une BD colonne A avec des dates, et pour les fins de cette incrémentation j’ai pensé utile de créer une colonne, colonne D par exemple recevant des nombres

Je choisis la date d’intervention via le calendrier, la date choisie est entrée dans le TextBox1, au format «*yyyy-mm-dd*» (format facilitant le tri des dates)

Maintenant je dois parcourir toutes les cellules de la colonne D, en ne gardant que les cellules situées dans une ligne comportant la date choisie, et je prends la valeur maxi de ces valeurs

Cette valeur maximum, que j’appelle vmax par exemple, me sert pour nommer le nouveau bon que je créé, nom reporté dans le TextBox2 qui affichera 2014.01.20-vmax par exemple si je choisis la date du 20 janvier.

Cordialement, Kim.
 

Pièces jointes

  • Test.xlsm
    42.1 KB · Affichages: 68
  • Test.xlsm
    42.1 KB · Affichages: 66
  • Test.xlsm
    42.1 KB · Affichages: 70

Kim75

XLDnaute Occasionnel
Re : Calcul Max If avec valeur entrée via TextBox

Bonsoir Jack, le forum,

Désolé mais la fonction n'est pas tout à fait au point, il lui faut un dernier réglage :)
Un problème survient lorsqu'il n'y a dans la colonne A qu'une seule occurrence pour une date donnée
La fonction MaxIf renvoie systématiquement « 1 » quelque soit la date (unique) présente dans la colonne A
Sinon, dès qu'il y a plus d'une occurrence d'une date donnée dans la colonne A, elle donne le bon résultat
Je sais que c'est parce que la fonction compare 2 valeurs successives, et là il n'y en a qu'une seule
Je ne veux pas toucher à la fonction en ajoutant des conditions, je risque d'empirer les choses
Sinon, je peux me passer de cet inconvénient en modifiant les autres codes auxquelles la fonction est liée
En tout cas, je te remercie encore, et j'espère que je ne t'embêterai plus avec cette histoire :)

Cordialement, Kim.
 

Pièces jointes

  • Test3.xlsm
    40.7 KB · Affichages: 57
  • Test3.xlsm
    40.7 KB · Affichages: 60
  • Test3.xlsm
    40.7 KB · Affichages: 51
Dernière édition:

Jack2

XLDnaute Occasionnel
Re : Calcul Max If avec valeur entrée via TextBox

Bonne nuit Kim75,

Effectivement, quand il n'y a qu'une occurrence, le test And CStr(.Range("A" & Lig)) = CStr(.Range("A" & Lig + 1)) fait sortir du While. J'ai vu qu'il existe un FindNext, je vais essayer de trouver une solution.

EDIT Il y avait bien un FindNext. En commentaire, les lignes rajoutées
Code:
With Sheets("BD")
    Der = .Range("A1", .Range("A65535").End(xlUp)).Rows.Count
    Set Plg = .Range("A1:A" & Der)
    Set Plage = Plg.Find(Ladate, LookIn:=xlValues, lookat:=xlWhole, MatchCase:=False)
    If Plage Is Nothing Then Exit Function
    Lig = Plage.Row
    Set Plage = Plg.FindNext(Plage)
    Lig2 = Plage.Row
    If Lig = Lig2 Or Plage Is Nothing Then
        Cherche_Chiffre = CLng(.Range("D" & Lig))
        Exit Function
    End If
    Tmp = .Range("A" & Lig)
    While Tmp = CStr(.Range("A" & Lig)) And CStr(.Range("A" & Lig)) = CStr(.Range("A" & Lig + 1))
        If CLng(.Range("D" & Lig)) > CLng(.Range("D" & Lig).Offset(1, 0)) Then
            Max = CLng(.Range("D" & Lig))
        Else
            Max = CLng(.Range("D" & Lig).Offset(1, 0))
        End If
        Lig = Lig + 1
    Wend
End With
Cherche_Chiffre = Max

A+ Jack2
 
Dernière édition:

Kim75

XLDnaute Occasionnel
Re : Calcul Max If avec valeur entrée via TextBox

Bonjour Jack, le forum

Désolé de relancer le sujet, mais si tu es de passage ce serait sympa si tu pouvais jeter un coup d’œil sur ces trois anomalies que j’ai relevées, en attendant bon dimanche :)

La première anomalie est que le calcul du maximum ne se fait pas sur la totalité des nombres, la fonction compare les nombres dont les lignes se succèdent, sinon elle ignore le reste des lignes, à vrai dire on peut parer à cette anomalie si on trie la colonne des dates de sorte que les ligne de même date se regroupent toutes.

La deuxième anomalie est que s'il y a un changement de maximum dans le groupe des nombres correspondant aux dates du 2014.01.28 par exemple, Plage D11:D14, la fonction ne recalcule le bon maximum que si le nouveau maximum se place dans une ligne située en dessous de celle du maximum précédant, le calcul ignore le nouveau maximum s’il est venu se placer dans une ligne en dessus de celle du maximum précédant.

Et la troisième anomalie est que si on rajoute à la suite des données dans la feuille BD à partir de la ligne 17 les valeurs suivantes :
ColA ------------------ ColB ------------------ ColC ------------------ ColD
2014-01-20 -------------------------------------------------------------- 7
2014-01-20 -------------------------------------------------------------- 3
2014-01-20 -------------------------------------------------------------- 5
2014-01-20 -------------------------------------------------------------- 1
Le résultat de la fonction est faux, ça donne 5 au lieu de 7

Cordialement, Kim.
 

Pièces jointes

  • Test4.xlsm
    43.4 KB · Affichages: 50
  • Test4.xlsm
    43.4 KB · Affichages: 57
  • Test4.xlsm
    43.4 KB · Affichages: 61
Dernière édition:

Kim75

XLDnaute Occasionnel
Re : Calcul Max If avec valeur entrée via TextBox

Salut Jack, le forum,

C'est bon c'est résolu avec la fonction MaxIf d'Excel ! :)

Code:
Option Explicit
Private Sub MonthView1_DateClick(ByVal DateClicked As Date)
TextBox1.Value = Format(DateClicked, "yyyy-mm-dd")
End Sub
Private Sub TextBox1_Change()
Dim rng As Range
Dim x As Variant
Dim i As Integer
Set rng = Range("A2", Range("A" & Rows.Count).End(xlUp))
With TextBox1
    x = CLng(CDate(TextBox1.Value))
    i = Evaluate("MAX(IF(" & rng.Address & "=" & x & "," & rng.Offset(0, 3).Address & "))") 'If the criteria range contains numerical values
End With
TextBox2.Text = i
End Sub
Cordialement, Kim.
 

Pièces jointes

  • MaxIfVba.xlsm
    47.1 KB · Affichages: 38
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 305
Messages
2 087 088
Membres
103 461
dernier inscrit
dams94