Microsoft 365 VBA - Recherche valeur dans un tableau et ajout texte

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

ted1057

XLDnaute Occasionnel
Bonjour,

Je cherche à modifier un fichier de débit que j'ai récupéré. J'ai une liste de longueur de coupe sur laquelle est associé un repère. J'aimerais pouvoir ajouter au débit cette désignation de repérage.
Exemple :
nombrelongueur du coupe (mm)REPQtéReste
5144831x1884x1448

Je cherche à obtenir : 4x1448 - Rep : 3

Cela pour toutes les lignes du tableau

Merci de vos retours

Cordialement,
 

Pièces jointes

Bonsoir ted1057,

Le repère est bien tranquille en colonne F, pourquoi vouloir l'introduire en colonnes I ou J ?

Car alors il faut des formules dans ces colonnes, ou du VBA.

A+
Bonjour,

Merci de ta réponse,

Je suis d'accord avec toi le Repère est bien au chaud dans sa colonne. Pour mon exemple, il n'y a que quelques lignes mais je peux être amené à devoir effectuer un débit de plus de 100 lignes et ainsi retrouver la bonne longueur dans le débit peut être long et fastidieux pour un rangement par repère. De plus, j'aurais besoin de cette information pour la nouvelle machine que mon entreprise vient d'acquérir.

D'ou ma demande si il y avait une possibilité d'effectuer cette étape sous VBA.

Cordialement,
 
Bonjour ted1057, le forum,

La macro affectée au bouton :
VB:
Sub MAJ()
Dim c As Range, v
Application.ScreenUpdating = False
For Each c In Range("F2", Range("F" & Rows.Count).End(xlUp)(2))
    If c <> "" Then
        If c(1, 4) <> "" Then
            v = Left(c(1, 4), InStr(c(1, 4) & " ", " ") - 1)
            c(1, 4) = v & " - Rep : " & c
        End If
        If c(1, 5) <> "" Then
            v = Left(c(1, 5), InStr(c(1, 5) & " ", " ") - 1)
            c(1, 5) = v & " - Rep : " & c
        End If
    End If
Next
Columns("I:J").AutoFit 'ajustement largeurs
End Sub
La macro peut être exécutée plusieurs fois de suite sans inconvénient.

A+
 

Pièces jointes

Bonjour ted1057, le forum,

La macro affectée au bouton :
VB:
Sub MAJ()
Dim c As Range, v
Application.ScreenUpdating = False
For Each c In Range("F2", Range("F" & Rows.Count).End(xlUp)(2))
    If c <> "" Then
        If c(1, 4) <> "" Then
            v = Left(c(1, 4), InStr(c(1, 4) & " ", " ") - 1)
            c(1, 4) = v & " - Rep : " & c
        End If
        If c(1, 5) <> "" Then
            v = Left(c(1, 5), InStr(c(1, 5) & " ", " ") - 1)
            c(1, 5) = v & " - Rep : " & c
        End If
    End If
Next
Columns("I:J").AutoFit 'ajustement largeurs
End Sub
La macro peut être exécutée plusieurs fois de suite sans inconvénient.

A+
Bonjour,

Merci pour ta réponse, j'ai un soucis dans le fonctionnement de la macro.
Les numéros de repères ne sont pas affecté à la bonne longueur.
Dans le fichier, nous avons 1448mm qui est toujours affectée au Rep3 peut importe ou se trouve cette longueur dans le débit.
Ci joint, un fichier avec le résultat à obtenir sachant que le nombre de débit peut dépasser les 2 colonnes.


Cordialement,
 

Pièces jointes

Alors cette version (2) qui utilise le Dictionary :
VB:
Sub MAJ()
Dim d As Object, c As Range, v, s
Set d = CreateObject("Scripting.Dictionary")
Application.ScreenUpdating = False
For Each c In Range("E2", Range("E" & Rows.Count).End(xlUp)(2))
    If c <> "" And c(1, 2) <> "" Then d(CStr(c)) = c(1, 2)
