XL 2016 Problème avec une ligne de commande VBA

scoubidou35

XLDnaute Occasionnel
Bonjour à tous,

J'ai une colonne avec des codes par exemple : 2021IDF30A2_6_5_2021-04-27 13-35-04
et je ne voudrais garder que 2021IDF30A2_6_5
Je cherche donc à retirer les 20 derniers caractères
Je pensais qu'avec la ligne de commande suivante, j'arriverai à nettoyer le code

Tfinal(1, j) = Left(Tsource(i, 13), Len(Tsource(i, 13) - 20))

mais ça bug et quand je passe le curseur sur Len(Tsource(i, 13) - 20) j'ai type incompatible qui s'affiche.

Quelqu'un voit il où est mon problème?
Merci beaucoup
 
Solution
Bonjour,

Alors chez moi, ces deux lignes fonctionnent correctement sur les communiquées :
VB:
Tfinal(1, j) = Left(Tsource(i, 13), InStrRev(Tsource(i, 13), "_") - 1)
Tfinal(1, j) = Left(Trim(Tsource(i, 13)), Len(Trim(Tsource(i, 13))) - 21)

La deuxième comporte un Trim car la dernière ligne (46) des données comporte une espace finale qui faussait le résultat sur cette ligne, sinon, elle fonctionne.

P.S. avec excel 2016, vous pouvez également traiter ça avec power query (Exemple sur la feuille 'PQ' du classeur joint)

P.S. la prochaine fois, joignez tout de suite un fichier exemple, ça ira plus vite :)
Là vous pouviez faire un fichier avec juste quelques items dans une feuille et juste une petite macro qui bouclait sur ces items avec...

scoubidou35

XLDnaute Occasionnel
j'ai essayé avec la commande suivante

Tfinal(1, j) = Left(Tsource(i, 13), InStrRev(Tsource(i, 13), "_")

J'obtiens presque le résultat voulu sauf que j'ai encore le "_" a la fin de chaque nom

j'ai donc essayé avec
Tfinal(1, j) = Left(Tsource(i, 13), (InStrRev(Tsource(i, 13), "_")-1))

Mais la ca bug
 

scoubidou35

XLDnaute Occasionnel
Je mets pour faciliter la compréhension deux fichiers.
Le premier "Fichier avec données à importer" est le fichier avec les noms à importer.
Et "MONFICHIERS-V2" est le fichier de travail.
Si vous cliquez sur le bouton et sélectionnez le fichier "Fichier avec données à importer" alors il importer les données. Comme vous pouvez le voir les noms dans le colonne A se termine par un "_" que j'aimerai supprimer mais je n'y arrive pas.

Je suis reste dispo. Merci
 

Pièces jointes

  • Fichier avec données à importer.xlsx
    18.4 KB · Affichages: 9
  • MONFICHIERS - V2.xlsm
    37.7 KB · Affichages: 7

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Alors chez moi, ces deux lignes fonctionnent correctement sur les communiquées :
VB:
Tfinal(1, j) = Left(Tsource(i, 13), InStrRev(Tsource(i, 13), "_") - 1)
Tfinal(1, j) = Left(Trim(Tsource(i, 13)), Len(Trim(Tsource(i, 13))) - 21)

La deuxième comporte un Trim car la dernière ligne (46) des données comporte une espace finale qui faussait le résultat sur cette ligne, sinon, elle fonctionne.

P.S. avec excel 2016, vous pouvez également traiter ça avec power query (Exemple sur la feuille 'PQ' du classeur joint)

P.S. la prochaine fois, joignez tout de suite un fichier exemple, ça ira plus vite :)
Là vous pouviez faire un fichier avec juste quelques items dans une feuille et juste une petite macro qui bouclait sur ces items avec la ligne incriminée.

Cordialement
 

Pièces jointes

  • MONFICHIERS - V2.xlsm
    61 KB · Affichages: 6

scoubidou35

XLDnaute Occasionnel
Bonjour à tous,
En effet je viens de faire le test avec le fichier de donnée à importer sur mon fichier et cela fonctionne mais quand je cherche à importer depuis mon vrai fichier de donnée à importer ca bug. Je dois avoir un problème avec ce fichier
est ce que c'est lié au fait qu'il y a des cellules vide et/ou données récupéré avec la fonction recherche. Je regarde cela.
 

scoubidou35

XLDnaute Occasionnel
la réponse est dans la question
d’après toi que donne le instrev si il n'y a pas de "_" ;)
OK et comment je peux y remédier car j'ai passé mon après midi à modifier le fichier en passant par power querry mais je ne suis pas entièrement satisfait ca va me dépanner en attendant de trouver la solution en vba.
Par quoi remplacer ma commande pour ne pas utiliser instrev ?
 

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

J'aurais apprécié un commentaire sur le dernier travail effectué en post#5 mais comme je ne suis pas chien :

VB:
Dim Pos As Integer ' en tête de procédure
'
'  .......
'
Pos = InStrRev(Tsource(i, 13), "_")
Tfinal(1, j) = IIf(Pos > 0, Left(Tsource(i, 13), Pos - 1), Tsource(i, 13))

En tout cas ce sera ma dernière intervention ici.
 

scoubidou35

XLDnaute Occasionnel
Bonjour,

J'aurais apprécié un commentaire sur le dernier travail effectué en post#5 mais comme je ne suis pas chien :

VB:
Dim Pos As Integer ' en tête de procédure
'
'  .......
'
Pos = InStrRev(Tsource(i, 13), "_")
Tfinal(1, j) = IIf(Pos > 0, Left(Tsource(i, 13), Pos - 1), Tsource(i, 13))

En tout cas ce sera ma dernière intervention ici.
Bonjour Roblochon,
Désolé, de ne pas avoir mis un commentaire à votre précédent post.
J'ai testé en suivant votre modèle le power querry et j'ai passé mon après midi à le faire, je ne maitrise pas encore l'outil :confused:. Mais j'apprends.
Cela fonctionne très bien mais dans le fichier de travail, mais je perds une partie des options qui figure avec la version vba. Mais je valide la solution à mon problème.

Après, un peu de repos, et les différentes remarsques de chacun, j'ai repris ce matin mon fichier de travail et je pense avoir trouvé la solution à mon problème avec la commande vba :
VB:
Tfinal(1, j) = Replace(Tsource(i, 13), Right(Tsource(i, 13), 20), "")

Je vous remercie donc tous encore une fois pour votre aide si précieuse.
Bonne journée à tous.
 

Discussions similaires

Statistiques des forums

Discussions
312 339
Messages
2 087 407
Membres
103 538
dernier inscrit
Mbolatiana Hyacinthe