Extraction de caractères dans VBA

Résolu/Fermé
unjourjeseraiuneprodeVBA Messages postés 3 Date d'inscription mercredi 21 décembre 2016 Statut Membre Dernière intervention 21 décembre 2016 - Modifié par unjourjeseraiuneprodeVBA le 21/12/2016 à 17:41
unjourjeseraiuneprodeVBA Messages postés 3 Date d'inscription mercredi 21 décembre 2016 Statut Membre Dernière intervention 21 décembre 2016 - 21 déc. 2016 à 19:22
Bonjour à tous,

Je m'excuse par avance si je n'utilise pas le bon langage VBA car je suis toute novice et justement en train de monter ma première macro.

J'ai fouillé dans les différentes discussions et bouquins, mais malgré cela je bloque depuis plusieurs jours sur un point donc je fais appel à votre aide !!


Je vous explique :

Je souhaite couper les 7 premiers caractères de la colonne E s'ils sont des chiffres et
s'ils remplissent cette condition, les coller dans la colonne D correspondant à la cellule.

Par exemple, sur la photo que j'ai jointe,
en E2, j'ai "1013000 CAPITAL APPELE VERSE" doit devenir "CAPITAL APPELE VERSE"
et D2 sera alors 1013000.

Je ne veux donc pas modifier les autres lignes qui ne contiennent pas ces 7 chiffres.
Et je veux faire la macro jusqu'à la dernière ligne remplie.

J'ai d'ailleurs donné un nom de variable à celle-ci:
DLigne = GL_clients.Range("A1000000").End(xlUp).Row


J'ai essayé avec des If Isnumber, des ActiveCell = Right(ActiveCell, Len(ActiveCell) - 7) qui me coupent alors les chiffres mais je n'arrive pas à les récupérer... et j'en passe !

Bref, j'ai besoin de vous !!

Merci par avance à ceux qui prendront le temps de me répondre :)







A voir également:

2 réponses

Bonjour UnjourJSPV,

J'avais fait cet exercice pour la colonne D, avec une formule et sans macro ;
mais j'ai oublié les modifications de la colonne E ! Or effectivement, pour
cela, il vaut mieux faire une macro :


Option Explicit

Sub Essai()
  Application.ScreenUpdating = False
  Dim chn As String, lig As Long, p As Byte: lig = 2
  Do While Not IsEmpty(Range("A" & lig))
    If (lig + 1) Mod 3 = 0 Then
      chn = Range("E" & lig): p = InStr(chn, " ")
      Range("D" & lig) = Left$(chn, p - 1)
      Range("E" & lig) = Right$(chn, Len(chn) - p)
    End If
    lig = lig + 1
  Loop
End Sub


Ma macro est différente de celle de gbinforme (que je salue).
Je met la mienne en complément (pour info).

Cordialement.  :)
 
0
unjourjeseraiuneprodeVBA Messages postés 3 Date d'inscription mercredi 21 décembre 2016 Statut Membre Dernière intervention 21 décembre 2016
21 déc. 2016 à 19:20
bonjour albkan,

je te remercie pour ta réponse mais en fait je suis obligée de passer par une macro.
gbinforme vient de me répondre également et cela fonctionne avec la macro qu'il propose ! :)
super ce forum !! (je vais marquer résolu)
Bonne soirée
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 709
21 déc. 2016 à 18:58
Bonjour,

Tu peux essayer ceci :
Dim DLigne As Long
Dim lig As Long
    DLigne = GL_clients.Range("A" & Rows.Count).End(xlUp).Row
    For lig = 2 To DLigne
        If IsNumeric(Left(Cells(lig, "E"), 7)) Then
            Cells(lig, "D").Value = Left(Cells(lig, "E"), 7)
            Cells(lig, "E").Value = Mid(Cells(lig, "E"), 9)
        End If
    Next lig

Je t'ai un peu corrigé ta définition car ainsi elle passe avec toutes les versions.
0
unjourjeseraiuneprodeVBA Messages postés 3 Date d'inscription mercredi 21 décembre 2016 Statut Membre Dernière intervention 21 décembre 2016
21 déc. 2016 à 19:22
Bonjour gbinforme,

merci beaucoup ! Ta macro fonctionne à merveilles!
Cela faisait des jours que je tournais en rond !
encore merci à toi pour ton aide !
0