pour pierrejean ou Pascal76 et autres bonnes âmes

O

odile

Guest
Remplacement d'un mot par un autre

Il ne s'agit pas d'un message personnel et toute personne ayant la solution à mon pb sera la bienvenue. Néanmoins étant donné que le code de la macro ci-dessous est le fruit de Pascal76 conjointement avec PierreJean, j'ai pensé que leurs auteurs seraient le plus à même de m'aider dans cette modif.

Lorsque le msgbox apparaît, c.a.d que le mot 'PP' a été trouvé dans les cellules concernées, l'utilisateur a le choix de remplacer ou non ce mot par 'PETG' selon (et c'est très important) les conditions de la macro.

Le plus simple je pense est de regarder mon fichier joint. Je crois (enfin j'espère) que tout est explicite.

Merci par avance
Odile [file name=cherchePP.zip size=9982]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/cherchePP.zip[/file]
 

Pièces jointes

  • cherchePP.zip
    9.7 KB · Affichages: 12

PascalXLD

XLDnaute Barbatruc
Modérateur
Re:Remplacement d'un mot par un autre macro

Bonjour

Pour respecter la charte du forum je change le titre qui comme tu le faisais remarquer toi-même n'est pas the must

Pour l'instant pas le temps de me plonger dans le code.
 

Charly2

Nous a quittés en 2006
Repose en paix
Re:Remplacement d'un mot par un autre macro

Bonsoir Odile, bonsoir Pascal, bonsoir à toutes et à tous :)

Je te renvoie ton fichier avec une proposition de code :

[file name=Odile_cherchePP.zip size=21425]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/Odile_cherchePP.zip[/file]

Juste quelques précisions sur ton code :

[ul][li]Tu dis que tu cherches une chaîne (PP dans le cas présenté) où qu'elle soit située dans la 'phrase'.

Ce n'est pas tout à fait exact : essaie de mettre PP en début ou en fin de chaîne et ton code ne le détectera pas. Cela vient du fait qu'il cherche ' PP ' (i.e. avec un espace devant et derrière PP).[/li]

[li]Une autre chose peut-être pas trop gênante si certaines 'mauvaises' (?) habitudes ne sont pas déjà prises : si la saisie se fait dans une sélection multiple, le code ne pourra pas vérifier la condition. Quand je parle de mauvaises habitudes, c'est que je le fais moi-même lorsque je connais à l'avance les cellules à remplir (on passe ainsi à la suivante par Entrée sans avoir besoin de regarder l'écran).

Pour tester ce cas, tu sélectionnes les cellules A1 à A10, puis tu appuies sur F2 et tu saisies une chaîne de caractères (avec le mot cherché, bien sûr) : rien ne se passe.

C'est dû au fait que lors de l'appel de la procédure, Target.Address(0, 0) sera égal à A1:A10[/li][/ul]

Tiens nous au courant.

A+ ;)
 

Pièces jointes

  • Odile_cherchePP.zip
    20.9 KB · Affichages: 12
O

odile

Guest
Re:Remplacement d'un mot par un autre macro

bonjour charly2

Merci pour ta réponse. Effectivement dans l'exemple que j'ai envoyé, j'ai en fait bêtement mis une seule des conditions de recherche pensant que la modif sera la même pour chacune d'elles.

Mais au vu de ta macro, je me rends compte que c'est nettement plus complexe que je l'imaginais. Donc pour clarifier la situation je te mets ci-dessous la macro complète de Pascal (légèrement modifiée par un msgbox avec choix)


Private Sub Worksheet_Change(ByVal Target As Range)
'code sans respect de la casse
Dim MonMot As String, MotCel As String
Dim i As Integer

For i = 13 To 47

MonMot = 'PP'

