Plage de données pour fonction Right

Chachoumie -  
Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Je viens vers vous car j'essaye tant bien que mal de créer une macro sur Excel qui me permettrait d'enlever les 150 premiers caractères de ma plage de cellules.

Mon code rencontre actuellement un problème lors de l'appel de la fonction Right.

Code :
Range("C4:C30000").Select
For Each C In Selection
    C.Value = Right(C.Value, Len(C.Value) - 151)
Next


Quelqu'un sait-il d'où vient mon problème ?

Merci d'avance

6 réponses

  1. ThauTheme Messages postés 1564 Statut Membre 160
     
    Bonjour Chachoumie, bonjour le forum,

    Peut-Être comme ça :
    Sub Macro1()
    Dim PL As Range
    Dim C As Range
    
    Set PL = Range("C4:C30000")
    For Each C In PL
        C.Value = Mid(C.Value, 151)
    Next
    End Sub


    Évite autant que tu le peux les Select inutiles qui ne font que ralentir l'exécution du code...
    0
  2. Chachoumie
     
    Bonjour ThauTheme et merci pour ta réponse !

    Je viens d'essayer ton code et je me suis également aperçue que certaines cellules avaient plus de caractères que d'autres.

    Existe-t-il une fonction qui permet de récupérer un bout de texte et de supprimer le reste ?

    J'avais essayé avec la fonction Replace mais mon texte n'est jamais le même je ne peux donc pas l'utiliser :/

    Merci d'avance pour ta réponse
    0
  3. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 783
     
    Bonjour,

    Pour 29997 valeurs il est préférable de passer par un tableau :
    Option Explicit
    Sub Test()
    Dim t As Variant
    Dim i As Long
      t = Range("C4:C30000").Formula
      For i = LBound(t) To UBound(t)
        t(i, 1) = Mid(t(i, 1), 151)
      Next
      Range("C4:C30000").Formula = t
    End Sub


    0
  4. ThauTheme Messages postés 1564 Statut Membre 160
     
    Re,

    Certes Patrice ! Je ne m'étais même pas rendu compte de l'étendue de la plage....
    Sinon, Chachoumie, à part la fonction BouleDeCristal qui n'a toujours pas été mise en place dans VBA, je ne vois pas comment on va pouvoir répondre à ton nouveau problème. Si au moins tu fournissais des exemple pour qu'on puisse se faire une idée...
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Chachoumie
     
    Merci beaucoup pour vos réponses,

    Pour vous donner un exemple, je récupère les données d'un fichier texte et je les insère dans excel. Dans ma colonne C je vais avoir plusieurs cellules contenant du texte (ex : INFO: User p059311 on FRMH100149(C8-D3-FF-2B-FB-48) updated license-reservation for aquintos PREEvision-7.5.0-FDTDMCP3TAdmin-6-28062016-31129999-1540 (4 of 8))

    Ce que j'aimerais réalisé est que lorsque j'ai 4 of 8 d'écrit dans ma cellule alors je remplace tout le texte de ma cellule par 4/8. Et je fais cela pour toutes les cellules de ma colonne.

    Le problème est que la fonction replace est longue et je dois faire ça pour chaque données (de 0/8 à 8/8). Je pense qu'il doit exister une fonction vba plus simple qui permettrait de faire cela. J'ai cherché sur plusieurs forums et pour l'instant je n'ai pas trouvé de solutions.

    J'espère avoir été claire dans mon message
    0
  7. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 783
     
    Re,
    Essaies :
    Option Explicit
    Sub Test()
    Dim t As Variant
    Dim i As Long
    Dim j As Byte
    Dim s As String
      t = Range("C4:C30000").Formula
      Range("C4:C30000").NumberFormat = "@"
      For i = LBound(t) To UBound(t)
        For j = 0 To 8
          s = j & " of 8"
          If InStr(1, t(i, 1), s) > 0 Then
            t(i, 1) = j & "/8"
          End If
        Next j
      Next i
      Range("C4:C30000").Formula = t
    End Sub
    0