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

VBA: Ajout d'espaces en fonction des lettres

  • Initiateur de la discussion Initiateur de la discussion MJ13
  • Date de début Date de début

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 !

MJ13

XLDnaute Barbatruc
Bonjour à tous

Dans le fichier ci-dessous issu d'une analyse de variance (ou Anova), je souhaite avoir un code en VBA qui puissse me rajouter des espaces en fonction de la lettre de départ, soit avec un espace de 1 par lettre, pour une police proportionnelle, soit avec un nombre d'espaces différent en fonction de la lettre du début (voir pièce jointe).


Merci d'avance 🙂.
 

Pièces jointes

Re : VBA: Ajout d'espaces en fonction des lettres

Bonjour Michel 🙂,
Peut-être une petite fonction personnalisé 😉 :
Code:
Function Décale(Chaîne As String)
Décale = String(Asc(Chaîne) - 65, " ") & Chaîne
End Function
Bonne journée 😎
PS : Pour les polices non proportionnelles, je ne vois guère que passer non pas par des espaces, mais par du décalage dans la mise en forme de la cellule, mais rien ne sera idéal...
 
Dernière édition:
Re : VBA: Ajout d'espaces en fonction des lettres

Bonjour Michel, JNP

petite idée au passage, utilisation du retrait, exemple ci-dessous pour la cellule A1 :
Code:
Range("A1").IndentLevel = Asc(Mid(UCase(Range("A1").Value), 1, 1)) - 65
bonne journée
@+
 
Re : VBA: Ajout d'espaces en fonction des lettres

Bonjour Jean-Noël, Pierrot

Merci beaucoup pour vos solutions qui m'ont fait avancer (je les aurais jamais trouvé 😕).

Sinon pour les polices non proportionnelles, j'ai fait ceci , c'est pas très beau mais cela fonctionne 😉.

Voir pièce jointe où j'ai inclu vos solutions.

Bonne journée 🙂.
 

Pièces jointes

Re : VBA: Ajout d'espaces en fonction des lettres

Re 🙂,
Pour les non proportionnelles, si c'est uniquement esthétique, une autre proposition 😛
Code:
Sub Test3()
Dim Alphabet As String, I As Integer, Décalage As Integer, Cell As Range
For I = 65 To 90
Alphabet = Alphabet & Chr(I)
Next I
For Each Cell In Range("zone2")
Décalage = Asc(Cell.Text) - 65
If Décalage > 0 Then
Cell = Left(Alphabet, Décalage) & Cell.Text
Cell.Characters(0, Décalage).Font.ColorIndex = 2
End If
Next
End Sub
Bonne journée 😎
 
Re : VBA: Ajout d'espaces en fonction des lettres

bonjour

ou peut-être sur la base de la macro MJ :
Code:
Sub Test4()
  Dim CL As Range
  For Each CL In Range("zone") 'zone = A1:Aderli
    If CL <> "" Then
      n = Asc(UCase(CL)) - 64
      If n > 0 And n < 27 Then CL.Offset(, 1) = Application.Rept(" ", n) & CL
    End If
  Next
  'ActiveSheet.Columns("B").AutoFit
End Sub
 
Re : VBA: Ajout d'espaces en fonction des lettres

Re , bonjour Si...

JNP: merci pour cette trouvaile qui permet de s'affranchir de la taille des caractères, c 'est original 😉.

