Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

[Résolu] Mise en forme d'une cellule sous condition

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Lone-wolf

XLDnaute Barbatruc
Bonsoir à tous,

voici un casse-tête chinois qui, j'éspère, trouvera une solution.

Comment inserer dans la colonne D, le texte de la colonne A et le texte de la colonne C, sans modifier la mise en forme de la colonne C.


Merci d'avance.



A+ 😎
 

Pièces jointes

Dernière édition:
Re : Mise en forme d'une cellule sous condition

Re
la même procédure en VBA (une solution parmi d'autres) :
Code:
Sub a()
Dim Pl As Range, MaxCar As Byte, i As Long
With Worksheets("Feuil1")
    Set Pl = .[plage]
    MaxCar = Application.Evaluate("=MAX(LEN(" & Pl.Address(External:=True) & "))")
    For i = 2 To Pl.Rows.Count + 1
        .Cells(i, 4) = .Cells(i, 1) & Application.Rept(" ", MaxCar - Len(.Cells(i, 1))) & .Cells(i, 3)
        .Cells(i, 4).Font.Name = "Lucida Console"
        .Cells(i, 4).Font.Size = 12
    Next i
End With
End Sub

Ceci dit, le fait que tu me demandes de le faire ainsi que ta question précédente me font penser que tu n'as pas compris la formule que je t'avais proposée. Si c'est le cas, n'hésite pas à demander des explications.
A+
 
Re : Mise en forme d'une cellule sous condition

Re David,

c'est vrai que je n'ai pas vraiment saisi ce que fais la formule, tu peux me donner des explications si tu veux. Ce serait bien aussi pour les xlNautes.

Quand à moi, j'ai modifié ma précédente macro comme ceci:

Code:
Sub test()
Dim v As String, x As Byte, i%
lig = Range("a65536").End(xlUp).Row
For i = 2 To lig
v = Cells(i, 1)
x = 10 - Len(v)
v = v & Space(x)
Cells(i, 8) = v & Cells(i, 3)
With Cells(i, 8)
.Font.Name = "Lucida Console"
.Font.Size = 12
End With
Next i
End Sub

J'ai mis exprès le résultat en colonne H, pour ne pas enlever la formule.


A+ 😎
 
Re : Mise en forme d'une cellule sous condition

Re
pas top
Code:
x = 10 - Len(v)
: si tu remplaces Alexandra par Alexandrine par exemple, cela plante ! D'où l'intérêt de rechercher la longueur de chaîne maximale utilisée dans ta plage, d'où le
Code:
MAX(NBCAR(plage)
utilisé dans la formule et repris dans l'Evaluate de la macro. Je suis passé par un Evaluate pour coller à l'exemple formule où j'utilise une formule matricielle mais on peut également boucler sur toutes les valeurs de la plage pour ramener cette variable.
A+
 
Re : Mise en forme d'une cellule sous condition


Désolé, mais j'ai du mal à comprendre. 😱

Quand à x, c'est vrai qu'il faut modifier la valeur à chaque fois qu'on rajoute un nom supérieur à 10 par exemple.

Comme exemple, j'ai modifié le prénom Maria par Maria-Dolores et augmenté x à 14.


Code:
Sub test()      
Dim v1$, v2$, x As Byte, i%
lig = Range("a65536").End(xlUp).Row
For i = 2 To lig
v1 = Cells(i, 1)
v2 = " |   " & Cells(i, 2)
x = 14 - Len(v1)
v1 = v1 & Space(x)
Cells(i, 4) = v1 & v2
With Range(Cells(i, 1), Cells(i, 4))
.Font.Name = "Lucida Console"
.Font.Size = 10
End With
Next i
End Sub



A+ 😎
 
Dernière édition:
Re : [Résolu] Mise en forme d'une cellule sous condition

Re
Quand à x, c'est vrai qu'il faut modifier la valeur à chaque fois qu'on rajoute un nom supérieur à 10 par exemple.
C'est pour cela que je te recommande plutôt de rechercher la chaîne la plus longue présente dans ta plage comme je le fais dans la macro que tu m'as demandée. Sinon quel intérêt d'utiliser du VBA si tu dois à chaque fois faire cela par toi-même ?
A+
 
Re : [Résolu] Mise en forme d'une cellule sous condition

Re
Tu as tout à fait raison. Il faut que je trouve une autre façon, sans devoir utiliser Application.xxx, en souhaitant qu'il existe ce moyen.
Tout simplement en passant par une boucle comme je te l'avais suggéré :
Code:
Dim MaxNbcar As Byte
For i = 2 To Lig
    If Len(Cells(i, 1)) > MaxNbcar Then MaxNbcar = Len(Cells(i, 1))
Next i
Je récupère ainsi la valeur de MaxNbcar pour la suite de la macro et je l'utilise dans x
Code:
 x = MaxNbcar - Len(v)
Si je l'inclue dans ta macro, cela donne :
Code:
Sub test()
Dim v As String, x As Byte, i%, MaxNbcar As Byte, Lig&
Lig = Range("a65536").End(xlUp).Row
For i = 2 To Lig
    If Len(Cells(i, 1)) > MaxNbcar Then MaxNbcar = Len(Cells(i, 1))
Next i
For i = 2 To Lig
    v = Cells(i, 1)
    x = MaxNbcar - Len(v)
    v = v & Space(x)
    Cells(i, 8) = v & Cells(i, 3)
    With Cells(i, 8)
    .Font.Name = "Lucida Console"
    .Font.Size = 12
    End With
Next i
End Sub
A+
 
Dernière édition:
Re : [Résolu] Mise en forme d'une cellule sous condition

Bonsoir david84,

j'aurais jamais u l'idée d'inclure la condition comme tu le montre dans l'exemple, je m'incline. 😱


Encore une fois, merci infiniment.


Très bon weekend 😎
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
2
Affichages
239
Réponses
4
Affichages
309
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…