Excel VBA problème replace/find
CBB
-
pilas31 Messages postés 1825 Date d'inscription Statut Contributeur Dernière intervention -
pilas31 Messages postés 1825 Date d'inscription Statut Contributeur Dernière intervention -
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 !
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:
- Excel VBA problème replace/find
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Déplacer colonne excel - Guide
- Si ou excel - Guide
- Excel compter cellule couleur sans vba - Guide
4 réponses
Je me permets de Upper. J'espère être sur le bon fil, j'hésitais entre Programmation et Bureautique.
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 :
Attention bien enlever le .activate à la fin de l'instruction find
A+
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+
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..
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..