IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

mise en forme du texte.


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 38
    Par défaut mise en forme du texte.
    bonjour,

    J'ai encore besoin d'un petit conseil :


    J'ai réalisé une petite macro qui prend des informations stockées dans un tableau dans une feuille, et qui insère ces informations dans une seule case dans une feuille2.

    Exemple : le tableau en feuille1 contient la civilité du client (M., Mme), son nom, son prénom, adresse, n° de tél etc.
    Le rendu se trouve en feuille 2 : on va grouper ces informations sur une même case (1 case = 1 client), pour constituer des "mini fiches clients".

    Ma question : je dois mettre en forme ces données (la première ligne de la case en gras, la seconde en rouge etc.), et je ne sais pas comment faire.

    Pour l'instant, voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    Sub Macro1()
     
    Dim Message As String
     
        Worksheets("Rendu").Select
        Range("A1").Select
        Worksheets("Saisie").Select
        Range("A2").Select
        While ActiveCell.Value <> ""
            Message = ActiveCell.Value & " " & ActiveCell.Offset(0, 1).Value & " " & ActiveCell.Offset(0, 2).Value & _
            Chr(10) & ActiveCell.Offset(0, 3).Value & Chr(10)
            If ActiveCell.Offset(0, 4).Value <> "" Then
                Message = Message & ActiveCell.Offset(0, 4).Value & Chr(10)
            End If
            Message = Message & ActiveCell.Offset(0, 5).Value & " " & ActiveCell.Offset(0, 6).Value & Chr(10) & Chr(10) & ActiveCell.Offset(0, 7).Value & " " & ActiveCell.Offset(0, 8).Value & Chr(10)
            If ActiveCell.Offset(0, 9).Value <> "" Then
                Message = Message & ActiveCell.Offset(0, 9).Value & Chr(10)
            End If
            If ActiveCell.Offset(0, 10).Value <> "" Then
                Message = Message & ActiveCell.Offset(0, 10).Value & Chr(10)
            End If
            Message = Message & Chr(10) & Chr(10) & ActiveCell.Offset(0, 11).Value & Chr(10) & ActiveCell.Offset(0, 12).Value
            Worksheets("Rendu").Select
            ActiveCell.Value = Message
            ActiveCell.Offset(1).Select
            Worksheets("Saisie").Select
            ActiveCell.Offset(1).Select
        Wend
     
    End Sub
    Comment puis-je faire pour "découper" mon message et mettre certaines zones en forme? J'ai essayé avec l'éditeur de macro, et il me donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
        Range("A1").Select
        ActiveCell.FormulaR1C1 = _
            "M. MONFORT Dimitri" & Chr(10) & "20, Résidence de Kervihan" & Chr(10) & "29170 FOUESNANT" & Chr(10) & "" & Chr(10) & "OF Ed 354 Suppl : OUI" & Chr(10) & "Non livré hier" & Chr(10) & "" & Chr(10) & "" & Chr(10) & "Boîte au fond du hall" & Chr(10) & ""
        With ActiveCell.Characters(Start:=1, Length:=18).Font
            .Name = "Arial"
            .FontStyle = "Gras"
            .Size = 10
            .Strikethrough = False
            .Superscript = False
            .Subscript = False
            .OutlineFont = False
            .Shadow = False
            .Underline = xlUnderlineStyleNone
            .ColorIndex = xlAutomatic
        End With
        With ActiveCell.Characters(Start:=19, Length:=105).Font
            .Name = "Arial"
            .FontStyle = "Italique"
            .Size = 10
            .Strikethrough = False
            .Superscript = False
            .Subscript = False
            .OutlineFont = False
            .Shadow = False
            .Underline = xlUnderlineStyleNone
            .ColorIndex = 3
        End With
    Mais ça ne me convient pas : le problème est que je ne connais pas d'avance la taille des informations rentrées dans le tableau, je ne peux donc pas donner un point de départ et un point d'arrivé (ça serait trop facile, hein!).

    Si vous ne vous êtes pas laissés découragés par la longueur de mon message et que vous pouvez me donner un coup de pouce, d'avance, merci.

  2. #2
    Membre Expert
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Par défaut
    La ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveCell.Characters(Start:=19, Length:=105).Font
    permet de découper le texte de ta cellule pour y mettre une couleur
    Mais ce code correspond à une sélection faite manuellement lors de l'enregistrement d'une macro. Pas très pratique mais c'est tout de même un départ.

    Pour y arriver correctement peu importe le contenu de la cellule, tu dois faire un test sur chaque caractères pour trouver les chr(10) (sauts de ligne) à l'intérieur d'une boucle il va sans dire.

    La fonction Instr te sera très utile.

    Si avec ces pistes tu n'y arrives pas, tu dis.

  3. #3
    Membre Expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Par défaut
    Bonjour,

    En restant dans le même style de programmation, je te propose de décomposer la création de ta chaine par parties :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    Dim sPart1 As String
    Dim sPart2 As String
    Dim lgLongPart1 As Long
     
     
     
     
     
        Worksheets("Rendu").Select
        Worksheets("Rendu").Range("A1").Select
        Worksheets("Saisie").Select
        Range("A2").Select
     
        While ActiveCell.Value <> ""
            lgCurL = 0
            sPart1 = ActiveCell.Value & " " & ActiveCell.Offset(0, 1).Value & " " & ActiveCell.Offset(0, 2).Value & _
            Chr(10) & ActiveCell.Offset(0, 3).Value & Chr(10)
     
            If ActiveCell.Offset(0, 4).Value <> "" Then
                sPart1 = sPart1 & ActiveCell.Offset(0, 4).Value & Chr(10)
            End If
     
     
            sPart2 = ActiveCell.Offset(0, 5).Value & " " & ActiveCell.Offset(0, 6).Value & Chr(10) & Chr(10) & ActiveCell.Offset(0, 7).Value & " " & ActiveCell.Offset(0, 8).Value & Chr(10)
            If ActiveCell.Offset(0, 9).Value <> "" Then
                sPart2 = sPart2 & ActiveCell.Offset(0, 9).Value & Chr(10)
            End If
            If ActiveCell.Offset(0, 10).Value <> "" Then
                sPart2 = sPart2 & ActiveCell.Offset(0, 10).Value & Chr(10)
            End If
     
            sPart2 = sPart2 & Chr(10) & Chr(10) & ActiveCell.Offset(0, 11).Value & Chr(10) & ActiveCell.Offset(0, 12).Value
            Worksheets("Rendu").Select
            ActiveCell.Value = sPart1 & sPart2
            ActiveCell.Offset(1).Select
            Worksheets("Saisie").Select
            ActiveCell.Offset(1).Select
     
            lgLongPart1 = Len(sPart1)
            With ActiveCell.Characters(Start:=1, Length:=lgLongPart1).Font
                .Name = "Arial"
                .FontStyle = "Gras"
                .Size = 10
                .Strikethrough = False
                .Superscript = False
                .Subscript = False
                .OutlineFont = False
                .Shadow = False
                .Underline = xlUnderlineStyleNone
                .ColorIndex = xlAutomatic
            End With
     
            With ActiveCell.Characters(Start:=lgLongPart1 + 1, Length:=lgLongPart1 + Len(sPart2)).Font
                .Name = "Arial"
                .FontStyle = "Italique"
                .Size = 10
                .Strikethrough = False
                .Superscript = False
                .Subscript = False
                .OutlineFont = False
                .Shadow = False
                .Underline = xlUnderlineStyleNone
                .ColorIndex = 3
            End With
     
     
     
        Wend


    Ceci dit, je t'invite à étudier le tuto de J.M. Rabilloud. Tu y trouveras notamment des conseils précieux quant à la manière de coder dans Excel ... entre autres d'éviter la programmation basée sur des Select et autres ActiveCell...


    Bon dev

  4. #4
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 38
    Par défaut
    Merci!

    Effectivement la méthode qui consiste à rechercher les occurences de Chr(10) était une bonne idée, mais malheureusement le nombre d'occurences de Chr(10) change selon les cases (certains clients ont une adresse2, d'autres pas etc.), ce qui m'empêchait d'isoler précisément des parties de la chaîne.

    La réponse de mout1234 m'apporte des pistes supplémentaires, je pense que grâce à tout ça, j'y arriverai...

    Un grand merci à vous 2, donc.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. mise en forme du texte
    Par i_shinji dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 27/02/2006, 12h58
  2. [Tableaux] Mise en forme champs texte
    Par dafalri dans le forum Langage
    Réponses: 2
    Dernier message: 12/12/2005, 15h04
  3. [CRYSTAL REPORT 8.5] Mise en forme du texte par balises
    Par GyLes dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 08/11/2005, 09h35
  4. Garder la mise en forme de texte dans un champ
    Par dany13 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 26/07/2005, 14h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo