Fonctionnement de InstrRev
Le
ThierryP

Bonjour tout le monde !
Otez-moi d'un doute La fonction InstrRev est bien censée me renvoye=
r la position d'un caractère en partant de la fin de la chaîne, càd q=
ue InstrRev("abcde","d") devrait me renvoyer 2 sur mon poste actuel, ell=
e me renvoie la même valeur que Instr, càd 4.
Un micro-climat, ou bien ????
Merci d'avance
Thierry
Otez-moi d'un doute La fonction InstrRev est bien censée me renvoye=
r la position d'un caractère en partant de la fin de la chaîne, càd q=
ue InstrRev("abcde","d") devrait me renvoyer 2 sur mon poste actuel, ell=
e me renvoie la même valeur que Instr, càd 4.
Un micro-climat, ou bien ????
Merci d'avance
Thierry
T = "abcde25214d65hh"
=InStrRev(T, "d") -> te renvoie la position du dernier "D" dans la chaine de caractère
=InStrRev(T, "d",8) -> te renvoie 4. À partir du caractère 8 en allant vers la gauche,
elle retourne la position du premier caractère "D" qu'elle rencontre
x = Mid(T, InStrRev(T, "d"), 2) -> X = d6
MichD
--------------------------------------------------------------
Toujours fidèle au poste !
Chez moi, la première instruction me renvoie 11, elle devrait me donner 5 , non?
La deuxième InStrRev(T, "d",5) me renvoie 4, soit la position du premier "d" [j'ai remplacé 8 par 5, pour déséquilibrer le calcul : avec 8 on tombe sur 4 dans un sens comme dans l'autre], la troisième me renvoie bie n "d6"
J'en perds le peu de latin que j'avais !
Thierry
Le mardi 4 décembre 2012 15:36:16 UTC+1, MichD a écrit :
Moi, je lis toujours de gauche à droite... ;-)
11 représente la position dans la chaîne lue de gauche à droite pour plus de précision.
| =InStrRev(T, "d",8) -> te renvoie 4.
Cela signifie qu'à partir de la position 8 dans la chaîne de caractères puisque c'est la
position de départ que j'ai choisi, la fonction InStrRev() renvoie 4 car elle retourne
la position de la première occurrence de la lettre "d" dans la chaîne, mais elle ne peut
pas dépasser la position 8 puisque c'est la position de départ que je lui ai donné.
C'est comme ça! Il n'y a pas grand-chose que l'on peut faire!
;-)
MichD
--------------------------------------------------------------
C'est pas un peu la cousine de STXT, ça ?
Jacquouille
" Le vin est au repas ce que le parfum est à la femme."
"MichD" a écrit dans le message de groupe de discussion :
k9l6f9$1l8$
| Chez moi, la première instruction me renvoie 11, elle devrait me donner 5,
non?
Moi, je lis toujours de gauche à droite... ;-)
11 représente la position dans la chaîne lue de gauche à droite pour plus de
précision.
| =InStrRev(T, "d",8) -> te renvoie 4.
Cela signifie qu'à partir de la position 8 dans la chaîne de caractères
puisque c'est la
position de départ que j'ai choisi, la fonction InStrRev() renvoie 4 car
elle retourne
la position de la première occurrence de la lettre "d" dans la chaîne, mais
elle ne peut
pas dépasser la position 8 puisque c'est la position de départ que je lui ai
donné.
C'est comme ça! Il n'y a pas grand-chose que l'on peut faire!
;-)
MichD
--------------------------------------------------------------
Je dirais que c'est la cousine de Instr() comme dans l'exemple suivant
s = InStr(1, "abcde", "d", vbTextCompare)
s = 4 la fonction retourne la position de la première occurrence à partir de la droite
où à partir du point de départ qu'on lui donne représenté dans mon exemple par 1
MichD
--------------------------------------------------------------
J'ignorais qu'il existait une fonction pour faire lire Excel de D vers la G.
Jacquouille
" Le vin est au repas ce que le parfum est à la femme."
"MichD" a écrit dans le message de groupe de discussion :
k9lhet$br$
Bonjour Jacquouille,
Je dirais que c'est la cousine de Instr() comme dans l'exemple suivant
s = InStr(1, "abcde", "d", vbTextCompare)
s = 4 la fonction retourne la position de la première occurrence à partir
de la droite
où à partir du point de départ qu'on lui donne représenté dans mon
exemple par 1
MichD
--------------------------------------------------------------
s = InStr(1, "abcde", "d", vbTextCompare)
s = 4 la fonction retourne la position de la première occurrence à partir
de la GAUCHE où à partir du point de départ qu'on lui donne
représenté dans mon exemple par 1
MichD
--------------------------------------------------------------
D'accord avec toi a priori, Thierry ou il y a une subtilité qui me laisse
perplexe.
Oui visiblement cet InstrRev semble avoir un souci ou ne pas faire ce qu'il
laisse entendre dans l'aide
curieux d'ailleurs que tout exemple en soit omis..
J'ai testé avec a,b,c,d et e
MsgBox InStr(1, "abcde", "d")
MsgBox InStrRev("abcde", "d")
renvoient exactement le même nombre
le troisième param de instrrev est censé etre -1 par défaut et ainsi partir
du dernier chr
Si on lit de gauche à droite une chaine la lire à l'envers me semble bien
être de droite à gauche
selon ce que dit l'aide et ce qui humblement me paraitrait logique serait
que InStrREV pour "d" ici renvoie 2
pourtant cela renvoie 4.
Si cela est prévu ainsi, c'est que quelquechose m'échappe à commencer par
l'utilité réelle de cet InstrRev.
Je m'en vais relire les explications de MichD que j'ai déjà relues trois
fois sans succès,
des fois qu'à force la lumière jaillisse, mon neurone doit souffrir du
froid.
Cordialement.
--
LSteph
"ThierryP" news:
Bonjour tout le monde !
Otez-moi d'un doute...... La fonction InstrRev est bien censée me renvoyer
la position d'un caractère en partant de la fin de la chaîne, càd que
InstrRev("abcde","d") devrait me renvoyer 2... sur mon poste actuel, elle me
renvoie la même valeur que Instr, càd 4.
Un micro-climat, ou bien ????
Merci d'avance
Thierry
J'ai testé avec a,b,c,d et e
MsgBox InStr(1, "abcdeabcdeabcde", "d")
MsgBox InStrRev("abcdeabcdeabcde", "d")
Obtiens-tu toujours le même résultat?
Les 2 fonctions déterminent toujours la position du caractère dans la chaîne
La lecture s'effectue toujours de gauche à droite.
Si on n'indique pas la position de départ,
InStr() retourne la position de la première occurrence dans la chaîne
InStrRev() retourne la position de la dernière occurrence dans la chaîne ou
la première occurrence de la lettre à partir de la droite, mais elle
lit toujours de gauche à droite.
Si on détermine la position de départ, les 2 fonctions continuent à opérer de la
même manière, mais en partant de la position suggérée dans le paramètre.
InStr() Cherche la première occurrence à partir de la position déterminée par
le paramètre (lecture de gauche à droite)
InStrRev() cherche la dernière occurrence du caractère dans la chaîne sans tenir
compte des caractères situés après la position fixée dans le paramètre
Il n'y a pas grand-chose à discuter avec les fonctions "Built-in" d'Excel. L'important
est de savoir comme elle fonctionne.
MichD
--------------------------------------------------------------
Merci MD
le REV ne s'applique donc pas à la chaine mais au coté par lequel on co mmence la recherche
la chaine se lit toujours "abcdeabcdeabcde"
et non pas "edcbaedcbaedcba"
donc on repere le premier d en partant de la fin
qui même s'il se rencontre en second se trouve à la position 14
de la chaine lue dans le sens normal.
Bien compris la nuance.
@++
--
LSteph
(mon neurone s'est réchauffé)
Le mercredi 5 décembre 2012 12:48:36 UTC+1, MichD a écrit :