Excel VBA problème replace/find

Fermé
CBB - 20 janv. 2010 à 12:21
pilas31 Messages postés 1825 Date d'inscription vendredi 5 septembre 2008 Statut Contributeur Dernière intervention 24 avril 2020 - 22 janv. 2010 à 14:08
Bonjour à tous,
Débutant sur VBA, j'aimerai mettre en place un système de liste déroulante de mots clés, et un bouton permettant de transformer le mot-clé choisi en une phrase bien construite.
Pas de problèmes pour créer la liste déroulante en elle-même, et j'utilise la fonction replace pour les phrases simples :

Cells.Replace What:="Mot A", Replacement:="Phrase complète associée au Mot A", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Cells.Replace What:="Mot B", Replacement:="Phrase complète associée au Mot B", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False

Par contre, j'aimerai placer des changements de format (Gras/italique..) dans certaines phrases, changements qui ne sont pas supportés par la fonction Replace (qui apparement ne permet qu'un changement de format par Replace). J'ai donc bricolé un petit code avec la fonction Find qui donne ceci :

Cells.Find(What:="Mot C", After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Activate

ActiveCell.FormulaR1C1 = "Phrase complète associée au Mot C."
With ActiveCell.Characters(Start:=1, Length:=6).Font
.Name = "Times New Roman"
.FontStyle = "Gras"
.Size = 10
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleSingle
.ColorIndex = 10
End With
With ActiveCell.Characters(Start:=7, Length:=18).Font
.Name = "Times New Roman"
.FontStyle = "Normal"
.Size = 10
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = 10
End With
With ActiveCell.Characters(Start:=25, Length:=10).Font
.Name = "Times New Roman"
.FontStyle = "Gras"
.Size = 10
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = 10
End With

Ce qui donne cette phrase là : Phrase complète associée au Mot C.

Le souci avec cette version des choses, c'est qu'en cas d'absence du "Mot C", la fonction plante.
J'aimerai pouvoir rajouter une ligne disant d'ignorer le FormulaR1C1 en cas d'absence du mot-clé, mais là je sèche complètement.

J'espère avoir été clair dans ma requète, et si jamais vous connaissez une solution plus "simple" avec des variables, je suis preneur.
Merci à vous !
A voir également:

4 réponses

Je me permets de Upper. J'espère être sur le bon fil, j'hésitais entre Programmation et Bureautique.
0
pilas31 Messages postés 1825 Date d'inscription vendredi 5 septembre 2008 Statut Contributeur Dernière intervention 24 avril 2020 643
21 janv. 2010 à 17:53
Bonjour,

Oui je propose de mettre une variable de type range comme résultat du Find et de tester si elle est vide ou pas voici ce que cela donne :
Dim MaCellule As Range
Set MaCellule = Cells.Find(What:="Mot C", After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
If Not MaCellule Is Nothing Then
    MaCellule.FormulaR1C1 = "Phrase complète associée au Mot C."
    With MaCellule.Characters(Start:=1, Length:=6).Font
        .Name = "Times New Roman"
        .FontStyle = "Gras"
        .Size = 10
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleSingle
        .ColorIndex = 10
    End With
    With MaCellule.Characters(Start:=7, Length:=18).Font
        .Name = "Times New Roman"
        .FontStyle = "Normal"
        .Size = 10
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ColorIndex = 10
    End With
    With MaCellule.Characters(Start:=25, Length:=10).Font
        .Name = "Times New Roman"
        .FontStyle = "Gras"
        .Size = 10
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ColorIndex = 10
    End With
End If



Attention bien enlever le .activate à la fin de l'instruction find

A+
0
Bonjour pilas31,
Merci de ta réponse !

Ta solution fonctionne parfaitement quand le mot clé "Mot C" est tapé dans une cellule, mais la variable ne semble pas le reconnaitre quand il est choisi dans une liste déroulante ; rien ne se passe pour cette cellule.
On ne doit pas être bien loin de la solution..
0
pilas31 Messages postés 1825 Date d'inscription vendredi 5 septembre 2008 Statut Contributeur Dernière intervention 24 avril 2020 643
22 janv. 2010 à 14:08
Bonjour CBB,

Non, il n'y a pas de raison que ça ne marche pas. Aprés le choix dans la liste déroulante, la valeur de la cellule est la même que si elle est tapée directement.

Sauf bien sur si dans la liste de choix il y a une différence (pas d'espace par exemple entre Mot et C)...

A+
0