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

VBA + Delete String

8 réponses
Avatar
Jocaste
Bonjour =E0 tous,

Je cherche une fonction du style Delete String ou Delete=20
Char et la fonction Copy(Str....) en VBA.

Cela fait longtemps que je cherche dans l'aide VBA Word,=20
mais je ne trouve rien.

Pouriez-vous m'aider ?

Merci d'avance pour votre aide.

8 réponses

Avatar
Anacoluthe
Bonjour !

'Jocaste' nous a écrit ...
Je cherche une fonction du style Delete String ou Delete
Char et la fonction Copy(Str....) en VBA.
Cela fait longtemps que je cherche dans l'aide VBA Word,
mais je ne trouve rien.


Ajouter, supprimer, copier un caractère ou une suite
de caractères dans quel objet ??? Votre question est
assez vague : Word manipule des chaînes dans une
foultitude de circonstances :-p Si vous parlez
uniquement des variables String de VBA, les fonctions
de base sont limitées mais permettent de définir les
plus complexes.

Anacoluthe
« Qui cherche le plaisir ne trouve que des chaînes. »
- Jacques DEVAL

Avatar
Jocaste
Exemple:

Dim Source As String

Source = "How To Delete a String"
Delete (Source, 1, 6)

supprimer dans la chaine Source les 6 premier caractères.
C'est un exemple.

Ce que je recherche c'est une instruction qui supprime un
char dans un string. Je ne parviens pas à retrouver cette
instruction. Je sais que c'est bête et quelque peut
primaire mais je suis embêter....

Merci d'avance



-----Message d'origine-----
Bonjour !

'Jocaste' nous a écrit ...
Je cherche une fonction du style Delete String ou
Delete


Char et la fonction Copy(Str....) en VBA.
Cela fait longtemps que je cherche dans l'aide VBA
Word,


mais je ne trouve rien.


Ajouter, supprimer, copier un caractère ou une suite
de caractères dans quel objet ??? Votre question est
assez vague : Word manipule des chaînes dans une
foultitude de circonstances :-p Si vous parlez
uniquement des variables String de VBA, les fonctions
de base sont limitées mais permettent de définir les
plus complexes.

Anacoluthe
« Qui cherche le plaisir ne trouve que des chaînes. »
- Jacques DEVAL
.




Avatar
geo
-----Message d'origine-----
Exemple:

Dim Source As String

Source = "How To Delete a String"
Delete (Source, 1, 6)

supprimer dans la chaine Source les 6 premier caractères.
C'est un exemple.

La c'est plus clair, en fait on ne suprime pas on

sélectionne au myen des fonctions left, right ou mid.
Dans ton cas, on sélectionne tout ce qui est à droite du 6
sixème caractère.
R = right (source, 7)

Mid permet d'extraire une partie d'une chaine au milieu.

A+


A+

Avatar
Anacoluthe
Bonjour !

'Jocaste' nous a écrit ...
Dim Source As String
Source = "How To Delete a String"
Delete (Source, 1, 6)
Ce que je recherche c'est une instruction qui supprime un
char dans un string.


Je crains que cette fonction opérant sur la position
du/des caractères n'existe pas. Il faut l'écrire.
Peut-être pensiez-vous à Replace mais ce n'est pas ça.

Anacoluthe
« Qui cherche le plaisir ne trouve que des chaînes. »
- Jacques DEVAL

Avatar
Geo
Bonjour Jocaste


[...]
Ce que je recherche c'est une instruction qui supprime un
char dans un string.


Un petit complément pour la deuxième partie.
Si tu veux supprimer un caractère d'un chaine et que tu connais sa
position (p),
tu refais une chaine avec la partie gauche et la partie droite.

R= left(source, p-1) + right(source, p+1)

--

A+

Avatar
Guy Moncomble
Bonjour à tous,
dans le message 21ea601c45d1c$ad899940$,

| Exemple:
|
| Dim Source As String
|
| Source = "How To Delete a String"
| Delete (Source, 1, 6)
|
| supprimer dans la chaine Source les 6 premier caractères.
| C'est un exemple.
|
| Ce que je recherche c'est une instruction qui supprime un
| char dans un string. Je ne parviens pas à retrouver cette
| instruction. Je sais que c'est bête et quelque peut
| primaire mais je suis embêter....

Tiens, en attendant un document plus complet sur divers remplacements,
cela peut aider :