If Target.Address(0, 0) = 'U' & i Then
MotCel = UCase(Target)
If MotCel Like '* ' & MonMot & ' *' Then
MsgBox 'Vous avez choisi du' & ' ' & MonMot & ' ' & 'comme contenant. Ne préférez vous pas utiliser du PETG ?', vbInformation + vbYesNo
If vbNo Then
Exit Sub
Else
Range('U13').Replace What:=MotCel, Replacement:='PETG', LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False
End If
ElseIf MotCel Like MonMot & ' *' Then
MsgBox 'Vous avez choisi du' & ' ' & MonMot & ' ' & 'comme contenant. Ne préférez vous pas utiliser du PETG ?', vbInformation + vbYesNo
If vbNo Then
Exit Sub
Else
'Remplacement de MonMot par 'PETG'
End If
Exit Sub
ElseIf MotCel Like '* ' & MonMot Then
MsgBox 'Vous avez choisi du' & ' ' & MonMot & ' ' & 'comme contenant. Ne préférez vous pas utiliser du PETG ?', vbInformation + vbYesNo
If vbNo Then
Exit Sub
Else
'Remplacement de MonMot par 'PETG'
End If
Exit Sub
ElseIf MotCel Like MonMot Then
MsgBox 'Vous avez choisi du' & ' ' & MonMot & ' ' & 'comme contenant. Ne préférez vous pas utiliser du PETG ?', vbInformation + vbYesNo
If vbNo Then
Exit Sub
Else
'Remplacement de MonMot par 'PETG'
End If
Exit Sub
End If
End If
Next i
End Sub
 

Charly2

Nous a quittés en 2006
Repose en paix
Re:Remplacement d'un mot par un autre macro

Bonjour Odile, bonjour Pascal, bonjour à toutes et à tous :)

Ça demande un peu plus d'attention, mais ce n'est pas très compliqué :)

Je te laisse tester le fichier joint et nous dire s'il te convient ou non.

[file name=Odile_cherchePP_V2.zip size=30125]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/Odile_cherchePP_V2.zip[/file]

Bonne journée

A+ ;)
 

Pièces jointes

  • Odile_cherchePP_V2.zip
    29.4 KB · Affichages: 13
O

Odile

Guest
Re:Remplacement d'un mot par un autre macro

Tu parles si cela me convient. C'est exactement ce que je voulais. En plus chapeau pour la présentation du code. Il faudra que je m'en inspire car c'est effectivement bcp plus lisible.

Je vais étudier ton code à titre d'apprentissage et si tu as 5 minutes j'aurais peut-être 2 ou 3 questions à te poser histoire de progresser.

En tout cas merci pour tout
Odile
 
O

odile

Guest
Re:Remplacement d'un mot par un autre macro

en fait j'aimerais avoir qq préçisions sur les parties du code ci-dessous
la signification de trim, Mid et la signification des chiffres qui indiquent, je suppose la position du mot dans la phrase

Odile


MotGen = Trim(Mid(Generique, j * 4 + 1, 2) & MonMot & _
Mid(Generique, j * 4 + 3, 2))


NoCar = .Search(MotGen, Phrase, 1)
Phrase = Mid(Phrase, 1, NoCar - 1) & NouveauMot & _
Mid(Phrase, NoCar + Len(MotGen))
 

Charly2

Nous a quittés en 2006
Repose en paix
Re:Remplacement d'un mot par un autre macro

Bonjour Odile, bonjour Pascal, bonjour à toutes et à tous :)

Alors, je commence par le début :

la constante Generique contient la chaîne de caractères '*--*---**-------', les tirets étant en fait des espaces.

Dans ton code, tu faisais les tests sur :
1) '* ' & MonMot & ' *'
2) MonMot & ' *'
3) '* ' & MonMot
4) MonMot

La constante Generique a un peu la même structure : '*-|-*||--|-*||*-|--||--|--' (les caractères | et || ne sont là que la lisibilité), soit :

1) '* ' et ' *'
2) '  ' et ' *'
3) '* ' et '  '
4) '  ' et '  '.

