VBA Instruction Mid
Le
Adrien Delcour
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
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

Poser une question


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" 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
'Adrien Delcour' nous a écrit ...
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
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
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
'Adrien Delcour' nous a écrit ...
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