Réduire une chaine de caracteres et la remplacer?

Bonsoir à tous. De nouveaux sur mon projet de tableau de suivi d'activité je cherche à réduire une chaine de caractere variable a ses 4 derniers et ce dans la meme case ou elle a été entrée à l'origine (pas dans une autre a coté).

Je sais que pour cela il me faut utiliser la fonction =droite mais je ne reussi pas a le faire fonctionner:

Sub SupprCaractD()

    For Each Cel In Range("C5:C100")
        ActiveCell.Value = Right(ActiveCell, Len(ActiveCell) - 6)

End Sub

Avez vous une idée de ce qui cloche?

De même dans un seconde temps je cherche a remplacer des chaines de caracteres, donc définie à l'avance par une autre. En gros un va scanner un code barre avec une référence, je voudrais qu'il s'affiche le nom commun du produit à la place.

La aussi je sais qu'il faut utiliser la fonction =substitue j'ai reussi à le faire sur une cellule pour les deux cas et en dépliant cela se met sur toute ma colonne de tableau, mais problemes si je supprime la premiere ligne, tout s'efface, donc je pense qu'il faut une déclaration en VBA mais je ne reussis pas a trouver l'architecture.

Pouvez vous m'aider? Merci d'avance,

Mikawel

Salut,

Déjà je vois que tu utilises activecell alors que tu es dans une boucle. En effet cela sous entend que c'est la cellule active sur lequel tu vas appliquer ta formule.

Cela ne peut pas fonctionner dans ton code que tu donnes en exemple.

Regarde ce tuto sur les selections pour voir l'utilisation de activecell

https://www.excel-pratique.com/fr/vba/selections.php

Ton code corrigé.

Sub SupprCaractD()

    For Each Cel In Range("C5:C100")
        Cel.Value = Right(Cel, Len(Cel) - 6)
     Next
End Sub

En PJ ce que ça donne sur une petite plage A1:A7.

Voilou et bonne soirée

10mikakawel.xlsm (14.09 Ko)

Super merci beaucoup jessais ça dès demain à mon retour au boulot. Oui effectivement je comprend le paradoxe avec activecel.

Du coup penses tu que je puisses l'appliquer avec substitute ?

Oui tu remplaces ta formule right par substitute.

Mais attention je crois que ça fonctionne mieux avec replace en vba.

Regarde ce sujet.

https://forum.excel-pratique.com/excel/vba-probleme-avec-la-fonction-substitute-t86835.html

Bonjour à toi, je reviens sur le sujet car cela ne fonctionne pas, il me demande de définir une variable. Apparement "Cel" ne lui convient pas. Je suis sous excel 2007 ça joue peut être.

Hello,

Tu peux joindre le ficher avec les valeurs en exemple et ce que tu veux faire avec. Pas obligé de donner le fichier complet.

Juste ce que tu veux modifier.

La version d'excel n'a rien à voir sur ce que je vois de ton code.

Difficile dans la mesure ou c'est de la production aeronautique. Je vais essayer de te faire une copie neutre sans les noms et références.

EDIT : voici le projet en question !

7projetneutre.xlsm (47.34 Ko)

Bonjour,

Dans un premier temps, tu peux tester la macro suivante :

Sub SupprCaractD()
Dim cel As Range
Application.ScreenUpdating = False
' Adapter à la Plage à traiter ''''''''''''''''''' 
    For Each cel In Range("C5:C100")
        cel.Value = Right(cel, Len(cel) - 6)
     Next cel
Application.ScreenUpdating = True
End Sub

En espèrant que cela t'aide

Merci de ton aide, mais cela ne fonctionne toujours pas. Je me dis que j'ai peut etre mal expliqué

Pour ceux qui regarderont le fichier envoyé il faut que lorsque je tape le s/n sur la feuille tableau celui ci se réduise aux 4 dernieres caracteres automatiquement.

Pour le subsitute il faut qu'en tappant la reference (elles sont listés dans la 2eme feuille il s'affiche en realité le P/N a la place. Le soucis vient que l'on scan des codes barres qui donnent ce s/n trop long et cette reference...

