Excel VBA, éclater une désignation article automatiquement

Bonjour,

Je fais face à une petit intérrogation, en effet je dispose d'environ 40 000 lignes de données à analyser avec une première problématique conçernant la désignation des articles. En effet une désignation est réalisée suivant une ref article (4 ou 5 chiffres) puis une séparation à l'aide de plusieurs - (touche 6 du clavier) puis d'une ref secondaire composée de 4 lettres et enfin plusieurs ref annexes qui ne m'intéressent pas pour le moment.

J'ai essayé de réaliser la séparation à l'aide du bouton convertir et séparation à l'aide du symbole - mais la décomposition est parfois décalé d'une colonne et donc la ref secondaire se retrouve décalé (ne fonctionnera donc aps en automatique). Pourriez-vous m'aider à trouver la bonne démarche?

merci grandement pour votre aide

exemple :

3241--AZER--528DLFI

3527-4N-AZVE-KZERPOË

56341-SDCF-CJKEPRI

76453-4S-GUOD--KCCPO

ce que j'aimerais c'est coller les ref ci-dessus en cellule A1 et lancer un programme ou uen condition pour que en A2 s'affiche les 4 ou 5 premiers chiffres et en A3 la série de 4 lettres

Bonjour Dany, bonjour le forum,

Peut-être comme ça (onglet O et colonne CR à adapter) :

Sub Macro1()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim CR As Integer 'déclare la variable CR (Colonne de Référence)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim NF As Byte 'déclare la variable NF (Nombre de Fois)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Byte 'déclare la variable J (incrément)
Dim TT As Variant 'déclare la variable TT (tableau des Tirets)
Dim P1 As String 'déclare la variable P1 (Partie 1)
Dim P2 As String 'déclare la variable P2 (Partie 2)

Set O = Worksheets("Feuil1") 'définit l'onglet O
CR = 1 'définit la colonne de référence CR (à adapter à ton cas)
DL = O.Cells(Application.Rows.Count, CR).End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne CR de l'onglet O
For NF = 1 To 5 'boucle 1 : 5 fois(augmente cette valeur s'il peut y avoir plus de 5 tirets consécutifs -----)
    For I = 1 To DL 'boucle 2 : sur toutes les lignes I de 1 à DL
        O.Cells(I, CR) = Replace(O.Cells(I, CR).Value, "--", "-") 'remplace deux tirets par un seul tiret
    Next I 'prochaine ligne de la boucle 2
Next NF ''prochaine fois de la boucle 1

For I = 1 To DL 'boucle sur toutes les ligne I de 1 à DL
    P1 = "": P2 = "" 'réinitialise les parties P1 et P2
    TT = Split(O.Cells(I, CR), "-") 'définit le tableau des tirets TT de la cellule ligne I colonne CR
    If UBound(TT, 1) > 0 Then 'condition 1 : si la cellule ligne I colonne CR contient au moins un tiret
        P1 = Split(O.Cells(I, CR).Value, "-")(0) 'définit la partie P1 (partie avant le premier tiret)
        For NF = 1 To UBound(TT) 'bouce 1 : sur tous les tirets du tableau TT
            If Len(Split(O.Cells(I, CR).Value, "-")(NF)) = 4 Then 'condition 2 : si le texte entre deux tirets de la boucle contient 4 caractères
                P2 = Split(O.Cells(I, CR).Value, "-")(NF) 'définit la partie P2 (texte entre deux tirets de 4caractères)
                For J = 1 To 4 'boucle 2 : sur les 4 caratères de P2
                    If IsNumeric(Mid(P2, J, 1)) Then P2 = "": GoTo suite 'si le caractère de la boucle est numérique, vide P2, va à l'étiquette "suite"
                Next J 'prochain caractère de la boucle 2
                O.Cells(I, CR + 1).Value = P1 'renvoie P1 dans la cellule décalée d'une colonne
                O.Cells(I, CR + 2).Value = P2 'renvoie P2 dans la cellule décalée de deux colonnes
                Exit For 'sort de la boucle 2
            End If 'fin de la condition 2
suite: 'étiquette
        Next NF 'prochain tiret de la boucle 2
    End If 'fin de la condition 1
Next I 'prochaine ligne de la boucle 1
End Sub

Bonjour, voici avec 2 formules, un fichier exemple ci-dessous

=GAUCHE(A3;CHERCHE("-";A3)-1)
=STXT(SUPPRESPACE(SUBSTITUE(A3;"-";" "));CHERCHE(" ";SUPPRESPACE(SUBSTITUE(A3;"-";" ")))+1;CHERCHE(" ";SUPPRESPACE(SUBSTITUE(A3;"-";" "));CHERCHE(" ";SUPPRESPACE(SUBSTITUE(A3;"-";" ")))+1)-CHERCHE(" ";SUPPRESPACE(SUBSTITUE(A3;"-";" ")))-1)

@+

Bonjour Nico, Bonjour le forum,

@Nico
Ou j'ai mal compris (ce qui est extrêmement courant), ou ce n'est pas le résultat escompté car en colonne C il y a des valeurs avec uniquement deux caractères.

Bonjours à tous.

Bizarre tout de même l'option convertir devrait fonctionner ou alors la base de données à l'origine n'est pas correcte. : D'aprés l'exemple

la 3ème référence est incorrecte. SDCF devrait être précédé de 2 tirets car elle n'a pas de réf secondaire comme le 4ème exemple ?

3241--AZER--528DLFI

3527-4N-AZVE-KZERPOË

56341-SDCF-CJKEPRI

76453-4S-GUOD--KCCPO

Re,

@XmenPL
D'après l'énoncé et/ou l'exemple de Dany, le nombre de tirets est variable et ainsi que la position de la seconde série. Dans ce cas la fonction convertir ne peut pas convenir.

Bonjour à toutes et tous,,

Il serait de bon ton, que Dany67700 joigne un petit fichier avec des exemples de résultats et qu'il documente sa version Excel dans son profil.

Cdlt.

bonsoir,

J'ai décidé de reprendre les données à la base, j'ai commencé à réaliser un petit fichier excel où j'en profite pour ouvrir le fichier texte importer (voir en pièce jointe). Malheureusement celui-ci rencontre encore des problèmes de fonctionnement. Je pense que j'ai mis la charrue avant les boeufs. Commençons pas régler les 1er problèmes si vous le voulez bien.

8test.xlsm (20.85 Ko)

Re,

Il est ou le fichier txt ?

Et ta version Excel, on doit deviner ?

Cdlt.

il suffit de demander gentillement, excel 2007 et le fichier texte est en cour de modif il y'a beaucoup d’éléments sensible à supprimer que je en souhaiterais pas laisser sur un forum

Bonsoir le fil, bonsoir le forum,

As-tu testé le code que je t'ai proposé ?... Heu c'est assez gentiment demandé là ?...

thau thème, je vous remercie humblement pour votre réponse, malheureusement non je n'ai pas encore testé votre solution car je ne sais pas où coller les lignes de programmation. Je me permets de vous remettre en pièce jointe mon fichier excel que je souhaite configurer. Pourriez-vous m'indiquer svp entre quelles lignes je dois coller vos lignes de programmation?

Physiquement l'idée serait de charger le fichier txt en cliquant sur importer, puis de cliquer sur exporter afin que la macro colle correctement les données dans la feuille excel intitulé import. Ce qui deviendra ma base de données et le départ de mon analyse.

De plus s'il est possible que vous me corrigiez ma programmation afin que : lorsque je clique sur exporter la ligne ci-dessous ne me créer plus de problèmes:

Sheets("import").Cells(ligne_enCours, colonne_enCours).Value = tampon

je précise également que je travail sur excel 2019 dans le milieu professionnel. Enfin j'ai essayé de retravailler le fichier txt mais malheureusement il y'a trop d'informations à supprimer ce qui dénaturerai le travail à réaliser et infiné ne servirait à rien. J'en suis navrement désolé pour celà. Peut-être auriez-vous une idée pour palier celà?

7test.xlsm (20.85 Ko)
Rechercher des sujets similaires à "vba eclater designation article automatiquement"