Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Formule délicate + équivalence en VBA...

14 réponses
Avatar
Domi
Bonsoir,

J'ai dans une colonne (plage nommée "NumDos") des valeurs au format texte.
Ce sont des codes qui se présentent tous de la même façon :
"Paa/xxxx"
P est une constante
aa est une année sur 2 chiffres (98, 99, 01, 02..etc)
/ est une constante (slash)
xxxx est un numéro (compris entre 0001 et 9999)

Je voudrais
1°) par une formule, connaitre dans une cellule : Le plus grand numéro
(xxxx) pour l'année en cours (aujourd'hui).

2°) Quel code VBA utiliser pour obtenir la même info dans un texbox à
l'initialisation d'un userform.
(en évitant de passer par la copie du calcul dans une cellule) ?

Exemple : avec ces valeurs : nous sommes en 2006, donc cela me renvoie
"0004"
P05/0025
P06/0001
P06/0002
P06/0003
P06/0004


Merci
Domi

10 réponses

1 2
Avatar
Youky
Pour le VBA..... cela renvoie sans les zéro 4 au lieu 004
Dim a(1000) As Integer
an = "P" & Right(Year(Now), 2)
For Each c In Sheets(1).Range("NumDos")
If Left(c.Value, 3) = an Then
nb = nb + 1
a(nb) = Right(c.Value, 4)
If gv < a(nb) Then gv = a(nb)
End If
Next
MsgBox gv 'ton textbox

Youky

"Domi" a écrit dans le message de news:

Bonsoir,

J'ai dans une colonne (plage nommée "NumDos") des valeurs au format texte.
Ce sont des codes qui se présentent tous de la même façon :
"Paa/xxxx"
P est une constante
aa est une année sur 2 chiffres (98, 99, 01, 02..etc)
/ est une constante (slash)
xxxx est un numéro (compris entre 0001 et 9999)

Je voudrais
1°) par une formule, connaitre dans une cellule : Le plus grand numéro
(xxxx) pour l'année en cours (aujourd'hui).

2°) Quel code VBA utiliser pour obtenir la même info dans un texbox à
l'initialisation d'un userform.
(en évitant de passer par la copie du calcul dans une cellule) ?

Exemple : avec ces valeurs : nous sommes en 2006, donc cela me renvoie
"0004"
P05/0025
P06/0001
P06/0002
P06/0003
P06/0004


Merci
Domi




Avatar
JLuc
*Bonjour Domi*,
Et une petite fonction ?

Function MAXIM(region As Range, annee As Long)
MAXIM = 0
For Each cel In region
If Val("20" & Mid(cel, 2, 2)) = annee Then
If Int(Right(cel, 4)) > MAXIM Then
MAXIM = Val(Right(cel, 4))
End If
End If
Next
End Function

Bonsoir,

J'ai dans une colonne (plage nommée "NumDos") des valeurs au format texte.
Ce sont des codes qui se présentent tous de la même façon :
"Paa/xxxx"
P est une constante
aa est une année sur 2 chiffres (98, 99, 01, 02..etc)
/ est une constante (slash)
xxxx est un numéro (compris entre 0001 et 9999)

Je voudrais
1°) par une formule, connaitre dans une cellule : Le plus grand numéro
(xxxx) pour l'année en cours (aujourd'hui).

2°) Quel code VBA utiliser pour obtenir la même info dans un texbox à
l'initialisation d'un userform.
(en évitant de passer par la copie du calcul dans une cellule) ?

Exemple : avec ces valeurs : nous sommes en 2006, donc cela me renvoie
"0004"
P05/0025
P06/0001
P06/0002
P06/0003
P06/0004


Merci
Domi



--
JLuc

Pensez a regarder ces sites très bien fait, ce sont des mines de trucs
et astuces !
http://www.excelabo.net
http://jacxl.free.fr/
http://dj.joss.free.fr/
C:Program FilesMicrosoft OfficeOffice1036VBALIST.XLS

Avatar
JLuc
*Bonjour Domi*,
J'ai oublier la question 2:
A l'initialisation du formulaire
TextBox1 = MAXIM(Range("nomdos"), Year(Date))

Bonsoir,

J'ai dans une colonne (plage nommée "NumDos") des valeurs au format texte.
Ce sont des codes qui se présentent tous de la même façon :
"Paa/xxxx"
P est une constante
aa est une année sur 2 chiffres (98, 99, 01, 02..etc)
/ est une constante (slash)
xxxx est un numéro (compris entre 0001 et 9999)

Je voudrais
1°) par une formule, connaitre dans une cellule : Le plus grand numéro
(xxxx) pour l'année en cours (aujourd'hui).

2°) Quel code VBA utiliser pour obtenir la même info dans un texbox à
l'initialisation d'un userform.
(en évitant de passer par la copie du calcul dans une cellule) ?

