Plage de données pour fonction Right

Chachoumie -  
Patrice33740 Messages postés 8561 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

ThauTheme Messages postés 1442 Date d'inscription   Statut Membre Dernière intervention   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
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
Patrice33740 Messages postés 8561 Date d'inscription   Statut Membre Dernière intervention   1 780
 
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   Statut Membre Dernière intervention   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

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

Posez votre question
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
Patrice33740 Messages postés 8561 Date d'inscription   Statut Membre Dernière intervention   1 780
 
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