Passez une cellule Excel en italique

Résolu/Fermé
nomitse - 15 déc. 2009 à 14:36
 nomitse - 15 déc. 2009 à 17:23
Bonjour,

Je souhaiterais faire passer une partie de ma cellule en italique.
exemple:

Achats / Purchases ---------> Achats / Purchases

je me demande s'il est possible de faire ça sans passer par une macro VBA.

Si oui, comment?
Si non, quelle est la macro à utiliser.

Merci d'avance

Simon
A voir également:

17 réponses

Utilisateur anonyme
15 déc. 2009 à 14:38
alors, je penses, séléctionne le texte et met en italique lol
0
Le truc c'est que j'ai plusieurs milliers de cellules à traiter. donc j'aurai voulu pouvoir automatiser ça.
0
aloulou97 Messages postés 1 Date d'inscription mardi 15 décembre 2009 Statut Membre Dernière intervention 15 décembre 2009
15 déc. 2009 à 14:41
cliquer 2 fois sur la cellule puis sélectionner la partie en question puis passer au menu format ----> cellule ------> police et cliquer sur "Italique" de la zone style
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
15 déc. 2009 à 14:46
Bonjour,
Le contenu des cellules concernées sont toutes identiques ou presque? J'entends par la qu'elles doivent toutes être selon ce schéma : écriturenormale / italique la partie à "italiquer" étant systématiquement placée derrière un "/". Si tel est le cas, on ne peux que passer par une macro. Sinon, merci de détailler votre description du tableau et des cellules concernées.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Les cellules suiventes toutes le meme format à savoir : "écriturenormale" / "écritureitalique"
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
15 déc. 2009 à 15:19
Dernières questions avant de passer à l'écriture de notre macro :
1- Ce formatage de cellules concerne toutes les cellules de ta feuille?
2- Une partie seulement?
3- Si oui y a t'il des "/" dans d'autres cellules de ta feuille?
4- Plusieurs feuilles sont elles concernées?
5- plusieurs classeurs?
0
Raph04 Messages postés 158 Date d'inscription lundi 30 juin 2008 Statut Membre Dernière intervention 17 mai 2022 24
15 déc. 2009 à 15:40
Je te propose cette macro à lancer sur la bonne colonne :

Sub transform()

Dim chaine As String
Dim lig, pos, lgt As Long
'On paramètre la première ligne (ici 1)
lig = 1
'Boucle qui passe sur chaque ligne et qui s'arrete quand il n'y a plus rien dans la colonne A
Do While Not (Range("A" & lig) = "")
    
    chaine = Range("A" & lig).Value
    'Récupère la position du /
    pos = InStr(chaine, "/")
    'Calcul de la longeur du texte à mettre en italique
    lgt = (Len(chaine) - pos) + 1
    
    'On change la police depuis la position du '/'
    With Range("A" & lig).Characters(Start:=pos, Length:=lgt).Font
        .FontStyle = "Italique"
    End With
    'On passe à la ligne suivante
    lig = lig + 1
    
Loop

End Sub
0
Raph04 Messages postés 158 Date d'inscription lundi 30 juin 2008 Statut Membre Dernière intervention 17 mai 2022 24
15 déc. 2009 à 15:43
Et là j'ai ajouter un test qui verifie qu'il y a bien un '/' sinon ça met toute la cellule en italique :

Sub transform()

Dim chaine As String
Dim lig, pos, lgt As Long
'On paramètre la première ligne (ici 1)
lig = 1
'Boucle qui passe sur chaque ligne et qui s'arrete quand il n'y a plus rien dans la colonne A
Do While Not (Range("A" & lig) = "")
    
    chaine = Range("A" & lig).Value
    'Récupère la position du /
    pos = InStr(chaine, "/")
    'Calcul de la longeur du texte à mettre en italique
    lgt = (Len(chaine) - pos) + 1
    'S'il y a bien un '/'
    If Not pos = 0 Then
        'On change la police depuis la position du '/'
        With Range("A" & lig).Characters(Start:=pos, Length:=lgt).Font
            .FontStyle = "Italique"
        End With
    End If
    'On passe à la ligne suivante
    lig = lig + 1
    
Loop

End Sub
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
15 déc. 2009 à 15:52
Salut Raph04,
Un autre code :

Sub partieitalique()
Dim debut As Integer, longueur As Integer 'définition des variables
For Each cell In ActiveSheet.UsedRange 'pour toutes les cellules de la feuille
If InStr(cell, "/") = 0 Then 'si la cellule ne contient pas de /
GoTo suite 'alors on passe à la suivante
End If
debut = InStr(cell, "/") 'place du / dans la chaine de caractères contenue dans la cellule
longueur = Len(cell) - debut + 1 'longueur de la chaine de caractères contenue dans la cellule
With cell.Characters(Start:=debut, Length:=longueur).Font 'avec la police de cette partie de cellule
.FontStyle = "Italique" 'et bien mettons la en italique
End With
suite:
Next 'cellule suivante s'il vous plait
End Sub 'fin macro

Ce code est a placé dans un module VBA : ALT + F11 Insertion/Module
Copier coller tout le code ci dessus dans la fenêtre qui vient de s'ouvrir puis fermer cette fenêtre.
Pour utiliser la macro : ALT + F8
Sélectionner "partieitalique" et cliquer sur exécuter.
Bon courage
0
Sub transform()

