Comptage des espaces en début de cellule en VBA

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 !

jeff1494

XLDnaute Occasionnel
Bonsoir à toutes et tous;

Je reviens encore vers vous car je me heurte à un problème qui est de convertir une formule de cellule en instructions VBA.
Dans les cellules de la colonne A j'ai des chaines de texte ayant des espaces en début de cellule.
Je voudrais par VBA parcourir la colonne A et remplir sur la même ligne la cellule B par le résultat du calcul du nombre d'espace en début de la cellule A
Par exemple en A1 j'ai 5 espaces avant le premier caractère, je voudrais donc que B1 soit égale à 5.

Dans le feuille "Feuil1" cellule B1 j'ai la formule suivante :

=NBCAR(A3)-NBCAR(SUPPRESPACE(A3))

Le parcours de la colonne A ne me pose pas de problèmes, mais je n'arrive pas à récupérer le nombre d'espace en colonne B.
La macro me permet de supprimer des lignes ayant certaines caractéristiques, cela fonctionne, et je voulais en profiter pour alimenter ma colonne B.
Le résultat de ma macro est la mise systématique d'une valeur 0 dans la cellule B de chaque ligne.
Donc comment traduire cette formule en procédure VBA?

Voici ma macro :
VB:
'
'   **********************************************************************
'       1er nettoyage de la colonne A
'           Lecture depuis la 1ère ligne à la dernière
'           Test si = à "{" ou "}" ou "}," alors suppression de la ligne
'       En même temps comptage des espaces en début de cellule, et MàJ de la cellule B
'           de la ligne. Par exemple si 4 espaces en début de A1 alors B1 = 4
'   **********************************************************************
'
Sub Supaccol()
Dim LastLig As Long, i As Long
  '     Désactivation de la mise à jour visuelle des feuilles
    Application.ScreenUpdating = False
  '     Désactiver calcul automatique
    Application.Calculation = xlCalculationManual
     With Worksheets("Feuil1")
        LastLig = .Cells(.Rows.Count, "A").End(xlUp).Row   'Recherche dernière ligne de la colonne
'
'   Boucle de traitement depuis dernière ligne jusqu'à la 1ère.
'
        For i = LastLig To 1 Step -1
            If Range("A" & i).Value Like "*{*" Then .Rows(i).Delete
            If .Range("A" & i).Value Like "*}*" Then .Rows(i).Delete
            If .Range("A" & i).Value Like "*},*" Then .Rows(i).Delete
'
'       Si  aucune des conditions  alors écriture Nb espaces en début cellule A dans colonne B
'         La macro tourne mais le résultat est que .Range("B" & i). Value est toujours à 0
'
            .Range("B" & i).Value = Len("A" & i) - Len(Trim("A" & i))
        Next i
    End With
   
'Réactiver calcul automatique + actualisation de l'écran
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True

End Sub

A toutes fins utiles je vous joins un fichier exemple.

Je vous remercie d'avance pour votre attention et vos réponses.
 

Pièces jointes

Dernière édition:
Bonsoir Staple1600;
Un grand merci pour ton aide.
Par contre je voudrais savoir à quoi sert le (3) dans la ligne suivante :

For i = 1 To Cells(Rows.Count, 1).End(3).Row

Je suppute que c'est un code "abrégé" du genre i& signifierait i As Integer, si je ne me trompe pas.

Je te remercie d'avance, et te souhaite une bonne journé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

  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
250
Retour