Exemple : avec ces valeurs : nous sommes en 2006, donc cela me renvoie
"0004"
P05/0025
P06/0001
P06/0002
P06/0003
P06/0004


Merci
Domi



--
JLuc

Pensez a regarder ces sites très bien fait, ce sont des mines de trucs
et astuces !
http://www.excelabo.net
http://jacxl.free.fr/
http://dj.joss.free.fr/
C:Program FilesMicrosoft OfficeOffice1036VBALIST.XLS

Avatar
michdenis
Bonjour Domi,

La formule de la feuille de calcul :

Validation matricielle : Ctrl+ Maj + enter
=ANNEE(MAX(("01/01/"&(STXT(A3:A5;2;2)))*1))
A3:A5 plage de cellules à adapter


Attention, avec ce type de formule, il y a les limitations
attachées dans le panneau de configuration de Windows
concernant l'interprétation des dates selon les années.
(Voir les options régionales du panneau de configuration)

Pour ce qui est des textbox, je ne saisis pas vraiment
où se retrouvent l'ensemble des données que tu veux
traiter ....!


Salutations!


"Domi" a écrit dans le message de news:
Bonsoir,

J'ai dans une colonne (plage nommée "NumDos") des valeurs au format texte.
Ce sont des codes qui se présentent tous de la même façon :
"Paa/xxxx"
P est une constante
aa est une année sur 2 chiffres (98, 99, 01, 02..etc)
/ est une constante (slash)
xxxx est un numéro (compris entre 0001 et 9999)

Je voudrais
1°) par une formule, connaitre dans une cellule : Le plus grand numéro
(xxxx) pour l'année en cours (aujourd'hui).

2°) Quel code VBA utiliser pour obtenir la même info dans un texbox à
l'initialisation d'un userform.
(en évitant de passer par la copie du calcul dans une cellule) ?

Exemple : avec ces valeurs : nous sommes en 2006, donc cela me renvoie
"0004"
P05/0025
P06/0001
P06/0002
P06/0003
P06/0004


Merci
Domi
Avatar
Domi
Bonsoir,
Pour le VBA, impec avec petite modif...
MonTextBox.Value = Format(gv, "000#")

La formule ? ça t'inspire pas trop ? ;o)
Merci beaucoup
Domi

"Youky" a écrit dans le message de
news:43d12830$0$19681$
Pour le VBA..... cela renvoie sans les zéro 4 au lieu 004
Dim a(1000) As Integer
an = "P" & Right(Year(Now), 2)
For Each c In Sheets(1).Range("NumDos")
If Left(c.Value, 3) = an Then
nb = nb + 1
a(nb) = Right(c.Value, 4)
If gv < a(nb) Then gv = a(nb)
End If
Next
MsgBox gv 'ton textbox

Youky

"Domi" a écrit dans le message de news:

Bonsoir,

J'ai dans une colonne (plage nommée "NumDos") des valeurs au format
texte.


Ce sont des codes qui se présentent tous de la même façon :
"Paa/xxxx"
P est une constante
aa est une année sur 2 chiffres (98, 99, 01, 02..etc)
/ est une constante (slash)
xxxx est un numéro (compris entre 0001 et 9999)

Je voudrais
1°) par une formule, connaitre dans une cellule : Le plus grand numéro
(xxxx) pour l'année en cours (aujourd'hui).

2°) Quel code VBA utiliser pour obtenir la même info dans un texbox à
l'initialisation d'un userform.
(en évitant de passer par la copie du calcul dans une cellule) ?

Exemple : avec ces valeurs : nous sommes en 2006, donc cela me renvoie
"0004"
P05/0025
P06/0001
P06/0002
P06/0003
P06/0004


Merci
Domi








Avatar
michdenis
Désolé, il en manque un bout, j'avais mal lu la question :

Validation matricielle
=MAX(SI(ANNEE(MAX(("01/01/"&(STXT(A3:A5;2;2)))*1)) 01;STXT(A3:A5;5;5)*1))

Au lieu d'écrire l'année pour laquelle tu cherches la
valeur maximum ( 01) dans mon exemple, tu utilises
une référence de cellules (á)


Salutations!


"michdenis" a écrit dans le message de news:
Bonjour Domi,

La formule de la feuille de calcul :

Validation matricielle : Ctrl+ Maj + enter
=ANNEE(MAX(("01/01/"&(STXT(A3:A5;2;2)))*1))
A3:A5 plage de cellules à adapter


Attention, avec ce type de formule, il y a les limitations
attachées dans le panneau de configuration de Windows
concernant l'interprétation des dates selon les années.
(Voir les options régionales du panneau de configuration)

