Microsoft 365 Extraire le code pays d'une référence avec un code VBA

Faroyo

XLDnaute Junior
Bonjour,

je sèche sur un pb de traitement de données. J'ai une liste de produit de provenance diverses (feuille "data"). En fonction de l'origine, des droits de douanes s'appliquent. J'aimerai pouvoir extraire le code pays et ainsi pouvoir determiner s' il est en provenance de la CEE ou non (feuille "pays"). Le code pays n'a pas de position fixe dans le texte et il est composé de 2 ou de 3 caractères (code pays mis en rouge pour l'exemple).
Résumé de la demande:
-identifier le code pays colonne A feuille data, 2 à 3 caractères et position non fixe.
-Recherche la provenance dans le tableau feuille "pays" et le reporter dans la colonne B feuille "data".

Dans l'attente de vous lire
Merci pour votre aide !
 

Pièces jointes

  • pays.xlsx
    18.5 KB · Affichages: 11

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Faroya, Job,
Il manque des codes dans votre feuille "pays" comme Soudan, Tadjikistan.
D'autre part il me semble que "BL" n'existe pas.
Cependant un essai avec cette macro :
VB:
Option Explicit
Sub CEEouNon()
Dim DL%, Item$, Réponse$, L%, Li%
With Sheets("Pays")
    DL = [A65500].End(xlUp).Row
    For Li = 2 To DL
        Réponse = ""
        Item = Cells(Li, "A")
        For L = 1 To .[A65500].End(xlUp).Row
            If Item Like "*" & .Cells(L, "B") & "*" Then Réponse = .Cells(L, "C"): Exit For
        Next L
        If Réponse = "" Then
            For L = 1 To .[E65500].End(xlUp).Row
                If Item Like "*" & .Cells(L, "F") & "*" Then Réponse = .Cells(L, "G"):  Exit For
            Next L
        End If
        If Réponse = "" Then Cells(Li, "B") = "Non trouvé" Else Cells(Li, "B") = Réponse
    Next Li
End With
End Sub
 

Pièces jointes

  • pays.xlsm
    26 KB · Affichages: 1

Faroyo

XLDnaute Junior
Bonjour Faroya, Job,
Il manque des codes dans votre feuille "pays" comme Soudan, Tadjikistan.
D'autre part il me semble que "BL" n'existe pas.
Cependant un essai avec cette macro :
VB:
Option Explicit
Sub CEEouNon()
Dim DL%, Item$, Réponse$, L%, Li%
With Sheets("Pays")
    DL = [A65500].End(xlUp).Row
    For Li = 2 To DL
        Réponse = ""
        Item = Cells(Li, "A")
        For L = 1 To .[A65500].End(xlUp).Row
            If Item Like "*" & .Cells(L, "B") & "*" Then Réponse = .Cells(L, "C"): Exit For
        Next L
        If Réponse = "" Then
            For L = 1 To .[E65500].End(xlUp).Row
                If Item Like "*" & .Cells(L, "F") & "*" Then Réponse = .Cells(L, "G"):  Exit For
            Next L
        End If
        If Réponse = "" Then Cells(Li, "B") = "Non trouvé" Else Cells(Li, "B") = Réponse
    Next Li
End With
End Sub
Je viens de tester le code sur le fichier original, il fonctionne très très bien mais je ne suis pas certain de tout comprendre.
Sans vouloir abuser vous serait-il possible de le commenter.

Merci
 

DJunqueira

XLDnaute Occasionnel
Bonjour Faroyo,
Avec formule de tableau de déversement (spill array):
=LET(p;FRACTIONNER.TEXTE(JOINDRE.TEXTE(";";1;SUBSTITUE(TEXTEAPRES(SUPPRESPACE(A2:A14);" ";2;0);" ";";"));;";";1);
s;FILTRE(p;NBCAR(p)<=3);
t;TRI(ASSEMB.V(pays!$B$1:$C$64;pays!$F$1:$G$123));
RECHERCHEX(GAUCHE(s;2);INDEX(t;;1);INDEX(t;;2);RECHERCHEX(s;INDEX(t;;1);INDEX(t;;2);"Pas trouvé";0);0))

Il n'y a pas de 'BL' dans votre liste.
 

Pièces jointes

  • pays.xlsx
    24.2 KB · Affichages: 2

Faroyo

XLDnaute Junior
Merci pour toutes vos propositions de solutions.
Impossible pour moi de les tester encore ce soir, St Valentin oblige , mais je me ferai un plaisir de toutes les tester dès la première heure demain matin.
Je ne manquerai pas de vous faire part de mes commentaires.
Passez une très bonne soirée
 

Faroyo

XLDnaute Junior
Bonjour,
je viens de tester toutes vos solutions et toutes fonctionnes très bien. Malheureusement pas dans tous les cas.
Vos solutions ne sont pas en cause. C'est en parcourant le nouveau fichier reçu ce jour que je suis tombé sur des syntaxes de textes différents.
Exemple:
Eau 6x1.5L US HF-2365 (US code pays, HF-2365 code propre au fournisseur)
Bière BTLPET6X0.25L BLT AGR BB-0001 (AGR code pays, BLT code pour dire bouteille)
Biere PREMIUM 330 EC 6X0.33L BTL UA-AAS (UA code pays,...)
On se retrouve avec fois 2/3 caractères. Pl

Cela complique très nettement la donne. Pas certain que mon problème soit soluble.
Je reste néanmoins ouvert à toutes vos propositions.

PS: Merci pour le code BL. Erreur de code pays, le bon est 'BR'

Dans tous les cas, un grand merci à tous pour votre temps et votre partage.

Faroyo.
 

Pièces jointes

  • pays.xlsx
    18.8 KB · Affichages: 4

DJunqueira

XLDnaute Occasionnel
Merci pour votre reponse.
Merci pour response. Votre proposition fonctionne très bien
Merci pour votre avis positif Faroyo.

J'ai modifié le code pour prendre en compte les nouvelles saisies de données. Évidemment, il peut toujours y avoir une nouvelle complication, mais je pense que la formule renvoie un bon résultat.
 

Pièces jointes

  • Pays HorsCEE DJ.xlsx
    20.3 KB · Affichages: 2

Faroyo

XLDnaute Junior
Merci pour votre réponse.
Votre solution me semble très bien fonctionner par contre, j'avoue ne pas comprendre grand chose à votre code. Je n'ai aucune notion de SQL. Sans vouloir abuser, vous serait-il possible de le commenter?
Une derrière requête, vous serait possible d’ajouter une colonne dans laquelle apparaîtrait le code pays. Cela pourrait me permettre en cas d'erreur de verifier très raidement la cause.

Encore une fois un très grans merci pour votre aide
 

Discussions similaires

Statistiques des forums

Discussions
313 289
Messages
2 096 847
Membres
106 764
dernier inscrit
END