Next c
For Each c In Range("I2", Range("I" & Rows.Count).End(xlUp)(2))
    If c <> "" Then
        v = Left(c, InStr(c & " ", " ") - 1)
        s = Split(v, "x")
        If UBound(s) > 0 Then c = v & " - Rep : " & d(s(1))
    End If
Next c
For Each c In Range("J2", Range("J" & Rows.Count).End(xlUp)(2))
    If c <> "" Then
        v = Left(c, InStr(c & " ", " ") - 1)
        s = Split(v, "x")
        If UBound(s) > 0 Then c = v & " - Rep : " & d(s(1))
    End If
Next c
Columns("I:J").AutoFit 'ajustement largeurs
End Sub
 

Pièces jointes

Alors cette version (2) qui utilise le Dictionary :
VB:
Sub MAJ()
Dim d As Object, c As Range, v, s
Set d = CreateObject("Scripting.Dictionary")
Application.ScreenUpdating = False
For Each c In Range("E2", Range("E" & Rows.Count).End(xlUp)(2))
    If c <> "" And c(1, 2) <> "" Then d(CStr(c)) = c(1, 2)
Next c
For Each c In Range("I2", Range("I" & Rows.Count).End(xlUp)(2))
    If c <> "" Then
        v = Left(c, InStr(c & " ", " ") - 1)
        s = Split(v, "x")
        If UBound(s) > 0 Then c = v & " - Rep : " & d(s(1))
    End If
Next c
For Each c In Range("J2", Range("J" & Rows.Count).End(xlUp)(2))
    If c <> "" Then
        v = Left(c, InStr(c & " ", " ") - 1)
        s = Split(v, "x")
        If UBound(s) > 0 Then c = v & " - Rep : " & d(s(1))
    End If
Next c
Columns("I:J").AutoFit 'ajustement largeurs
End Sub
OMG c'est super cela marche trop bien,
merci énormément
 
sachant que le nombre de débit peut dépasser les 2 colonnes.
Alors utilisez plutôt cette version (3) :
VB:
Sub MAJ()
Dim d As Object, c As Range, v, s, col%, plage As Range
Set d = CreateObject("Scripting.Dictionary")
Application.ScreenUpdating = False
For Each c In Range("E2", Range("E" & Rows.Count).End(xlUp)(2))
    If c <> "" And c(1, 2) <> "" Then d(CStr(c)) = c(1, 2)
Next c
For col = 9 To 256
    Set plage = Range(Cells(2, col), Cells(Rows.Count, col).End(xlUp)(2))
    If Application.CountA(plage) = 0 Then Exit For
    For Each c In plage
        If c <> "" Then
            v = Left(c, InStr(c & " ", " ") - 1)
            s = Split(v, "x")
            If UBound(s) > 0 Then c = v & " - Rep : " & d(s(1))
        End If
Next c, col
Columns("I:IV").AutoFit 'ajustement largeurs
End Sub
 

Pièces jointes

Alors utilisez plutôt cette version (3) :
VB:
Sub MAJ()
Dim d As Object, c As Range, v, s, col%, plage As Range
Set d = CreateObject("Scripting.Dictionary")
Application.ScreenUpdating = False
For Each c In Range("E2", Range("E" & Rows.Count).End(xlUp)(2))
    If c <> "" And c(1, 2) <> "" Then d(CStr(c)) = c(1, 2)
Next c
For col = 9 To 256
    Set plage = Range(Cells(2, col), Cells(Rows.Count, col).End(xlUp)(2))
    If Application.CountA(plage) = 0 Then Exit For
    For Each c In plage
        If c <> "" Then
            v = Left(c, InStr(c & " ", " ") - 1)
            s = Split(v, "x")
            If UBound(s) > 0 Then c = v & " - Rep : " & d(s(1))
        End If
Next c, col
Columns("I:IV").AutoFit 'ajustement largeurs
End Sub
Trop bien,
Grand merci à vous
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
36
Affichages
3 K
Retour