Les parties de chaîne avec seulement des espaces sont présentes pour pouvoir faire une boucle (avec j qui varie de 0 à 3. Ces parties de chaîne composée uniquement d'espaces n'ont que cette dernière utilité.

Donc, quand j = 0, on a :

Mid(Generique, j * 4 + 1, 2) qui est égal à Mid(Generique, 1, 2),

et la fonction Mid(Texte, NoDébut, NbCar) renvoit une sous-chaîne égale à Texte à partir NoDébut de longueur NbCar. Je pense que tu pourras trouver seule en faisant les calculs que pour j = 0, on obtient '* ' avant MonMot et ' *' après.

La fonction Trim(Chaîne) supprime les espaces au début et à la fin de Chaîne ; elle a sont utilité pour les autres valeurs de j car '  ' & MonMot & '  ' = '  PP  ' deviendra alors 'PP' grâce à cette fonction.

Maintenant :

NoCar = WorksheetFunction.Search(MotGen, Phrase, 1)
Phrase = Mid (Phrase, 1, NoCar - 1) & NouveauMot & _
              Mid(
Phrase, NoCar + Len(MotGen))

WorksheetFunction.Search(MotGen, Phrase, 1) retourne la position de la sous-chaîne MotGen dans la chaîne Phrase, Phrase étant le texte contenu dans la cellule et MotGen celui cherché par la procédure épuré du caractère générique '*'.

Avec les explications précédentes sur la fonction Mid, tu peux retrouver ce que fait l'instruction

Phrase = Mid (Phrase, 1, NoCar - 1) & NouveauMot & _
               Mid(
Phrase, NoCar + Len(MotGen))

Elle place dans la variable Phrase la partie de chaîne située avant le texte à remplacer, y ajoute le texte de remplacement puis la partie de chaîne située après le texte à remplacer...

Ça fait pas trop, là ? :sick:

Lis ça tranquillement et tu verras que ce n'est pas si compliqué qu'il y paraît de prime abord :)

A+ ;)
 
O

odile

Guest
Re:Remplacement d'un mot par un autre macro

Merci Charly2

Effectivement il faut s'accrocher et je vais relire tout ça à tête reposée. Mais une première lecture m'a déjà permis d'apréhender des possibilités de vba que je ne connaissais pas. Tes explications sont claires et me permettent de 'démonter' le code et d'en comprendre son fonctionnement.

En tout cas merci pour ta patience. J'essaie tjs quand un code est au dessus de mes compétences d'en comprendre le fonctionnement d'abord parce que ca me passionne et puis par respect pour vous tous. En un effet un code assimilé signifie 'Pas deux fois la même question pour un problème similaire'.

Amicalement
Odile ;)

PS: J'espère que Pascal ne m'en veut pas pour l'intitulé de mon message. J'avoue que je ne me souvenais pas de tous les termes de la charte
 

Charly2

Nous a quittés en 2006
Repose en paix
Re:Remplacement d'un mot par un autre macro

re Odile,

Ne t'inquiètes pas pour ton sujet, c'est arrivé à bien d'autres, Pascal le dit parce qu'il est modérateur mais s'il était rancunier, ça se saurait (surtout pour ce genre de détail).

Tu peux par contre aller le modifier toi-même sur ton premier post en faisant EDITER :)

A+ ;)
 

Charly2

Nous a quittés en 2006
Repose en paix
Re:Remplacement d'un mot par un autre macro

Bonsoir Odile, bonsoir Pascal, bonsoir à toutes et à tous :)

Peut-être ne l'as-tu pas :huh: , personnellement, je l'au au bas de chacun de mes messages : REPONDRE / CITER / EDITER.

A+ ;)
 

Discussions similaires

Réponses
1
Affichages
418

Statistiques des forums

Discussions
312 347
Messages
2 087 504
Membres
103 565
dernier inscrit
Fabien78