GNT sans publicité, site mobile, fonctionnalitées exclusives...

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
Lire les 6 réponses

Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Céline CHARBONNIER
Le #888061
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" 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
Le #888060
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

Adrien Delcour
Le #888059
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

Le #888058
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

Anacoluthe
Le #887658
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

Publicité
Suivre les réponses
Poster une réponse
Anonyme