Bonjour =E0 tous.
Quelqu'un pourrait-il me dire s'il est possible d'utiliser=20
l'instruction (et non fonction) Mid pour faire dans une=20
cha=EEne un remplacement qui raccourcit cette cha=EEne ?
J'aurais cru que la macro qui suit remplacerait "abcd"=20
par "xcd", mais elle la remplace par "xbcd" :
Option Explicit
Public Sub MAIN()
Dim MaChaine As String
MaChaine =3D "abcd"
Mid(MaChaine, 1, 2) =3D "x"
MsgBox "La cha=EEne est maintenant " & MaChaine
End Sub
Apparemment, je comprends mal l'effet de l'instruction Mid.
Merci d'avance =E0 qui m'=E9clairera.
Adrien
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Céline CHARBONNIER
Bonjour,
Il manque un espace devant votre x pour que cela fonctionne... En fait, c'est l'utilisation de l'élément facultatif length qui vous pose problème. Pour mieux comprendre, il vous faut une chaine de caractère plus longue exemple "toto" Alors la macro suivante: Public Sub MAIN() Dim MaChaine As String MaChaine = "abcd" Mid(MaChaine, 1, 2) = "toto" MsgBox "La chaîne est maintenant " & MaChaine End Sub donnera "tocd" car il n'utilise que 2 caractères de la chaine de remplacement...
par contre en omettant length comme ceci: Public Sub MAIN() Dim MaChaine As String MaChaine = "abcd" Mid(MaChaine, 1) = "toto" MsgBox "La chaîne est maintenant " & MaChaine End Sub On obtient "toto" en résultat, tout est remplacé.
-- Céline CHARBONNIER Sitel pour l'assistance utilisateur Microsoft
"Adrien Delcour" a écrit dans le message de news: 1829a01c41af0$3f5cdc20$ Bonjour à tous. Quelqu'un pourrait-il me dire s'il est possible d'utiliser l'instruction (et non fonction) Mid pour faire dans une chaîne un remplacement qui raccourcit cette chaîne ? J'aurais cru que la macro qui suit remplacerait "abcd" par "xcd", mais elle la remplace par "xbcd" : Option Explicit
Public Sub MAIN() Dim MaChaine As String
MaChaine = "abcd" Mid(MaChaine, 1, 2) = "x" MsgBox "La chaîne est maintenant " & MaChaine End Sub
Apparemment, je comprends mal l'effet de l'instruction Mid. Merci d'avance à qui m'éclairera. Adrien
Bonjour,
Il manque un espace devant votre x pour que cela fonctionne...
En fait, c'est l'utilisation de l'élément facultatif length qui vous pose
problème. Pour mieux comprendre, il vous faut une chaine de caractère plus
longue exemple "toto"
Alors la macro suivante:
Public Sub MAIN()
Dim MaChaine As String
MaChaine = "abcd"
Mid(MaChaine, 1, 2) = "toto"
MsgBox "La chaîne est maintenant " & MaChaine
End Sub
donnera "tocd" car il n'utilise que 2 caractères de la chaine de
remplacement...
par contre en omettant length comme ceci:
Public Sub MAIN()
Dim MaChaine As String
MaChaine = "abcd"
Mid(MaChaine, 1) = "toto"
MsgBox "La chaîne est maintenant " & MaChaine
End Sub
On obtient "toto" en résultat, tout est remplacé.
--
Céline CHARBONNIER
Sitel pour l'assistance utilisateur Microsoft
"Adrien Delcour" <anonymous@discussions.microsoft.com> a écrit dans le
message de news: 1829a01c41af0$3f5cdc20$a301280a@phx.gbl...
Bonjour à tous.
Quelqu'un pourrait-il me dire s'il est possible d'utiliser
l'instruction (et non fonction) Mid pour faire dans une
chaîne un remplacement qui raccourcit cette chaîne ?
J'aurais cru que la macro qui suit remplacerait "abcd"
par "xcd", mais elle la remplace par "xbcd" :
Option Explicit
Public Sub MAIN()
Dim MaChaine As String
MaChaine = "abcd"
Mid(MaChaine, 1, 2) = "x"
MsgBox "La chaîne est maintenant " & MaChaine
End Sub
Apparemment, je comprends mal l'effet de l'instruction Mid.
Merci d'avance à qui m'éclairera.
Adrien
Il manque un espace devant votre x pour que cela fonctionne... En fait, c'est l'utilisation de l'élément facultatif length qui vous pose problème. Pour mieux comprendre, il vous faut une chaine de caractère plus longue exemple "toto" Alors la macro suivante: Public Sub MAIN() Dim MaChaine As String MaChaine = "abcd" Mid(MaChaine, 1, 2) = "toto" MsgBox "La chaîne est maintenant " & MaChaine End Sub donnera "tocd" car il n'utilise que 2 caractères de la chaine de remplacement...
par contre en omettant length comme ceci: Public Sub MAIN() Dim MaChaine As String MaChaine = "abcd" Mid(MaChaine, 1) = "toto" MsgBox "La chaîne est maintenant " & MaChaine End Sub On obtient "toto" en résultat, tout est remplacé.
-- Céline CHARBONNIER Sitel pour l'assistance utilisateur Microsoft
"Adrien Delcour" a écrit dans le message de news: 1829a01c41af0$3f5cdc20$ Bonjour à tous. Quelqu'un pourrait-il me dire s'il est possible d'utiliser l'instruction (et non fonction) Mid pour faire dans une chaîne un remplacement qui raccourcit cette chaîne ? J'aurais cru que la macro qui suit remplacerait "abcd" par "xcd", mais elle la remplace par "xbcd" : Option Explicit
Public Sub MAIN() Dim MaChaine As String
MaChaine = "abcd" Mid(MaChaine, 1, 2) = "x" MsgBox "La chaîne est maintenant " & MaChaine End Sub
Apparemment, je comprends mal l'effet de l'instruction Mid. Merci d'avance à qui m'éclairera. Adrien
Anacoluthe
Bonjour !
'Adrien Delcour' nous a écrit ...
Quelqu'un pourrait-il me dire s'il est possible d'utiliser l'instruction (et non fonction) Mid pour faire dans une chaîne un remplacement qui raccourcit cette chaîne ? J'aurais cru que la macro qui suit remplacerait "abcd" par "xcd", mais elle la remplace par "xbcd" : Mid(MaChaine, 1, 2) = "x"
Pas compris. Mid fait un remplacement, 'x' fait 1 caractère le remplacement peut se faire donc sur au plus 1 caractère. le 2 (longueur du remplacemnt) de votre formule ne sert donc à rien ici, il est d'ailleurs facultatif. Mid n'a pas pour objet de changer la longueur de MaChaine. Il suffit de se faire une petite fonction pour ça...
Anacoluthe « Hasarder des réponses est une manière déclaircir les questions. » - Alessandro BARICCO
Bonjour !
'Adrien Delcour' nous a écrit ...
Quelqu'un pourrait-il me dire s'il est possible d'utiliser
l'instruction (et non fonction) Mid pour faire dans une
chaîne un remplacement qui raccourcit cette chaîne ?
J'aurais cru que la macro qui suit remplacerait "abcd"
par "xcd", mais elle la remplace par "xbcd" :
Mid(MaChaine, 1, 2) = "x"
Pas compris. Mid fait un remplacement, 'x' fait 1 caractère
le remplacement peut se faire donc sur au plus 1 caractère.
le 2 (longueur du remplacemnt) de votre formule ne sert
donc à rien ici, il est d'ailleurs facultatif. Mid n'a
pas pour objet de changer la longueur de MaChaine.
Il suffit de se faire une petite fonction pour ça...
Anacoluthe
« Hasarder des réponses est une manière
déclaircir les questions. »
- Alessandro BARICCO
Quelqu'un pourrait-il me dire s'il est possible d'utiliser l'instruction (et non fonction) Mid pour faire dans une chaîne un remplacement qui raccourcit cette chaîne ? J'aurais cru que la macro qui suit remplacerait "abcd" par "xcd", mais elle la remplace par "xbcd" : Mid(MaChaine, 1, 2) = "x"
Pas compris. Mid fait un remplacement, 'x' fait 1 caractère le remplacement peut se faire donc sur au plus 1 caractère. le 2 (longueur du remplacemnt) de votre formule ne sert donc à rien ici, il est d'ailleurs facultatif. Mid n'a pas pour objet de changer la longueur de MaChaine. Il suffit de se faire une petite fonction pour ça...
Anacoluthe « Hasarder des réponses est une manière déclaircir les questions. » - Alessandro BARICCO
Adrien Delcour
Merci Anacoluthe
-----Message d'origine----- Anacoluthe a répondu :
Pas compris. Mid fait un remplacement, 'x' fait 1 caractère
le remplacement peut se faire donc sur au plus 1 caractère.
le 2 (longueur du remplacemnt) de votre formule ne sert donc à rien ici, il est d'ailleurs facultatif. Mid n'a pas pour objet de changer la longueur de MaChaine. Il suffit de se faire une petite fonction pour ça...
Pas compris (je m'exprime comme vous).
Où trouve-t-on dans la documentation du Word 2000 que la sous-chaîne remplacée par Mid doit être de même longueur que la chaîne de remplacement ? Et si "Mid n'a pas pour objet de changer la longueur de MaChaine", comment se fait-il que si nous en croyons les exemples, des applications successives de Mid à une même chaîne la font passer de "Le chien saute" (14 caractères) à "Le canard sauta" (15 caractères) ? Merci d'avance A. Delcour
Merci Anacoluthe
-----Message d'origine-----
Anacoluthe a répondu :
Pas compris. Mid fait un remplacement, 'x' fait 1
caractère
le remplacement peut se faire donc sur au plus 1
caractère.
le 2 (longueur du remplacemnt) de votre formule ne sert
donc à rien ici, il est d'ailleurs facultatif. Mid n'a
pas pour objet de changer la longueur de MaChaine.
Il suffit de se faire une petite fonction pour ça...
Pas compris (je m'exprime comme vous).
Où trouve-t-on dans la documentation du Word 2000 que la
sous-chaîne remplacée par Mid doit être de même longueur
que la chaîne de remplacement ?
Et si "Mid n'a pas pour objet de changer la longueur de
MaChaine", comment se fait-il que si nous en croyons les
exemples, des applications successives de Mid à une même
chaîne la font passer de "Le chien saute" (14 caractères)
à "Le canard sauta" (15 caractères) ?
Merci d'avance
A. Delcour
-----Message d'origine----- Anacoluthe a répondu :
Pas compris. Mid fait un remplacement, 'x' fait 1 caractère
le remplacement peut se faire donc sur au plus 1 caractère.
le 2 (longueur du remplacemnt) de votre formule ne sert donc à rien ici, il est d'ailleurs facultatif. Mid n'a pas pour objet de changer la longueur de MaChaine. Il suffit de se faire une petite fonction pour ça...
Pas compris (je m'exprime comme vous).
Où trouve-t-on dans la documentation du Word 2000 que la sous-chaîne remplacée par Mid doit être de même longueur que la chaîne de remplacement ? Et si "Mid n'a pas pour objet de changer la longueur de MaChaine", comment se fait-il que si nous en croyons les exemples, des applications successives de Mid à une même chaîne la font passer de "Le chien saute" (14 caractères) à "Le canard sauta" (15 caractères) ? Merci d'avance A. Delcour
Merci Céline
-----Message d'origine----- Bonjour,
Il manque un espace devant votre x pour que cela fonctionne...
En fait, c'est l'utilisation de l'élément facultatif length qui vous pose
problème. Pour mieux comprendre, il vous faut une chaine de caractère plus
longue exemple "toto" Alors la macro suivante: Public Sub MAIN() Dim MaChaine As String MaChaine = "abcd" Mid(MaChaine, 1, 2) = "toto" MsgBox "La chaîne est maintenant " & MaChaine End Sub donnera "tocd" car il n'utilise que 2 caractères de la chaine de
remplacement...
par contre en omettant length comme ceci: Public Sub MAIN() Dim MaChaine As String MaChaine = "abcd" Mid(MaChaine, 1) = "toto" MsgBox "La chaîne est maintenant " & MaChaine End Sub On obtient "toto" en résultat, tout est remplacé.
D'accord, mais quelle est la règle précise ? Si j'en crois les exemples, des applicatios successives de Mid à une même chaîne peuvent la faire passer de "Le chien saute" (14 caractères) à "Le canard sauta" (15 caractères). Peut-être les exemples sont-ils erronés ? Et si réellement Mid ne peut pas modifier la longueur de la chaîne, pourquoi la partie théorique de la documentation ne le dit- elle pas et laisse-t-elle croire le contraire ? Je note que la fonction substr de Perl, qui est l'analogue de Mid, modifie sans problème la longueur de la chaîne, ce qui me semble normal. Merci de toute façon. Adrien
Merci Céline
-----Message d'origine-----
Bonjour,
Il manque un espace devant votre x pour que cela
fonctionne...
En fait, c'est l'utilisation de l'élément facultatif
length qui vous pose
problème. Pour mieux comprendre, il vous faut une chaine
de caractère plus
longue exemple "toto"
Alors la macro suivante:
Public Sub MAIN()
Dim MaChaine As String
MaChaine = "abcd"
Mid(MaChaine, 1, 2) = "toto"
MsgBox "La chaîne est maintenant " & MaChaine
End Sub
donnera "tocd" car il n'utilise que 2 caractères de la
chaine de
remplacement...
par contre en omettant length comme ceci:
Public Sub MAIN()
Dim MaChaine As String
MaChaine = "abcd"
Mid(MaChaine, 1) = "toto"
MsgBox "La chaîne est maintenant " & MaChaine
End Sub
On obtient "toto" en résultat, tout est remplacé.
D'accord, mais quelle est la règle précise ? Si j'en crois
les exemples, des applicatios successives de Mid à une
même chaîne peuvent la faire passer de "Le chien saute"
(14 caractères) à "Le canard sauta" (15 caractères).
Peut-être les exemples sont-ils erronés ? Et si réellement
Mid ne peut pas modifier la longueur de la chaîne,
pourquoi la partie théorique de la documentation ne le dit-
elle pas et laisse-t-elle croire le contraire ?
Je note que la fonction substr de Perl, qui est l'analogue
de Mid, modifie sans problème la longueur de la chaîne, ce
qui me semble normal.
Merci de toute façon.
Adrien
Il manque un espace devant votre x pour que cela fonctionne...
En fait, c'est l'utilisation de l'élément facultatif length qui vous pose
problème. Pour mieux comprendre, il vous faut une chaine de caractère plus
longue exemple "toto" Alors la macro suivante: Public Sub MAIN() Dim MaChaine As String MaChaine = "abcd" Mid(MaChaine, 1, 2) = "toto" MsgBox "La chaîne est maintenant " & MaChaine End Sub donnera "tocd" car il n'utilise que 2 caractères de la chaine de
remplacement...
par contre en omettant length comme ceci: Public Sub MAIN() Dim MaChaine As String MaChaine = "abcd" Mid(MaChaine, 1) = "toto" MsgBox "La chaîne est maintenant " & MaChaine End Sub On obtient "toto" en résultat, tout est remplacé.
D'accord, mais quelle est la règle précise ? Si j'en crois les exemples, des applicatios successives de Mid à une même chaîne peuvent la faire passer de "Le chien saute" (14 caractères) à "Le canard sauta" (15 caractères). Peut-être les exemples sont-ils erronés ? Et si réellement Mid ne peut pas modifier la longueur de la chaîne, pourquoi la partie théorique de la documentation ne le dit- elle pas et laisse-t-elle croire le contraire ? Je note que la fonction substr de Perl, qui est l'analogue de Mid, modifie sans problème la longueur de la chaîne, ce qui me semble normal. Merci de toute façon. Adrien
Anacoluthe
Bonjour !
'Adrien Delcour' nous a écrit ...
Où trouve-t-on dans la documentation du Word 2000 que la sous-chaîne remplacée par Mid doit être de même longueur que la chaîne de remplacement ? Et si "Mid n'a pas pour objet de changer la longueur de MaChaine", comment se fait-il que si nous en croyons les exemples, des applications successives de Mid à une même chaîne la font passer de "Le chien saute" (14 caractères) à "Le canard sauta" (15 caractères) ?
L'Aide vba WD2000 me semble claire : Mid, instruction Remplace un nombre indiqué de caractères dans une variable de type Variant (String) par des caractères extraits d'une autre chaîne. Syntaxe Mid(stringvar, start[, length]) = string La syntaxe de l'instruction Mid comprend les éléments suivants : stringvar : Nom de la variable chaîne à modifier. start : Donnée de type Variant (Long). Position du caractère dans l'argument stringvar où commence le remplacement de texte. length : Facultatif. Donnée de type Variant (Long). Nombre de caractères à remplacer. Si ce paramètre est omis, la totalité de l'argument string est utilisée. string : Expression de chaîne qui remplace une partie de l'argument stringvar.
Par contre dans la page d'exemples de l'Aide, MyString = "Le chien saute" ' Initialise la chaîne. Mid(MyString, 4, 5) = "lapin" ' MyString = "Le lapin saute". Mid(MyString, 4) = "boeuf" ' MyString = "Le boeuf saute". Mid(MyString, 4) = "boeuf sauta par-dessus" ' MyString = "Le boeuf sauta". Mid(MyString, 4, 5) = "canard" ' MyString = "Le canard sauta". il y a effectivement une erreur: le résultat final est "Le canar sauta" puisqu'il est demandé de remplacer 5 caractères de 'canard' Le 3ème exemple par contre montre bien que string est tronquée pour que stringvar ne change pas de longueur.
Refaites vos essais, tout ceci est parfaitement concordant :-) Si vous souhaitez une fonction SubStr, on peut vous la donner.
Anacoluthe « La liberté consiste à faire tout ce que permet la longueur de la chaîne. » - François CAVANNA
Bonjour !
'Adrien Delcour' nous a écrit ...
Où trouve-t-on dans la documentation du Word 2000 que la
sous-chaîne remplacée par Mid doit être de même longueur
que la chaîne de remplacement ?
Et si "Mid n'a pas pour objet de changer la longueur de
MaChaine", comment se fait-il que si nous en croyons les
exemples, des applications successives de Mid à une même
chaîne la font passer de "Le chien saute" (14 caractères)
à "Le canard sauta" (15 caractères) ?
L'Aide vba WD2000 me semble claire :
Mid, instruction
Remplace un nombre indiqué de caractères dans une variable de type
Variant (String) par des caractères extraits d'une autre chaîne.
Syntaxe
Mid(stringvar, start[, length]) = string
La syntaxe de l'instruction Mid comprend les éléments suivants :
stringvar : Nom de la variable chaîne à modifier.
start : Donnée de type Variant (Long). Position du caractère
dans l'argument stringvar où commence le remplacement de texte.
length : Facultatif. Donnée de type Variant (Long).
Nombre de caractères à remplacer. Si ce paramètre est omis,
la totalité de l'argument string est utilisée.
string : Expression de chaîne qui remplace une partie de l'argument
stringvar.
Par contre dans la page d'exemples de l'Aide,
MyString = "Le chien saute" ' Initialise la chaîne.
Mid(MyString, 4, 5) = "lapin" ' MyString = "Le lapin saute".
Mid(MyString, 4) = "boeuf" ' MyString = "Le boeuf saute".
Mid(MyString, 4) = "boeuf sauta par-dessus" ' MyString = "Le boeuf
sauta".
Mid(MyString, 4, 5) = "canard" ' MyString = "Le canard sauta".
il y a effectivement une erreur: le résultat final est "Le canar sauta"
puisqu'il est demandé de remplacer 5 caractères de 'canard'
Le 3ème exemple par contre montre bien que string est tronquée
pour que stringvar ne change pas de longueur.
Refaites vos essais, tout ceci est parfaitement concordant :-)
Si vous souhaitez une fonction SubStr, on peut vous la donner.
Anacoluthe
« La liberté consiste à faire tout ce que permet
la longueur de la chaîne. »
- François CAVANNA
Où trouve-t-on dans la documentation du Word 2000 que la sous-chaîne remplacée par Mid doit être de même longueur que la chaîne de remplacement ? Et si "Mid n'a pas pour objet de changer la longueur de MaChaine", comment se fait-il que si nous en croyons les exemples, des applications successives de Mid à une même chaîne la font passer de "Le chien saute" (14 caractères) à "Le canard sauta" (15 caractères) ?
L'Aide vba WD2000 me semble claire : Mid, instruction Remplace un nombre indiqué de caractères dans une variable de type Variant (String) par des caractères extraits d'une autre chaîne. Syntaxe Mid(stringvar, start[, length]) = string La syntaxe de l'instruction Mid comprend les éléments suivants : stringvar : Nom de la variable chaîne à modifier. start : Donnée de type Variant (Long). Position du caractère dans l'argument stringvar où commence le remplacement de texte. length : Facultatif. Donnée de type Variant (Long). Nombre de caractères à remplacer. Si ce paramètre est omis, la totalité de l'argument string est utilisée. string : Expression de chaîne qui remplace une partie de l'argument stringvar.
Par contre dans la page d'exemples de l'Aide, MyString = "Le chien saute" ' Initialise la chaîne. Mid(MyString, 4, 5) = "lapin" ' MyString = "Le lapin saute". Mid(MyString, 4) = "boeuf" ' MyString = "Le boeuf saute". Mid(MyString, 4) = "boeuf sauta par-dessus" ' MyString = "Le boeuf sauta". Mid(MyString, 4, 5) = "canard" ' MyString = "Le canard sauta". il y a effectivement une erreur: le résultat final est "Le canar sauta" puisqu'il est demandé de remplacer 5 caractères de 'canard' Le 3ème exemple par contre montre bien que string est tronquée pour que stringvar ne change pas de longueur.
Refaites vos essais, tout ceci est parfaitement concordant :-) Si vous souhaitez une fonction SubStr, on peut vous la donner.
Anacoluthe « La liberté consiste à faire tout ce que permet la longueur de la chaîne. » - François CAVANNA
Adrien Delcour
Bonjour Anacoluthe.
L'Aide vba WD2000 me semble claire : Mid, instruction Remplace un nombre indiqué de caractères dans une variable de type
Variant (String) par des caractères extraits d'une autre chaîne.
Syntaxe Mid(stringvar, start[, length]) = string La syntaxe de l'instruction Mid comprend les éléments suivants :
stringvar : Nom de la variable chaîne à modifier. start : Donnée de type Variant (Long). Position du caractère
dans l'argument stringvar où commence le remplacement de texte.
length : Facultatif. Donnée de type Variant (Long). Nombre de caractères à remplacer. Si ce paramètre est omis,
la totalité de l'argument string est utilisée. string : Expression de chaîne qui remplace une partie de l'argument
stringvar.
Par contre dans la page d'exemples de l'Aide, MyString = "Le chien saute" ' Initialise la chaîne. Mid(MyString, 4, 5) = "lapin" ' MyString = "Le lapin saute".
Mid(MyString, 4) = "boeuf" ' MyString = "Le boeuf saute".
il y a effectivement une erreur: le résultat final est "Le canar sauta"
puisqu'il est demandé de remplacer 5 caractères de 'canard'
Le 3ème exemple par contre montre bien que string est tronquée
pour que stringvar ne change pas de longueur.
Refaites vos essais, tout ceci est parfaitement concordant :-)
Tout ceci est parfaitement concordant, à ceci près que les exemples de la documentation contredisent la théorie... Abstraction faite des exemples, que nous nous accordons à considérer comme fautifs, la règle me semble être celle- ci : si la sous-chaîne (de la variable) et la chaîne de remplacement indiquées par l'utilisateur n'ont pas la même longueur, Mid les égalise en supprimant à la fin de la plus longue des deux le nombre nécessaire de caractères. La documentation me semble loin de dire les choses aussi nettement. Ceci dit, n'est-ce pas bien compliqué ? L'interdiction de modifier la longueur de la variable a peut-être pour but la rapidité d'exécution (éviter des déménagements dans la mémoire) mais je vois mal dans quel cas l'utilisateur peut tirer avantage de la troncation d'office. Et il me semble regrettable d'obliger l'utilisateur de construire lui-même sa fonction substr (ce que j'ai fait à l'aide de concaténations, je vous remercie de votre offre mais elle ne me sera pas nécessaire) alors que la syntaxe de Mid conviendrait. (C'est cette syntaxe qui est utilisée dans Perl, dans C++ et, j'imagine, dans d'autres langages.) En tout cas, merci encore, je pense que les choses sont devenues plus claires. A.D.
Bonjour Anacoluthe.
L'Aide vba WD2000 me semble claire :
Mid, instruction
Remplace un nombre indiqué de caractères dans une
variable de type
Variant (String) par des caractères extraits d'une autre
chaîne.
Syntaxe
Mid(stringvar, start[, length]) = string
La syntaxe de l'instruction Mid comprend les éléments
suivants :
stringvar : Nom de la variable chaîne à modifier.
start : Donnée de type Variant (Long). Position du
caractère
dans l'argument stringvar où commence le remplacement de
texte.
length : Facultatif. Donnée de type Variant (Long).
Nombre de caractères à remplacer. Si ce paramètre est
omis,
la totalité de l'argument string est utilisée.
string : Expression de chaîne qui remplace une partie de
l'argument
stringvar.
Par contre dans la page d'exemples de l'Aide,
MyString = "Le chien saute" ' Initialise la chaîne.
Mid(MyString, 4, 5) = "lapin" ' MyString = "Le lapin
saute".
Mid(MyString, 4) = "boeuf" ' MyString = "Le boeuf
saute".
il y a effectivement une erreur: le résultat final
est "Le canar sauta"
puisqu'il est demandé de remplacer 5 caractères
de 'canard'
Le 3ème exemple par contre montre bien que string est
tronquée
pour que stringvar ne change pas de longueur.
Refaites vos essais, tout ceci est parfaitement
concordant :-)
Tout ceci est parfaitement concordant, à ceci près que les
exemples de la documentation contredisent la théorie...
Abstraction faite des exemples, que nous nous accordons à
considérer comme fautifs, la règle me semble être celle-
ci : si la sous-chaîne (de la variable) et la chaîne de
remplacement indiquées par l'utilisateur n'ont pas la même
longueur, Mid les égalise en supprimant à la fin de la
plus longue des deux le nombre nécessaire de caractères.
La documentation me semble loin de dire les choses aussi
nettement. Ceci dit, n'est-ce pas bien compliqué ?
L'interdiction de modifier la longueur de la variable a
peut-être pour but la rapidité d'exécution (éviter des
déménagements dans la mémoire) mais je vois mal dans quel
cas l'utilisateur peut tirer avantage de la troncation
d'office. Et il me semble regrettable d'obliger
l'utilisateur de construire lui-même sa fonction substr
(ce que j'ai fait à l'aide de concaténations, je vous
remercie de votre offre mais elle ne me sera pas
nécessaire) alors que la syntaxe de Mid conviendrait.
(C'est cette syntaxe qui est utilisée dans Perl, dans C++
et, j'imagine, dans d'autres langages.) En tout cas, merci
encore, je pense que les choses sont devenues plus claires.
A.D.
L'Aide vba WD2000 me semble claire : Mid, instruction Remplace un nombre indiqué de caractères dans une variable de type
Variant (String) par des caractères extraits d'une autre chaîne.
Syntaxe Mid(stringvar, start[, length]) = string La syntaxe de l'instruction Mid comprend les éléments suivants :
stringvar : Nom de la variable chaîne à modifier. start : Donnée de type Variant (Long). Position du caractère
dans l'argument stringvar où commence le remplacement de texte.
length : Facultatif. Donnée de type Variant (Long). Nombre de caractères à remplacer. Si ce paramètre est omis,
la totalité de l'argument string est utilisée. string : Expression de chaîne qui remplace une partie de l'argument
stringvar.
Par contre dans la page d'exemples de l'Aide, MyString = "Le chien saute" ' Initialise la chaîne. Mid(MyString, 4, 5) = "lapin" ' MyString = "Le lapin saute".
Mid(MyString, 4) = "boeuf" ' MyString = "Le boeuf saute".
il y a effectivement une erreur: le résultat final est "Le canar sauta"
puisqu'il est demandé de remplacer 5 caractères de 'canard'
Le 3ème exemple par contre montre bien que string est tronquée
pour que stringvar ne change pas de longueur.
Refaites vos essais, tout ceci est parfaitement concordant :-)
Tout ceci est parfaitement concordant, à ceci près que les exemples de la documentation contredisent la théorie... Abstraction faite des exemples, que nous nous accordons à considérer comme fautifs, la règle me semble être celle- ci : si la sous-chaîne (de la variable) et la chaîne de remplacement indiquées par l'utilisateur n'ont pas la même longueur, Mid les égalise en supprimant à la fin de la plus longue des deux le nombre nécessaire de caractères. La documentation me semble loin de dire les choses aussi nettement. Ceci dit, n'est-ce pas bien compliqué ? L'interdiction de modifier la longueur de la variable a peut-être pour but la rapidité d'exécution (éviter des déménagements dans la mémoire) mais je vois mal dans quel cas l'utilisateur peut tirer avantage de la troncation d'office. Et il me semble regrettable d'obliger l'utilisateur de construire lui-même sa fonction substr (ce que j'ai fait à l'aide de concaténations, je vous remercie de votre offre mais elle ne me sera pas nécessaire) alors que la syntaxe de Mid conviendrait. (C'est cette syntaxe qui est utilisée dans Perl, dans C++ et, j'imagine, dans d'autres langages.) En tout cas, merci encore, je pense que les choses sont devenues plus claires. A.D.