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 :

Ecrire du texte en gras et le stocker dans une variable


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    statisticien
    Inscrit en
    Juin 2017
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : statisticien
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2017
    Messages : 54
    Par défaut Ecrire du texte en gras et le stocker dans une variable
    Bonjour à tous,

    Je souhaiterais qu'une partie uniquement de mon texte stocké dans une variable soit en gras et je sèche et n'ai pas trouvé de solution adapté à mon cas ni sur ce forum ni sur les autres d'ailleurs.
    En fait je concatène plusieurs cellules Excel dans une variable qui ensuite est stocké dans une cellule. Chaque cellule Excel que je stocke dans ma variable à un nom de colonne différent et afin de pas m'y perdre je souhaiterais que le nom de la colonne soit en gras.

    En gros mon code ressemble à ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    sub compte_rendu ()
    dim resume as string
    while ligne < ligne_max
    resume = "nom : " & ws1.cells(ligne, colonne_nom).value & chr(10)
    resume = resume & "prenom : " ws1.cells(ligne, colonne_prenom).value & chr(10)
    ...
    ws2.cells(ligne, col).value = resume
    ligne = ligne +1
    wend
    end sub
    Je souhaiterais donc que mon texte ("nom : ", "prenom : ", ...) soit écrit en gras afin qu'il ressorte dans la cellule de destination (j'ai au total une 20ène de colonnes qui sont pour certaines très ressemblantes les unes aux autres mais que l'utilisateur ne doit surtout pas confondre).
    Le résultat ressemblerais donc à ca:
    nom : Lloris
    Prénom : Hugo

    Merci par avance du temps que vous consacrez à me répondre.

    Cordialement,

    y_vidal

  2. #2
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 587
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 587
    Par défaut
    Bonjour

    Une variable n'a pas de style de mise en forme

    Il faut calculer les longueurs et position de la ou des chaînes à mettre en gras puis appliquer le gras sur le contenu de la cellule en utilisant les longueurs et positions repérées

  3. #3
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    N'utilise pas de variables et remplie ta cellule de la fin vers le début.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    For ligne = 1 To ligne_max
        ws2.cells(ligne, col).Value = "prenom : " ws1.cells(ligne, colonne_prenom).value
        ws2.cells(ligne, col).Characters(1, InStr(ws2.cells(ligne, col).Value, ":")).Font.Bold = True 
     
        ws2.cells(ligne, col).Value = "nom : " & ws1.cells(ligne, colonne_nom).value & chr(10) & ws2.cells(ligne, col).Value
        ws2.cells(ligne, col).Characters(1, InStr(ws2.cells(ligne, col).Value, ":")).Font.Bold = True 
    Next ligne
    Je n'ai pas testé. Il se pourrait donc que tu ais du débugage à faire.

  4. #4
    Membre confirmé
    Homme Profil pro
    statisticien
    Inscrit en
    Juin 2017
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : statisticien
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2017
    Messages : 54
    Par défaut
    Merci pour vos réponses.

    78chris :
    Le problème étant que toutes les colonnes ne sont pas forcément remplie et ainsi la position des caractère à mettre en gras varie (en fonction du nombre de caractère contenu dans chaque cellule).

    menhir :
    En effet ta solution à l'air de fonctionner (j'ai effectué le test sur un autre fichier avec un jeu de données plus petit que le mien). Le problème est que j'ai déjà écrit une bonne partie du programme et ca m'embête de me retaper 4000 lignes de codes juste pour mettre en gras les intitulés de colonne. J'aurais du poser la question avant

    N'existe-t-il pas une balise (par ex: <b> texte en gras </b>) que je pourrais insérer au début et à la fin de chaque chaine de caractère pour qu'une fois que j'indique à Excel de mettre le contenu de la variable dans une cellule il comprenne qu'il faut mettre le contenu des balises en gras ?
    Des balises souligner, écrire en rouge ou n'importe quoi d'autre qui ferait ressortir les intitulés me conviendrais aussi.
    Sinon y a-t-il une possibilité de rechercher des mots clefs au sein d'un cellule et de les mettre en gras ?

  5. #5
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    N'existe-t-il pas une balise (par ex: <b> texte en gras </b>)
    il faudrait alors travailler tes cellule en mode html c'est pas top
    exemple
    dans une cellule j'ai "nom : toto prenom: titi"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub test()
    Set cel = Range("A1")
    texte = Replace(cel.Text, "prenom :", "<b>prenom :</b></br>")
    texte = Replace(texte, "nom :", "<b>nom :</b>")
    With CreateObject("htmlfile").parentwindow.clipboardData.setData("Text", "<html>" & texte & "</html>"): End With
    cel.Select: ActiveSheet.Paste
    End Sub
    cette methode peut etre bien pratique l'orsque tu a beaucoup de chose a modifier dans le texte de la cellule la simple mise entre balise html adequoite suffit ca diminue le code
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  6. #6
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 587
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 587
    Par défaut
    Citation Envoyé par yvidal Voir le message
    Merci pour vos réponses.

    78chris :
    Le problème étant que toutes les colonnes ne sont pas forcément remplie et ainsi la position des caractère à mettre en gras varie (en fonction du nombre de caractère contenu dans chaque cellule).

    menhir :
    ...et ca m'embête de me retaper 4000 lignes de codes juste pour mettre en gras les intitulés de colonne
    Relis mon poste : j'indique qu'il faut calculer longueur et position... C'est donc le code qui doit le faire dynamiquement et pas 4000 fois

    Intéresse-toi à aux fonctions VBA LEN, LEFT, RIGHT, MID et InStr...

  7. #7
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par yvidal Voir le message
    Le problème est que j'ai déjà écrit une bonne partie du programme et ca m'embête de me retaper 4000 lignes de codes juste pour mettre en gras les intitulés de colonne. J'aurais du poser la question avant
    Il est peu probable que cette modification concerne les 4000 lignes de code (ou alors, c'est que ce code est très mal conçu).
    Mais si tu imagines qu'il existe une solution qui va te permettre d'obtenir ce que tu souhaites sans toucher à chaque ligne du code concerné par ce remplissage, c'est que tu es très optimiste.

  8. #8
    Membre confirmé
    Homme Profil pro
    statisticien
    Inscrit en
    Juin 2017
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : statisticien
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2017
    Messages : 54
    Par défaut
    Merci à tous de vos contributions et surtout de votre réactivité.

    Je vais finalement utiliser une solution plutôt fastidieuse mais quand même moins que de me retaper tout mon code. Ayant une 20ène de mots clef à chercher je vais créer une boucle de ce genre :

    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
    Sub test()
     
        Dim ligne As Integer
        Dim num As Integer
     
        ligne = 1
        While ligne < 50
     
            num = InStr(Cells(ligne, 2), "nom :")
     
            If num > 0 Then
            Cells(ligne, 2).Characters(Start:=num, Length:=5).Font.Bold = True
            num = 0
            End If
     
            num = InStr(Cells(ligne, 2), "prenom :")
     
            If num > 0 Then
            Cells(ligne, 2).Characters(Start:=num, Length:=8).Font.Bold = True
            num = 0
            End If
     
            ligne = ligne + 1
        Wend
     
    End Sub
    Je ne savais pas qu'on pouvait utiliser du code html dans du code vba je vais essayer de trouver des tutos dessus pour une prochaine fois

    Et merci encore de m'avoir mis sur la piste.

    Cdt,

    y_vidal

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

Discussions similaires

  1. JTextPane, Ecrire du texte, Insérer images, et le tout dans une JScroll
    Par wilfryjules dans le forum Interfaces Graphiques en Java
    Réponses: 15
    Dernier message: 20/06/2011, 15h48
  2. Réponses: 8
    Dernier message: 21/11/2008, 15h18
  3. Stocker dans une variable de session une valeur
    Par leroidje dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 03/09/2008, 15h34
  4. Batch : stocker dans une variable
    Par Martin Guélat dans le forum Windows
    Réponses: 1
    Dernier message: 13/03/2007, 17h41
  5. Réponses: 2
    Dernier message: 28/02/2007, 21h01

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