Traduire une formule en VBA

  • Initiateur de la discussion Initiateur de la discussion chris6999
  • 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 !

chris6999

XLDnaute Impliqué
Bonjour

J'ai dans un fichier une formule qui me permet de récupérer depuis la colonne F, tous les caractères à gauche du caractère " - " pour la valeur présente dans la colonne B si celle-ci est non vide.

La formule saisie dans ma colonne F est la suivante :
=SI(B3="";"";GAUCHE(B3;TROUVE("-";B3)-1))

Mon tableau ayant un nombre de lignes très important je souhaiterais le faire par macro à partir de la ligne 3

Quelqu'un peut-il me dire comment le formuler en VBA?

Merci d'avance
Cordialement
 
Re : Traduire une formule en VBA

Essaye la macro suivante :

Code:
Sub Macro1()
    Dim derLigne As Long, i As Long
    
    derLigne = Range("B" & Rows.Count).End(xlUp).Row
    For i = 3 To derLigne
        If InStr(Cells(i, 2), "-") > 0 Then
            Cells(i, 6) = Left(Cells(i, 2), InStr(Cells(i, 2), "-") - 1)
        End If
    Next i
End Sub
 
Re : Traduire une formule en VBA

Bonjour chris,

Avec ceci :

VB:
Option Explicit
Sub Avant()
Dim c&
Columns(6).ClearContents
For c = 3 To Cells(Rows.Count, 2).End(xlUp).Row
Cells(c, 6) = Left(Cells(c, 2), Len(Cells(c, 2)) - (Len(Cells(c, 2)) - InStrRev(Cells(c, 2), "-") + 1))
Next
End Sub

A+

Martial

Edit : Bonjour Dormeur, je ne sais pas pourquoi je suis passer par InStrRev, en effet c'est nettement plus simple avec ta macro.

Edit2 : Salut Papou-net
 
Dernière édition:
Re : Traduire une formule en VBA

Bonjour Chris6999,

La macro suivante, insérée dans un module de code standard, boucle sur toutes les cellules de la colonne B3:B65536 qui contiennent une valeur. Il est donc inutile de tester si la cellule est vide et ça fonctionne même si les cellules ne sont pas sur des lignes continues. Attention toutefois, ça ne prend pas en compte les cellules qui contiennent des formules. L'écriture en colonne F se fait par rapport au décalage de la cellule en B analysée.

Code:
Sub MacroExemple()
Dim Cel As Range
With Feuil1
  For Each Cel In .Range("B3:B" & Rows.Count).SpecialCells(xlCellTypeConstants)
    .Cells.Offset(0, 4).Value = Left(Cel.Value, InStr(Cel.Value, "-") - 1)
  Next
End With
End Sub
Bon WE.

Cordialement.

Edit : oups, tous dans un mouchoir de poche. Salut à vous Dormeur et Martial.
 
Re : Traduire une formule en VBA

Bonjour PAPOUNET

Le code bloque: erreur 1004 signalement erreur définie par l'application ou par l'objet
sur la ligne .Cells.Offset(0, 4).Value = Left(Cel.Value, InStr(Cel.Value, "-") - 1)

Merci pour tout
Je pense conserver la proposition de dormeur

Bonjour Chris6999,

La macro suivante, insérée dans un module de code standard, boucle sur toutes les cellules de la colonne B3:B65536 qui contiennent une valeur. Il est donc inutile de tester si la cellule est vide et ça fonctionne même si les cellules ne sont pas sur des lignes continues. Attention toutefois, ça ne prend pas en compte les cellules qui contiennent des formules. L'écriture en colonne F se fait par rapport au décalage de la cellule en B analysée.

Code:
Sub MacroExemple()
Dim Cel As Range
With Feuil1
  For Each Cel In .Range("B3:B" & Rows.Count).SpecialCells(xlCellTypeConstants)
    .Cells.Offset(0, 4).Value = Left(Cel.Value, InStr(Cel.Value, "-") - 1)
  Next
End With
End Sub
Bon WE.

Cordialement.

Edit : oups, tous dans un mouchoir de poche. Salut à vous Dormeur et Martial.
 
Re : Traduire une formule en VBA

RE :

Désolé, j'ai fait une erreur de frappe.

Voici ce qu'il fallait lire:

Code:
Sub MacroExemple()
Dim Cel As Range
With Feuil1
  For Each Cel In .Range("B3:B" & Rows.Count).SpecialCells(xlCellTypeConstants)
    Cel.Offset(0, 4).Value = Left(Cel.Value, InStr(Cel.Value, "-") - 1)
  Next
End With
End Sub
Cordialement.
 
Re : Traduire une formule en VBA

Ok cela fonctionne très bien.
Du coup je ne sais pas laquelle choisir.
A ton avis laquelle serait la plus rapide car j'ai beaucoup de ligne à traiter

Merci


RE :

Désolé, j'ai fait une erreur de frappe.

Voici ce qu'il fallait lire:

Code:
Sub MacroExemple()
Dim Cel As Range
With Feuil1
  For Each Cel In .Range("B3:B" & Rows.Count).SpecialCells(xlCellTypeConstants)
    Cel.Offset(0, 4).Value = Left(Cel.Value, InStr(Cel.Value, "-") - 1)
  Next
End With
End Sub
Cordialement.
 
Re : Traduire une formule en VBA

Re
Je profite de ta science jusqu'au bout.
i je veux uniquement récupérer le premier caractère à gauche est-ce que cela ferait ?

Sub MacroExemple()
Dim Cel As Range
With Feuil1
For Each Cel In .Range("B3:B" & Rows.Count).SpecialCells(xlCellTypeConstants)
Cel.Offset(0, 4).Value = Left(Cel.Value, 1)
Next
End With
End Sub



RE :

Désolé, j'ai fait une erreur de frappe.

Voici ce qu'il fallait lire:

Code:
Sub MacroExemple()
Dim Cel As Range
With Feuil1
 For Each Cel In .Range("B3:B" & Rows.Count).SpecialCells(xlCellTypeConstants)
    Cel.Offset(0, 4).Value = Left(Cel.Value, InStr(Cel.Value, "-") - 1)
  Next
End With
End Sub
Cordialement.
 
Re : Traduire une formule en VBA

Ok cela fonctionne très bien.
Du coup je ne sais pas laquelle choisir.
A ton avis laquelle serait la plus rapide car j'ai beaucoup de ligne à traiter

Merci

RE:

Je ne suis pas certain de ce que je vais dire, mais il me semble qu'une boucle For Each, qui travaille sur une collection, doit être un peu plus rapide qu'une boucle indicée. En tout cas, c'est vrai surtout s'il y a des lignes vides dans le tableau. Sans compter qu'on s'affranchit d'une ligne conditionnelle, ce qui va sûrement dans le bon sens.

Oui, ton code pour extraire le premier caractère me semble correct, mais rien de plus facile pour toi que de le tester.

Cordialement.
 
- 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
9
Affichages
387
Réponses
1
Affichages
132
Réponses
2
Affichages
153
Réponses
10
Affichages
220
Réponses
5
Affichages
130
Retour