Comptage des espaces en début de cellule en VBA

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

  • Sup_espace_début_cellule.xlsm
    24.8 KB · Affichages: 21
Dernière édition:

jeff1494

XLDnaute Occasionnel
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.
 

Discussions similaires

Réponses
2
Affichages
329

Statistiques des forums

Discussions
315 094
Messages
2 116 143
Membres
112 669
dernier inscrit
Guigui2502