Pour ce qui est des textbox, je ne saisis pas vraiment
où se retrouvent l'ensemble des données que tu veux
traiter ....!


Salutations!


"Domi" a écrit dans le message de news:
Bonsoir,

J'ai dans une colonne (plage nommée "NumDos") des valeurs au format texte.
Ce sont des codes qui se présentent tous de la même façon :
"Paa/xxxx"
P est une constante
aa est une année sur 2 chiffres (98, 99, 01, 02..etc)
/ est une constante (slash)
xxxx est un numéro (compris entre 0001 et 9999)

Je voudrais
1°) par une formule, connaitre dans une cellule : Le plus grand numéro
(xxxx) pour l'année en cours (aujourd'hui).

2°) Quel code VBA utiliser pour obtenir la même info dans un texbox à
l'initialisation d'un userform.
(en évitant de passer par la copie du calcul dans une cellule) ?

Exemple : avec ces valeurs : nous sommes en 2006, donc cela me renvoie
"0004"
P05/0025
P06/0001
P06/0002
P06/0003
P06/0004


Merci
Domi
Avatar
AV
| Exemple : avec ces valeurs : nous sommes en 2006, donc cela me renvoie
| "0004"


Avec la plage nommée "NumDos"

1°) Sur la feuille de calcul

Validation matricielle (Ctrl+ Maj + entrée)
=TEXTE(MAX(SI(STXT(NumDos;2;2)=DROITE(ANNEE(AUJOURDHUI());2);DROITE(NumDos)*1));"0000")

2°) TextBox sur UF

Private Sub UserForm_Initialize()
Me.TextBox1 =
[text(max(if(mid(numdos,2,2)=right(year(today()),2),right(numdos)*1)),"0000")]
End Sub

AV

Avatar
Domi
C'est plus concis.
Merci ;o)
Domi

"AV" a écrit dans le message de
news:
| Exemple : avec ces valeurs : nous sommes en 2006, donc cela me renvoie
| "0004"


Avec la plage nommée "NumDos"

1°) Sur la feuille de calcul

Validation matricielle (Ctrl+ Maj + entrée)

=TEXTE(MAX(SI(STXT(NumDos;2;2)=DROITE(ANNEE(AUJOURDHUI());2);DROITE(NumDos)*

1));"0000")

2°) TextBox sur UF

Private Sub UserForm_Initialize()
Me.TextBox1 >
[text(max(if(mid(numdos,2,2)=right(year(today()),2),right(numdos)*1)),"0000"

)]
End Sub

AV





Avatar
michdenis
Bonjour Domi,

| C'est plus concis.

Je m'insurge ... ;-))

Ma formule fait 6 caractères de moins de celle de AV
=MAX(SI(ANNEE("01/01/"&(STXT(A3:A10;2;2)))*1=ANNEE(AUJOURDHUI());STXT(A3:A10;5;5)*1))

Et celle de AV retourne seulement le 4 ième digit des xxxx au lieu des 4 digits demandés...
Il a omis un argument à droite(....) mais c'est selon moi ! ;-)

Ou je n'ai rien compris à ce que tu désirais !
Et ça c'est bien possible !!!

;-)))


Salutations!


"Domi" a écrit dans le message de news:
C'est plus concis.
Merci ;o)
Domi

"AV" a écrit dans le message de
news:
| Exemple : avec ces valeurs : nous sommes en 2006, donc cela me renvoie
| "0004"


Avec la plage nommée "NumDos"

1°) Sur la feuille de calcul

Validation matricielle (Ctrl+ Maj + entrée)

=TEXTE(MAX(SI(STXT(NumDos;2;2)=DROITE(ANNEE(AUJOURDHUI());2);DROITE(NumDos)*

1));"0000")

2°) TextBox sur UF

Private Sub UserForm_Initialize()
Me.TextBox1 >
[text(max(if(mid(numdos,2,2)=right(year(today()),2),right(numdos)*1)),"0000"

)]
End Sub

AV





Avatar
AV
Je m'insurge ... ;-))
Ma formule fait 6 caractères de moins de celle de AV



Bof, bof
Exact que le 2° argument de la 2° fonction DROITE est resté dans le
presse-papier (surement que bcp avaient corrigé), mais même en le rajoutant

=TEXTE(MAX(SI(STXT(NumDos;2;2)=DROITE(ANNEE(AUJOURDHUI());2);DROITE(NumDos;4)*1));"0000")
ma formule restera, me semble-t-il, plus courte car :
Extrait de la demande :
"...avec ces valeurs : nous sommes en 2006, donc cela me renvoie "0004"."
Ta formule (la 2°) renvoie "4" . il va bien falloir que tu rajoutes la
fonction TEXTE pour respecter la demande...
Ca fera alors combien de caractères ? Hum..

AV


1 2