Si... . Merci Si..(sisi, j'y tiens). Ta solution est une bonne approche mais le nombre d'espace n'est pas constant entre chaque lettre 🙂.

On ne pourrait pas avoir une sorte de tableau de correspondance en VBA avec si on a un B alors ajoute 2, si on a un C, alors ajoute 3 espaces.... la je ne maîtrise pas trop 😕.
 
Re : VBA: Ajout d'espaces en fonction des lettres

Re 🙂,
Tu peux par exemple faire une chaine des 25 espacements
Code:
MaChaîne = "231212..."
et y faire appel avec le code ASCII comme on l'a utilisé tout à l'heure
Code:
Chaîne = String(Mid(MaChaîne, Asc(Chaîne) - 65, 1), " ") & Chaîne
Bon courage 😎
 
Re : VBA: Ajout d'espaces en fonction des lettres

Re

JNP: je ne comprend pas bien ta dernière proposition car voici mes espaces à ajouter (j'ai pris jusque I).

A= 0 B= 2 C= 4 D=6 E=9 F= 11 G=13 H=16 I=18. Leur nombre n'est pas proportionel à la position de la lettre.

Il faudrait une sorte de tableau peut-être avec array mais la j'en suis pas sur.

Ou en reprenant le code de Si..., en remplaçant n par ce chiffre, mais je ne maîtrise pas 😕.

Si quelqu'un a une idée 🙂.
 
Re : VBA: Ajout d'espaces en fonction des lettres

Re

désolé mais j'ai mal interprété la demande initiale.
Avec un tableau, ma macro serait :
Code:
Sub test3()
  Dim CL As Range, Esp
  For Each CL In Range("A1:A9")
    If Not IsEmpty(CL) Then
      n = Asc(UCase(CL)) - 65
      [B]Esp = Array(0, 2, 4, 6, 9, 11, 13, 16, 18)[/B]
      If n >= 0 And n < 9 Then
        CL.Offset(, 1) = Application.Rept(" ",[B] Esp(n)[/B]) & CL
      End If
    End If
  Next
End Sub
mais je ne sais pas si cela correspondra au problème soulevé.
 
Re : VBA: Ajout d'espaces en fonction des lettres

Re

Si: Mais tu n'as pas à être désolé, Merci Si...

C'est tout à fait cela à quoi je pensais. Merci beaucoup 🙂.


Pour avoir un code aussi condensé, il m'en aurait fallu du temps 😕.
 
Re : VBA: Ajout d'espaces en fonction des lettres

Re 🙂
JNP: je ne comprend pas bien ta dernière proposition car voici mes espaces à ajouter (j'ai pris jusque I).
A= 0 B= 2 C= 4 D=6 E=9 F= 11 G=13 H=16 I=18. Leur nombre n'est pas proportionel à la position de la lettre.
Ben
Code:
MaChaîne = "00[COLOR=blue]02[/COLOR]04[COLOR=red]06[/COLOR]09[COLOR=blue]11[/COLOR]13[COLOR=red]16[/COLOR]18..."
pour ABCDEFGHI...
Et
Code:
[COLOR=black][FONT=Verdana]Sub Test4()[/FONT][/COLOR]
[COLOR=black][FONT=Verdana]Dim MaChaine As String, Cell As Range[/FONT][/COLOR]
[COLOR=black][FONT=Verdana]MaChaîne = "000204060911131618..."[/FONT][/COLOR]
[COLOR=black][FONT=Verdana]For Each Cell In Range("zone2")[/FONT][/COLOR]
[COLOR=black][FONT=Verdana]Cell = [COLOR=purple]String([/COLOR][COLOR=green]CInt([/COLOR][COLOR=red]Mid(MaChaîne, ([/COLOR][COLOR=blue]Asc(Cell.Text) - 65) * 2 + 1[/COLOR][COLOR=red], 2)[/COLOR][COLOR=green])[/COLOR][COLOR=purple], " ")[/COLOR] & Cell.Text[/FONT][/COLOR]
[COLOR=black][FONT=Verdana]Next[/FONT][/COLOR]
[COLOR=black][FONT=Verdana]End Sub [/FONT][/COLOR]
Donne le caractère de la chaine à prendre
Prends les 2 chiffres de blanc que tu souhaites insérer
Le transforme en entier
Fait la même chose que Rept, mais en natif VBA
Et un test pour vérifier que l'ASCII est bien entre 65 et 90 comme le propose intelligemment Si... pourrait être rajouté 😉.
Bonne fin de journée 😎
 
Dernière édition:
Re : VBA: Ajout d'espaces en fonction des lettres

Re,

peut être hors sujet, mais à noter que nous avons également dans vba la fonction "Space" qui permet de renvoyer des espaces... :

Code:
Dim s As String
s = "123"
s = Space(2) & s

bonne soirée
@+
 
Re : VBA: Ajout d'espaces en fonction des lettres

Re

Jean-Noël: Merci pour ton test4, je comprend mieux le principe grâce à ta pédagogie et cela fonctionne 😱, mais j'aurais pas trouvé tout seul .

Pierrot: Merci pour le space, il faudra que j'arrive à l'inclure dans un de vos codes. Mais la, c'est pas gagné 😉.

J'essaierai demain de faire un fichier avec touters les soluces.

Merci à tous et bonne soirée 🙂.
 
Re : VBA: Ajout d'espaces en fonction des lettres

Re 🙂,
peut être hors sujet, mais à noter que nous avons également dans vba la fonction "Space" qui permet de renvoyer des espaces... :
Pourquoi hors sujet 🙄.
J'ai encore appris quelque chose aujourd'hui
Code:
String(3, " ")
est donc équivalent à
Code:
Space(3)
Pas de gros gain en nombre de caractère, mais peut-être en temps et en lisibilité 😉...
Bonne soirée 😎
 
- 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
10
Affichages
908
Réponses
8
Affichages
726
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…