Cellule dynamique + chaine de caractère

Bonjour,

Je suis nouveau sur ce forum!

Pb: J'ai une cellule (fond rouge) qui quand je scanne un produit, la valeur renvoyer est "PI1011057". Dans mon cas, je veux uniquement "PI10""""110"""57" le 110 du coup j'ai cherche sur internet, et j'ai fait ça:

Private Sub DEL_ID_PREPA_CHAR()

  Dim St As Variant

    St = Cells(1, 4)
    St = Right(St, Len(St) - 4)
    St = Left(St, Len(St) - 2)
    MsgBox (St)

End Sub

Le problème étant qu'il me renvoi la bonne valeur dans mon message box, mais qu'il ne remplace pas la valeur dans la cellule. Et j'aimerai savoir si il était possible d'avoir une cellule "dynamique". Par exemple à chaque fois que je fais un scan, j'aimerai que la concaténation se face au moment où je scan.

Ensuite, quand je scan un autre code bar dans la case avec un fond jaune (fichier ci-joint), j'ai cette valeur "P408618-030" et j'aimerai avoir juste "408618-030" donc je prend le code que j'ai avant et j'enlève juste la première lettre. Mais le soucis et que j'aimerai bien qu'il y ait une boucle dans le fond jaune pour enlever la première lettre de chaque cellule à partir de M2 jusqu'à M200 par exemple et que cela se fasse de façon dynamique. C'est à dire quand je scan, il enlève la première lettre de la case instantanément. Sachant que j'ai déjà programmé le scan afin qu'il saute de ligne à chaque scan.

J'espère qu'il est possible de faire quelque chose dans mon cas. Merci

Bonjour Pimy et bienvenu, bonjour le forum,

Ça serait bien d'avoir un fichier exemple...

Bonjour,

Sans fichier exemple difficile d'avoir beaucoup de solution.

Mais une question :

Ton code renvoi par msgbox le code recherché à partir de la cellule (1, 4) ?

Dans ce cas pourquoi ne pas renvoyer le code trouvé dans la cellule au lieu de l'afficher dans la message box ?

Private Sub DEL_ID_PREPA_CHAR()

  Dim St As Variant

    St = Cells(1, 4)
    St = Right(St, Len(St) - 4)
    St = Left(St, Len(St) - 2)
    Cells(1, 4)=St
End Sub

Re,

Cells(1, 4).Value = Mid(Cells(1, 4).Value, 5, 3)

Serait peut-être plus simple...

Re,

Cells(1, 4).Value = Mid(Cells(1, 4).Value, 5, 3)

Serait peut-être plus simple...

Lol carément

Re, ce code si fonctionne très bien

Cells(1, 4).Value = Mid(Cells(1, 4).Value, 5, 3)

Mais je dois exécuter le programme pour que la cellule se modifie. Est-ce qu'il existe une façon pour que le programme tourne "en boucle" dans la cellule ?

Sinon pour la cellule de M2:M1000 je dois enlever juste enlever le 1er caractère de la chaîne, et j'me demander si il était possible qu'a chaque fois qu'une donnée est entrée le programme s'exécute. Imaginons je scan un produit, et sur la cellule M2 il y a afficher le numéro du code barre. Imaginons "P408618-030" Après je scan un autre produit sur la cellule M3 avec ce numéro ""P408618-031"

est-il possible que la cellule s'actualise quand la donnée est saisie ?

Merci beaucoup pour votre aide

Re,

Le problème c'est que tu ne mets pas de fichier exemple.

On ne peut pas déterminer l'évènement pendant lequel il faut lancer les modifications.

On ne sait pas comment le code barre passe de

Cells(1, 4) à la colonne M

Par exemple la macro de remplacement de la lettre P

Sub RemplacerP()

Dim Plage As Range

Dim Cellule As Range

Set Plage = Range("M2:M100")

For Each Cellule In Plage

Cellule.Value = Replace(Cellule.Value, "P", "")

Next Cellule

End Sub

Voilà le fichier: https mega . nz/#!1xoDmYZb!Njl9zUCifj3HCT9thdmMuBZfLZyubOV1NyAwGy5Q8Z4

Il était trop volumineux pour (3,3mo) il passait pas sur le site. peut-être que cela vous aiguillera un peu.

Merci beaucoup

Re,

J'ouvre ton fichier et je reprends l'énoncé de ton problème :

Pb: J'ai une cellule (fond rouge) qui quand je scanne un produit, la valeur renvoyer est "PI1011057".

Il faut imaginer que tu parles de l'onglet MAIN et que la cellule au soit disant fond rouge a, en réalité, le fond blanc et, comble de mon énervement, est fusionnée.

Tu voudrais que ça change automatiquement. Ton code modifié :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim strAddress As String
Dim val
Dim dtmTime As Date
Dim Rw As Long
Dim DL As Integer
Dim I As Integer

If Not Intersect(Range("D1:E1"), Target) Is Nothing Then
    Application.EnableEvents = False
    Range("D1:E1").Value = Mid(Target.Value, 5, 3)
    Application.EnableEvents = True
    DL = Cells(Application.Rows.Count, "M").End(xlUp).Row
    For I = 2 To DL
        Cells(I, "M").Value = Replace(Cells(I, "M").Value, "P", "")
    Next I
    Range("M2").Activate
End If
If Not Intersect(Target, Range("M2:M1000")) Is Nothing Then
    Rw = Sheets("LOG").Range("A" & Rows.Count).End(xlUp).Row + 1
    With Sheets("LOG")
        .Cells(Rw, 1) = Now()
        .Cells(Rw, 2) = Target.Value
        .Cells(Rw, 3) = Target.Address
    End With
End If
If Not Intersect(Target, Range("D1")) Is Nothing Then
    Rw = Sheets("LOG").Range("A" & Rows.Count).End(xlUp).Row + 1
    With Sheets("LOG")
        .Cells(Rw, 1) = Now()
        .Cells(Rw, 2) = Target.Value
        .Cells(Rw, 3) = Target.Address
        .Cells(Rw, 4) = "ID PREP"
    End With
End If
End Sub
Rechercher des sujets similaires à "dynamique chaine caractere"