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

Jack2

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

Bonne nuit Kim75,

Peut être une solution, ça à l'air de marcher.

A mettre dans l'USF
Code:
Dim VMax As Long
Dim Ladate As String
Private Sub MonthView1_DateClick(ByVal DateClicked As Date)
    TextBox1.Value = Format(DateClicked, "yyyy-mm-dd")
End Sub

Private Sub TextBox1_Change()
Ladate = CStr(TextBox1.Value)
VMax = Cherche_Chiffre(Ladate)
TextBox2 = Ladate & "-" & VMax + 1
End Sub

Private Sub TextBox2_Change()
End Sub

Private Sub UserForm_Initialize()
    TextBox2 = ""
End Sub
Et soit dans l'USF, soit dans module1
Code:
Public Function Cherche_Chiffre(Ladate As String) As Long
Dim Lig As Long
Dim Der As Long
Dim Plage As Range
Dim Tmp As String
Dim Max As Long

Der = Sheets("BD").Range("A1", Range("A65535").End(xlUp)).Rows.Count
With Sheets("BD").Range("A1:A" & Der)
    Set Plage = .Find(Ladate, LookIn:=xlValues, lookat:=xlWhole, MatchCase:=False)
    If Plage Is Nothing Then Exit Function
    Lig = Plage.Row
End With

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
Cherche_Chiffre = Max
End Function
A+ Jack2
 

Kim75

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

Salut Jack, le forum,

Un problème survient lorsque le bouton d’appel n’est pas situé sur la feuille BD
Si on met le bouton dans la «*Feuil2*» par exemple, une erreur de produit*à la ligne :
Code:
Der = Sheets("BD").Range("A1", Range("A65535").End(xlUp)).Rows.Count
J'ai essayé plein d'autres manières de désigner la dernière ligne pour éviter l'erreur, en vain
Si tu es de passage, ou quelqu'un qui aurait la solution, ce serait sympa de jeter un coup d'œil

Cordialement, Kim.
 

Pièces jointes

  • Test2.xlsm
    45.1 KB · Affichages: 54
  • Test2.xlsm
    45.1 KB · Affichages: 55
  • Test2.xlsm
    45.1 KB · Affichages: 61

Paf

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

Bonjour,

dans Der = Sheets("BD").Range("A1", Range("A65535").End(xlUp)).Rows.Count le premier range est bien "rattaché" à la feuille BD; mais le second est "rattaché" à la feuille courante.

à modifier en
Code:
Der = Sheets("BD").Range("A1", Sheets("BD").Range("A65535").End(xlUp)).Rows.Count

ou en
Code:
Der = Worksheets("BD").Range("A" & Rows.Count).End(xlUp).Row

Pas fait de tests,

Bonne suite
 
Dernière édition:

Paf

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

Re,

Ben ..., la solution c'est de rajouter Sheets("BD"). ou Worksheets("BD"). devant chaque range entre
Code:
End With
et
Code:
Wend
dans Public Function Cherche_Chiffre(Ladate As String) As Long du module 1
 

Kim75

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

Hello Paf,

C'est bon, il fallait remplacer juste une ligne, l'écrire de façon réglementaire si je puis dire :

Der = Sheets("BD").Range("A2", Range("A65535").End(xlUp)).Rows.Count

Par :

Der = ActiveWorkbook.Worksheets("BD").Range("A2", Worksheets("BD").Range("A2").End(xlDown)).Rows.Count

Merci encore de ta participation :)

Cordialement, Kim.
 

Jack2

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

Bonsoir le Fil,

J'arrive après la bataille. Je n'avais pas testé hors feuille "BD". La solution la plus simple est de mettre Sheets("BD").Activate avant Der = dans la fonction. Ce n'est pas satisfaisant, je vais essayer de voir ça demain.

A+ Jack
 

Jack2

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

Bonsoir tout le monde,

J'ai trouvé l'erreur, il faut faire avec "feuille BD" et nom avec une "plage dans la feuille BD". Autrement dit tout doit être entre With et End With :
Code:
Dim Max As Long

With Sheets("BD")
    Der = .Range("A1", .Range("A65535").End(xlUp)).Rows.Count
    Set Plage = .Range("A1:A" & Der).Find(Ladate, LookIn:=xlValues, lookat:=xlWhole, MatchCase:=False)
    If Plage Is Nothing Then Exit Function
    Lig = Plage.Row
    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
End Function
A+ Jack2
 

Kim75

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

Bonjour Jack, le forum,

Merci encore pour la fonction, sans cela je n'aurais pas avancé :)

Je prends ta modification, et je ne touche à rien, il vaut mieux :)

Bon dimanche !

Cordialement, Kim.
 

Discussions similaires

Statistiques des forums

Discussions
312 177
Messages
2 085 972
Membres
103 073
dernier inscrit
MSCHOE16