Dim chaine As String
Dim lig, pos, lgt As Long
'On paramètre la première ligne (ici 1)
lig = 1
'Boucle qui passe sur chaque ligne et qui s'arrete quand il n'y a plus rien dans la colonne A
Do While Not (Range("A" & lig) = "")

chaine = Range("A" & lig).Value
'Récupère la position du /
pos = InStr(chaine, "/")
'Calcul de la longeur du texte à mettre en italique
lgt = (Len(chaine) - pos) + 1
'S'il y a bien un '/'
If Not pos = 0 Then
'On change la police depuis la position du '/'
With Range("A" & lig).Characters(Start:=pos, Length:=lgt).Font
.FontStyle = "Italique"
End With
End If
'On passe à la ligne suivante
lig = lig + 1

Loop

End Sub

Merci beaucoup cette macro fonctionne très bien. J'ai une dernière question, est il possible d'affecter la macro au classeur entier?

Simon
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
15 déc. 2009 à 16:28
Oui en bouclant sur toutes les feuilles de ton classeur actif :
Dim Ws As Worksheet
For Each Ws In ActiveWorkbook
     ton code ici
Next Ws

0
Raph04 Messages postés 158 Date d'inscription lundi 30 juin 2008 Statut Membre Dernière intervention 17 mai 2022 24
15 déc. 2009 à 16:47
Oui en effet.
Mais, pour mon code cela reste sur la colonne A (ou X autre colonne choisie) ;-)
0
Cette solution va t elle me permettre d'appliquer la macro à toute les colonnes/cellules de ma feuille? ainsi qu'à toute les feuilles de mon classeur?

Simon
0
Raph04 Messages postés 158 Date d'inscription lundi 30 juin 2008 Statut Membre Dernière intervention 17 mai 2022 24
15 déc. 2009 à 16:55
Pour que cela marche sur toute les colonnes, prend le code de pijaku et ajoute le "Pour chaque Feuille" :
Sub partieitalique()
    Dim Ws As Worksheet
    Dim debut As Integer, longueur As Integer 'définition des variables
    For Each Ws In ActiveWorkbook
        For Each cell In ActiveSheet.UsedRange 'pour toutes les cellules de la feuille
            If InStr(cell, "/") = 0 Then 'si la cellule ne contient pas de /
                GoTo suite 'alors on passe à la suivante
            End If
            debut = InStr(cell, "/") 'place du / dans la chaine de caractères contenue dans la cellule
            longueur = Len(cell) - debut + 1 'longueur de la chaine de caractères contenue dans la cellule
            With cell.Characters(Start:=debut, Length:=longueur).Font 'avec la police de cette partie de cellule
                .FontStyle = "Italique" 'et bien mettons la en italique
            End With
        Next 'cellule suivante s'il vous plait
    Next Ws
End Sub 'fin macro
0
Sub partieitalique()
Dim debut As Integer, longueur As Integer 'définition des variables
For Each cell In ActiveSheet.UsedRange 'pour toutes les cellules de la feuille
If InStr(cell, "/") = 0 Then 'si la cellule ne contient pas de /
GoTo suite 'alors on passe à la suivante
End If
debut = InStr(cell, "/") 'place du / dans la chaine de caractères contenue dans la cellule
longueur = Len(cell) - debut + 1 'longueur de la chaine de caractères contenue dans la cellule
With cell.Characters(Start:=debut, Length:=longueur).Font 'avec la police de cette partie de cellule
.FontStyle = "Italique" 'et bien mettons la en italique
End With
suite:
Next 'cellule suivante s'il vous plait

Dim Ws As Worksheet
Dim debut As Integer, longueur As Integer 'définition des variables
For Each Ws In ActiveWorkbook
For Each cell In ActiveSheet.UsedRange 'pour toutes les cellules de la feuille
If InStr(cell, "/") = 0 Then 'si la cellule ne contient pas de /
GoTo suite 'alors on passe à la suivante
End If
debut = InStr(cell, "/") 'place du / dans la chaine de caractères contenue dans la cellule
longueur = Len(cell) - debut + 1 'longueur de la chaine de caractères contenue dans la cellule
With cell.Characters(Start:=debut, Length:=longueur).Font 'avec la police de cette partie de cellule
.FontStyle = "Italique" 'et bien mettons la en italique
End With
Next 'cellule suivante s'il vous plait
Next Ws
End Sub 'fin macro

Voici les deux macros compilées comme Raph m'a dit de faire seulement il y a un message d'erreur qui me dit qu'il y a une erreur de compilation : Déclaration existante dans la portée en cours. tout en surlignant "debut As Integer" sur la deuxième ligne de la deuxième partie de la macro.

Quel est le problème?

Simon
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
15 déc. 2009 à 17:18
Essaye plutôt ceci :

Sub partieitalique()
Dim debut As Integer, longueur As Integer, j As Integer
    For j = 1 To Sheets.Count
    Sheets(j).Activate
        For Each cell In ActiveSheet.UsedRange
            If InStr(cell, "/") = 0 Then
                GoTo suite
            End If
            debut = InStr(cell, "/")
            longueur = Len(cell) - debut + 1
            With cell.Characters(Start:=debut, Length:=longueur).Font
                .FontStyle = "Italique"
            End With
suite:
        Next
    Next j
End Sub
0
Ca fonctionne parfaitement,

merci à vous pour votre rapidité et vos connaissances.

Simon
0