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

fonction VBA et type de données

2 réponses
Avatar
Bourby
Bonjour,

je repose une question pour laquelle je n'ai pas pu obtenir d'aide (utiliser
cstr(rgREF) ne marche pas non plus; et je voudrais être insensible au format
des données):

dans la fonction ci-dessous, largement due à l'aide de docm sur ce forum, je
rencontre un problème avec Excel 2003 sous xp, qui ne se produisait pas avec
Excel 97 sous W2000pro.

Lorsque les valeurs (1 à n) de rgREF ne sont pas au format texte, il génère
une erreur. Cette contrainte est bien gênante, surtout que le fichier est
partagé avec des collègues, qui n'ont pas de goût particulier pour les
raffinements informatiques, et me le font savoir vertement.

Y-a-t-il une solution pour que la fonction marche avec n'importe quel
format? (en particulier le format standard)

D'avance merci pour votre aide.

Bourby

Function ValeurMaxiDansListeDeRef(rgLISTE As Range, _
rgREF As Range, rgFIN As Range, rgDéBUT As Range) As Variant
Dim a, b, d, Ajout, x, y, rgVALEURS As Range

' ajout d'un ";" en fin de liste s'il n'y est pas déjà
If rgLISTE.Value = "" Then ValeurMaxiDansListeDeRef = "": Exit Function
If Right(rgLISTE.Value, 1) = ";" Then Ajout = "" Else Ajout = ";"
a = rgLISTE.Value & Ajout

' bouclage sur les occurences de ";"
While InStr(a, ";") > 0
b = InStr(a, ";")
d = Mid(a, 1, b - 1)
a = Mid(a, b + 1)
' recherche de la tâche et calcul de la date maxi
y = Application.Match(Trim(d), rgREF, 0)
x = Application.Index(rgVALEURS, y)
If x > ValeurMaxiDansListeDeRef Then ValeurMaxiDansListeDeRef = x

Wend

End Function

2 réponses

Avatar
michdenis
Bonjour Bourby,

Elle est où ta ligne de code où tu dois utiliser : cstr(rgREF)

Dans ta procédure, le seul endroit où tu fais référence à ta variable de "TYPE RANGE" au niveau de la déclaration de ta
fonction est celle-ci :
y = Application.Match(Trim(d), rgREF, 0)

Et là , je ne vois pas comment tu peux transoformer rgRef par Cstr(rgRef) dans cette ligne de code !!!!!!!!!!


Il ne faut pas te surprendre si tu n'obtiens pas de réponse !



Salutations!






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

Bonjour,

je repose une question pour laquelle je n'ai pas pu obtenir d'aide (utiliser
cstr(rgREF) ne marche pas non plus; et je voudrais être insensible au format
des données):

dans la fonction ci-dessous, largement due à l'aide de docm sur ce forum, je
rencontre un problème avec Excel 2003 sous xp, qui ne se produisait pas avec
Excel 97 sous W2000pro.

Lorsque les valeurs (1 à n) de rgREF ne sont pas au format texte, il génère
une erreur. Cette contrainte est bien gênante, surtout que le fichier est
partagé avec des collègues, qui n'ont pas de goût particulier pour les
raffinements informatiques, et me le font savoir vertement.

Y-a-t-il une solution pour que la fonction marche avec n'importe quel
format? (en particulier le format standard)

D'avance merci pour votre aide.

Bourby

Function ValeurMaxiDansListeDeRef(rgLISTE As Range, _
rgREF As Range, rgFIN As Range, rgDéBUT As Range) As Variant
Dim a, b, d, Ajout, x, y, rgVALEURS As Range

' ajout d'un ";" en fin de liste s'il n'y est pas déjà
If rgLISTE.Value = "" Then ValeurMaxiDansListeDeRef = "": Exit Function
If Right(rgLISTE.Value, 1) = ";" Then Ajout = "" Else Ajout = ";"
a = rgLISTE.Value & Ajout

' bouclage sur les occurences de ";"
While InStr(a, ";") > 0
b = InStr(a, ";")
d = Mid(a, 1, b - 1)
a = Mid(a, b + 1)
' recherche de la tâche et calcul de la date maxi
y = Application.Match(Trim(d), rgREF, 0)
x = Application.Index(rgVALEURS, y)
If x > ValeurMaxiDansListeDeRef Then ValeurMaxiDansListeDeRef = x

Wend

End Function
Avatar
Bourby
bonjour,

tu as bien compris ma difficulté;
je veux récupérer la position dans rgREF de la valeur d.
Si cette syntaxe ne convient pas, comment faudrait-il s'y prendre?

(je m'aperçois que le problème existait aussi sous 2000, mais
mes références étaient de type a, b,c, etc... donc je ne m'en
apercevais pas).

D'avance merci


Bourby


"michdenis" a écrit dans le message news:

Bonjour Bourby,

Elle est où ta ligne de code où tu dois utiliser : cstr(rgREF)

Dans ta procédure, le seul endroit où tu fais référence à ta variable de
"TYPE RANGE" au niveau de la déclaration de ta

fonction est celle-ci :
y = Application.Match(Trim(d), rgREF, 0)

Et là , je ne vois pas comment tu peux transoformer rgRef par Cstr(rgRef)
dans cette ligne de code !!!!!!!!!!



Il ne faut pas te surprendre si tu n'obtiens pas de réponse !



Salutations!






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


Bonjour,

je repose une question pour laquelle je n'ai pas pu obtenir d'aide
(utiliser

cstr(rgREF) ne marche pas non plus; et je voudrais être insensible au
format

des données):

dans la fonction ci-dessous, largement due à l'aide de docm sur ce forum,
je

rencontre un problème avec Excel 2003 sous xp, qui ne se produisait pas
avec

Excel 97 sous W2000pro.

Lorsque les valeurs (1 à n) de rgREF ne sont pas au format texte, il
génère

une erreur. Cette contrainte est bien gênante, surtout que le fichier est
partagé avec des collègues, qui n'ont pas de goût particulier pour les
raffinements informatiques, et me le font savoir vertement.

Y-a-t-il une solution pour que la fonction marche avec n'importe quel
format? (en particulier le format standard)

D'avance merci pour votre aide.

Bourby

Function ValeurMaxiDansListeDeRef(rgLISTE As Range, _
rgREF As Range, rgFIN As Range, rgDéBUT As Range) As Variant
Dim a, b, d, Ajout, x, y, rgVALEURS As Range

' ajout d'un ";" en fin de liste s'il n'y est pas déjà
If rgLISTE.Value = "" Then ValeurMaxiDansListeDeRef = "": Exit Function
If Right(rgLISTE.Value, 1) = ";" Then Ajout = "" Else Ajout = ";"
a = rgLISTE.Value & Ajout

' bouclage sur les occurences de ";"
While InStr(a, ";") > 0
b = InStr(a, ";")
d = Mid(a, 1, b - 1)
a = Mid(a, b + 1)
' recherche de la tâche et calcul de la date maxi
y = Application.Match(Trim(d), rgREF, 0)
x = Application.Index(rgVALEURS, y)
If x > ValeurMaxiDansListeDeRef Then ValeurMaxiDansListeDeRef = x

Wend

End Function