Autres Résolu - Modification particulière dans des chaines de caracteres XL2007

eric57

XLDnaute Occasionnel
Bonjour le Forum.

Je reviens vers vous pour un soucis dont je n'arrive pas à trouver la solution.

Lors de transfert de listes d'appareils, des erreurs ont été enregistrés, ( dû au départ, à la présence d'espaces dans la cellule)

Je me retrouve avec des colonnes de 10.000 lignes avec parfois 3 ou 4000 erreurs

2 colonnes, dans la droite les "modèles" dans la gauche les "produits" . Dans la gauche, tout les produits doivent se terminer par une "/" et 2 chiffres.

Au moment du transfert, la barre "/" s'est parfois retrouvée en position 2 en partant de la droite. Du coup, dans la colonne de droite, un chiffre en trop est présent.

Je vous joint un fichier exemple, j'ai mis en jaune les cellules qui posent problèmes.

Merci d'avance a ceux qui pourrontme proposer une solution, toutes mes tentatives en VBA n'ont eu que des résultats mitigés ou partiels.
 

Pièces jointes

  • Transfere_liste.xlsx
    14.6 KB · Affichages: 7

eric57

XLDnaute Occasionnel
Oui je te prépare cela.
En faite c'est ta macro qui m'a fait réaliser qu'il pouvait avoir des mauvaises lignes . Il est vrai que certaines colonnes font 25.000 Lignes
Dans l'exemple, ligne 129 et 247
 

Pièces jointes

  • Transfere_liste.xlsx
    181.2 KB · Affichages: 4

Lolote83

XLDnaute Barbatruc
Re salut,
Voici donc la version3 avec traitement des cellules vides et abscence de /
Sur le fichier joint, voici le résultat
1568278965692.png


et donc le code associé

VB:
Sub Test_ERIC57_V3()
    Application.ScreenUpdating = False
    xErrNorm = 0
    xErrVide = 0
    xErrSlash = 0
    xDerLig = Range("B65000").End(xlUp).Row                         'On détermine la dernière ligne de la colonne B
    For Each xCell In Range("B2:B" & xDerLig)                       'On teste uniquement la colonne B (PRODUIT)
        xDecoupe = Split(xCell.Value, "/")
        xNombre = UBound(xDecoupe)
        Select Case xNombre
            Case Is = -1                    'Cellule vide
                xErrVide = xErrVide + 1
                Range("C" & xCell.Row) = "Vide"                             'On inscrit en colonne C le type d'erreur rencontrée
            Case Is = 0                     'Cellule ne contenant pas de /
                xErrSlash = xErrSlash + 1
                Range("C" & xCell.Row) = "Pas de /"                         'On inscrit en colonne C le type d'erreur rencontrée
            Case Is = 1                     'Cellule avec /
                If Len(xDecoupe(1)) = 1 Then
                    xErrNorm = xErrNorm + 1                                 'On incrémente le compteur des erreurs
                    xPremier = Left(xDecoupe(0), Len(xDecoupe(0)) - 1)      'On récupère la première partie
                    xDernier = Right(xDecoupe(0), 1) & xDecoupe(1)          'On récupère la dernière partie
                    Range("B" & xCell.Row) = xPremier & "/" & xDernier      'On inscrit dans la colonne désignée le résultat PRODUIT
                    Range("A" & xCell.Row) = xPremier                       'On inscrit dans la colonne désignée le résultat MODELE
                    Range("C" & xCell.Row) = "Normal"                       'On inscrit en colonne C le type d'erreur rencontrée
                End If
        End Select
    Next xCell
    xMess = Empty
    xMess = xMess & "Traitement terminé : " & xErrNorm + xErrVide + xErrSlash & " erreur(s) trouvée(s) dont :" & Chr(13) & Chr(13)
    xMess = xMess & "      -  " & xErrNorm & " erreur(s) sur traitement normal" & Chr(13) & Chr(13)
    xMess = xMess & "      -  " & xErrVide & " erreur(s) sur cellules vides" & Chr(13) & Chr(13)
    xMess = xMess & "      -  " & xErrSlash & " erreur(s) sur cellules ne contenant pas /" & Chr(13)
    MsgBox xMess, vbInformation, "MODELE - PRODUIT"
    Application.ScreenUpdating = True
End Sub
En espérant que cela corresponde maintenant à tes attentes
@+ Lolote83
 

Discussions similaires

Statistiques des forums

Discussions
311 707
Messages
2 081 746
Membres
101 812
dernier inscrit
trufu