Private Function fstrRemplaceTous(lngDépart As Long, strVieilleChaine As
String, strNouvelleChaine As String, ByVal strTexte As String) As String
Dim TailleVieilleChn As Integer
Dim Index As Integer, Pos As Integer, TailleNouvelChn As Integer,
taillestrTexte As Integer
'Remplace toutes les occurences de la chaîne strVieilleChaine par la
chaîne
'strNouvelleChaine dans strTexte
'Peut donc être utilisée pour des suppressions, strNouvelleChaine="",
'ou pour compter les caractères :
'nbcar = Len(Texte) - Len(fstrReplace(char, "", Texte))
' Noter que strTexte n'est pas modifié.
fstrRemplaceTous = strTexte
If lngDépart < 1 Or lngDépart > Len(strTexte) - Len(strVieilleChaine) +
1 Then
Exit Function
End If
If strVieilleChaine = "" Or strVieilleChaine = strNouvelleChaine Then
Exit Function
TailleVieilleChn = Len(strVieilleChaine)
TailleNouvelChn = Len(strNouvelleChaine)
Index = 1
Pos = lngDépart
While Index <> 0
taillestrTexte = Len(strTexte)
Index = InStr(Pos, strTexte, strVieilleChaine)
Select Case Index
Case 0 '
rien à remplacer
Case taillestrTexte - TailleVieilleChn + 1 ' une seule
chaîne à droite
strTexte = Left(strTexte, Index - 1) & strNouvelleChaine
Index = 0
Case Else '
au moins une chaîne
strTexte = Left(strTexte, Index - 1) & strNouvelleChaine &
Mid(strTexte, Index + TailleVieilleChn)
Pos = Index + TailleNouvelChn
End Select
Wend
fstrRemplaceTous = strTexte
End Function

Public Function fstrRemplaceNième(lngDépart As Long, ByVal strTexte As
String, strCible As String, strRemp As String, ParamArray ListElem()) As
String
'A partir de lngDépart, remplace les chaînes strCible dans strTexte, par
la chaîne strRemp,
'dans les positions de ListElem
Dim colPositions As New Collection, DebTab As Long, FinTab As Long,
PosChaine As Long
Dim iBoucle As Integer
On Error GoTo GestErr
fstrRemplaceNième = strTexte
If lngDépart < 1 Or lngDépart > Len(strTexte) - Len(strCible) + 1 Then
Exit Function
End If
'Teste la présence du tableau de paramètres
If IsMissing(ListElem()) Then
Exit Function
End If
'Taille du tableau de paramètres
DebTab = LBound(ListElem)
FinTab = UBound(ListElem)
'On recherche toutes les occurences de strCible
Set colPositions = InstrAll(lngDépart, strTexte, strCible)
If colPositions.Count = 0 Then Exit Function 'Pas de remplacement
'On remplace à partir de la fin, sinon les positions sont inutilisables
après le premier remplacement
For iBoucle = FinTab To DebTab Step -1
PosChaine = colPositions.Item(ListElem(iBoucle))
If PosChaine > 0 Then
strTexte = Left(strTexte, PosChaine - 1) & strRemp & Mid(strTexte,
PosChaine + Len(strCible))
End If
Next iBoucle
fstrRemplaceNième = strTexte
GoTo Fin
GestErr:
Select Case Err.Number
Case 9
'Le numéro d'ordre demandé n'existe pas
PosChaine = -1
Resume Next
Case Else
End Select
Fin:
End Function

Je crois avoir pas mal testé, mais on ne sait jamais
--
A+

G.M. MVP Word
Avatar
Anacoluthe
Hello Guy !

'Guy Moncomble' nous a écrit ...
Tiens, en attendant un document plus complet sur divers remplacements,
cela peut aider :
Function fstrRemplaceTous(lngDépart As Long, strVieilleChaine As
String, strNouvelleChaine As String, ByVal strTexte As String) As String
...


Tu n'utilises pas Replace ?
http://msdn.microsoft.com/library/FRE/modcore/html/deconWildcardSearchReplace.asp
(je ne sais plus depuis quelle version de vba c'est mis)

End Function
Je crois avoir pas mal testé, mais on ne sait jamais


:-) :-) :-)
Tu crois qu'il existe des macros pour tester les macros ? ;-)

Anacoluthe
« Qui cherche le plaisir ne trouve que des chaînes. »
- Jacques DEVAL

Avatar
Guy Moncomble
Bonjour à tous,
dans le message ,

| Tu n'utilises pas Replace ?

Comme tu vois, non. Le développement de ces fonctions a commencé il y a
un certain temps, et je conserve pour des raisons de compatibilité. De
plus, j'ai la faiblesse de croire que certaines de mes fonctions, pas
nécessairement celles-ci, sont meilleures que certaines proposées par
Microsoft, pour l'usage que j'en fait en tout cas. A nouveau se pose,
mais c'est un récurrent et sans fin, le problème de la compatibilité.
J'y réfléchis à mon modeste niveau, et je pense que l'écriture de
classes va me faciliter le travail (!!!!!), mais ce n'est pas si simple.
--
A+

G.M. MVP Word