Edit : en modifiant le code par ca:

Sub SupprCaractD()
Dim cel As Range
Application.ScreenUpdating = False
' Adapter à la Plage à traiter '''''''''''''''''''
   For Each cel In Range("C5:C100")
        cel.Value = Right(cel, 4)
     Next cel
Application.ScreenUpdating = True
End Sub

En executant la simulation de la macro ca se fait correctement, mais pas automatiquement en renseignant la case...

RE EDIT : YEAH j'ai trouvé, il fallait changer la premiere ligne par: Private Sub Worksheet_Change(ByVal Target As Range) BINGO merci pour cette première partie de réponse !

Re,

Si tu veux qu'au moment même où tu saisis un long numéro de saisie ... ce numéro soit automatiquement réduit aux 4 derniers chiffres

Il faut une procédure différente ... Private Sub Worksheet_Change()

Cela dit ... je ne vois pas ce qui pourrait empêcher que la saisie elle même soit réduite par l'utilisateur ...


Re,

Ci-joint ton fichier .. revisité ...

Merci de me confirmer si cela te convient ...

La macro ajustée :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Target.Column > 3 Then Exit Sub
If Target.Column = 1 Then Exit Sub
If Target.Row < 5 Then Exit Sub
If Target = "" Then Exit Sub
Application.EnableEvents = False
Dim x As Long
  Select Case Target.Column
    Case 3
    Target = Right(Target, 4)
    Case 2
    x = Application.Match(Target, Feuil2.Range("D1:D9"), 0)
    Target = Feuil2.Cells(x, 4).Value
  End Select
Application.EnableEvents = True
End Sub
4projetneutre.xlsm (50.68 Ko)

Voici le code qui permet de faire ce que je veux pour la reduction des caracteres, en l'écrivant en fait j'ai trouvé ca logique...

Private Sub Worksheet_Change(ByVal Target As Range)
Dim cel As Range
Application.ScreenUpdating = False
' Adapter à la Plage à traiter ''''''''''''''''''' 
   For Each cel In Range("C5:C100")
        cel.Value = Right(cel, 4)
     Next cel
Application.ScreenUpdating = True
End Sub

Si ca peut aider quelqu'un...Maintenant je me creuse la tete pour le substitute. Merci beaucoup à vous deux, j'ai deja un problème de réglé sur 2 !

Edit : nos messages se sont croisés, et je ne vois pas ton fichier

Re,

Dans le message précédent ...

Tu trouveras le fichier ... ainsi que la macro qui devrait prendre en charge tes deux objectifs ..

En espèrant que cela t'aide ...

En fait ça me fait tout bugguer pour je ne sais quelles obscures raisons...ma macro action ne s’exécute pas, j'ai des messages d'erreurs une fois sur trois. Dur dur la programmation...

Edit : espace pile insuffisant, je me demande si ca ne crée pas une boucle infinie cette histoire la.

Bonjour,

Je ne sais pas quel fichier tu as testé ...

Ci-joint ... ton fichier nettoyé et corrigé ... pour tous les petits bugs ...

Dis-moi si les tests fonctionnent ... et si cela te convient ...

5projetneutre.xlsm (45.93 Ko)

Bonjour, désolé du retard, mais j'ai eu droit à un repos bien mérité. Malheureusement le nouveau code ne fonctionne vraiment pas. Je ne réussis pas à comprendre d'où cela vient.

EDIT :

En modifiant ton code cela a fonctionné finalement, il y avait des conditions de début qui me faisaient buguer le système je ne sais toujours pas pourquoi...les coupables sont ces deux lignes:

If Target.CountLarge > 1 Then Exit Sub
If Target = "" Then Exit Sub

Tres étange ! Mais cela fonctionne merci beaucoup pour ton aide TRES TRES précieuse.

Le projet tourne assez convenablement à présent il va être mise en place rapidement j'espere, sauf si il faut de nouvelle modifications pour mes supérieurs.

Rechercher des sujets similaires à "reduire chaine caracteres remplacer"