Plage de données pour fonction Right

Fermé
Chachoumie - Modifié le 29 mai 2017 à 13:19
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 - 29 mai 2017 à 15:26
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

ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
29 mai 2017 à 14:17
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
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
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 779
29 mai 2017 à 14:28
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
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
29 mai 2017 à 14:55
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 779
29 mai 2017 à 15:26
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