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 :
A toutes fins utiles je vous joins un fichier exemple.
Je vous remercie d'avance pour votre attention et vos réponses.
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: