Remplacement de caracteres

bonjour j'ai une toute petite question sur une chose qui parait pourtant simple , dans la cellule A1 j'ecris ABCDEFGH

ensuite je voudrais que H prenne la place de A et A la place de H ce qui donne HBCDEFGA pour ca j’écris les lignes suivantes

memoire = Left(Cells(1, 1), 1) ' je stock le premier caractere dans une variable Cells(1, 1) = Replace(Cells(1, 1), Left(Cells(1, 1), 1), Right(Cells(1, 1), 1)) ' A devient H Cells(1, 1) = Replace(Cells(1, 1), Right(Cells(1, 1), 1), memoire) 'ici H devrait etre A , or le resultat est ABCDEFGA

j'avoue ne pas comprendre pourquoi le premier caractère qui est bien devenu H à partir de la 2 ieme ligne de code est remplacé par A

à la 3 ieme ligne de code ??

Merci pour vos éclaircissements ?

dans la deuxieme ligne tu remplaces H par A partout ou il se trouve

donc HBCDEFGH devient ABCDEFGA

en formule le bon resultat est obtenu par :

=DROITE(D3;1)&STXT(D3;2;6)&GAUCHE(D3;1)

Cordialement

Bonjour rocket4,

Je te propose ce fichier Excel :

10exo-rocket4.xlsm (12.98 Ko)

Tu peux voir que A1 contient déjà "ABCDEFGH" ; fais Ctrl e ➯ inversion des caractères extrêmes ; donc si tu refais Ctrl e, c'est tout naturellement que tu retournes à la situation initiale. ça marche pour toute chaîne de 2 caractères minimum.

Alt F11 pour voir le code VBA, puis revenir sur Excel

Merci de me donner ton avis.

dhany

@rocket4 : ajout

J'ai fait la même chose sous forme d'une fonction personnalisée SwpFLL() : Swap First and Last Letter (échange de la 1ère et de la dernière lettre) ; dans ce cas, le résultat de la fonction doit bien sûr être dans une autre cellule que celle de la chaîne de départ.

12exo-rocket4-2.xlsm (13.39 Ko)

Alt F11 pour voir le code VBA, puis revenir sur Excel


Dans le code VBA, note bien qu'il y a ces 2 cas explicites :

a) chaîne de longueur 1 ➯ retour de la même chaîne initiale (longueur 1 aussi)

b) chaîne de longueur > 1 ➯ retour de la chaîne avec inversion des 2 caractères extrêmes (même longueur)

Attention : il y a aussi ce cas implicite : cellule vide ➯ chaîne de longueur nulle (longueur = 0) ➯ ne rien faire ➯

SwpFLL = valeur d'initialisation implicite d'une chaîne : vide : le String de « Function SwpFLL(chn$) As String »


Si besoin, tu peux demander une adaptation.

Merci de me donner ton avis.

dhany

Merci dhany je vais regarder tout ca de prè

Merci d'avoir passé le sujet en résolu, mais tu as oublié de télécharger mon 1er fichier ! (celui du post de 18:05)

screen

Même si la fonction SwpFLL() t'intéresse plus, tu devrais quand même regarder le code VBA de la sub Essai(), au cas où tu voudrais avoir le résultat dans la même cellule que la chaîne de caractères initiale, et ne serait-ce que pour comparer les 2 méthodes.

dhany

Un grand Merci dhany , j'ai relu votre code et je ne suis pas tres famillié avec certaines lignes de code que vous utilisez

toutefois j'ai pu m'en sortir via la notion de tableau en ecrivant un truc asez simple :

Option Base 1 Sub Feuil2_Bouton1_QuandClic() Dim t As Variant ReDim t(1 To Len(Cells(1, 1))) For i = 1 To UBound(t) t(i) = Mid(Cells(1, 1), i, 1) Next p = t(1) q = t(Len(Cells(1, 1))) t(1) = Replace(t(1), t(1), q) t(Len(Cells(1, 1))) = Replace(t(Len(Cells(1, 1))), t(Len(Cells(1, 1))), p) For J = 1 To UBound(t) x = x & t(J) Next Cells(1, 1) = x End Sub

ca marche mais c'est nettement plus long que votre code , toutefois je vais essayer de comprendre votre demarche

merci

Bonjour

A voir aussi

Sub Test()
Dim MaVar As String
MaVar = Replace(Range("A1").Value, "H", "|")
Range("B1").Value = Replace(Replace(MaVar, "A", "H"), "|", "A")
End Sub

A+

Maurice

Bonsoir archer,

Ce que tu proposes marche, mais comme tu utilises ce qui est déjà connu avec "H" et "A", ta solution ne peut marcher que pour la chaîne initiale "ABCDEFGH" ➯ ça ne marchera pas avec une chaîne de caractères qui contient ni "A" ni "H" ; pire : avec Replace, si la chaîne de départ est par exemple "ABCHEAGH", les lettres "H" et "A" de milieu de chaîne seront aussi modifiées, ce qu'il ne faut pas : le but de cet exercice est seulement d'échanger la 1ère lettre et la dernière lettre ; en conséquence, je ne peux donc pas approuver ta solution (sauf erreur de ma part).

dhany

pas du tout dhany je viens de faire le test avec ABCHEAGH et j'obtiens bien HBCHEAGA avec le code suivant :

Option Base 1

Sub Feuil2_Bouton1_QuandClic()

Dim t As Variant

ReDim t(1 To Len(Cells(1, 1)))

For i = 1 To UBound(t)

t(i) = Mid(Cells(1, 1), i, 1)

Next

p = t(1)

q = t(Len(Cells(1, 1)))

t(1) = Replace(t(1), t(1), q)

t(Len(Cells(1, 1))) = Replace(t(Len(Cells(1, 1))), t(Len(Cells(1, 1))), p)

For J = 1 To UBound(t)

x = x & t(J)

Next

Cells(1, 1) = x

End Sub

..car je ne modifie que la valeur t(i) de mon tableau ....

je n'avais pas vu que ton message etait destiné à Archer ... désolé

@rocket4

Tu a écrit :

pas du tout dhany je viens de faire le test avec ABCHEAGH et j'obtiens bien HBCHEAGA avec le code suivant : ...

Ce que j'ai écrit dans mon message de 20:51 était à propos du message d'archer de 20:31 : ça ne concernait aucunement l'un de tes messages ! je n'ai même pas cherché à tester ta méthode, car utiliser un tableau (qui plus est avec ReDim), juste pour faire un simple échange de 2 lettres me semble bien inutilement compliqué ! si tu veux, c'est pour moi comme utiliser un marteau pilon pour écraser une simple noix ... mais après tout, si ça marche, c'est l'essentiel !

ajout : je viens de voir que nos messages se sont croisés.

dhany

Rechercher des sujets similaires à "remplacement caracteres"