Condition SI ==> Regroupez des pays selon un Code

kiru@

XLDnaute Nouveau
Bonjour,

J'espère que vous pourrez me donner un coup de pouce pour m'aider à faire fonctionner mon fichier.

j'aimerais qu'Excel attribue automatiquement un code aux pays recensés dans mon fichier:

Mais j'éprouve quelques difficultés.

On m'a conconté un code VBA que voici :

sur ta feuil1 a partir de la ligne 7, en colonne 1 tu écris le code en colonne 2 tu mets le pays
fais attention que les noms ne soit pas précédé d'espace

Geog Country
APAC (Asia PACific) China
APAC (Asia PACific) Hong-Kong
APAC (Asia PACific) Japan
APAC (Asia PACific) Malaysia
APAC (Asia PACific) Singapore
APAC (Asia PACific) Taiwan
APAC (Asia PACific) Thailand
APAC (Asia PACific) Indonesia
BELUX (BElgium Luxembourg) Belgium
BELUX (BElgium Luxembourg) Luxembourg
FR France
FR Morocco
FR Austria
GCE Germany
GCE Poland
IB Andorra
IB Portugal
IB Spain
INDIA India
IT Italy

dans la feuille 2

dans cells(1,1) tu écris le non du pays

dans cells(1,2) tappes la formules =rep(LC(-1)

Fonction VBA :

Function rep(pays1)
pays1 = Trim(pays1)
Application.Volatile
Dim tab_code 'Crée une variable
Set tab_code = CreateObject("Scripting.Dictionary" )

l = 7
col = 2
While Sheets("feuil1" ).Cells(l, col) <> ""
pays = Trim(Sheets("feuil1" ).Cells(l, col))
' Sheets("feuil1" ).Cells(l, col) = pays
code = Trim(Sheets("feuil1" ).Cells(l, col - 1))
If code = "" Then
code = code_old
Else
code_old = code
End If
tab_code(pays) = code
l = l + 1
Wend

If tab_code.exists(pays1) Then
rep = tab_code(pays1)
Else
rep = "Non défini"
End If
End Function


Seulement je n'ai rien qui se produit.
JE ne suis pas utilisateur de VBA a la base donc il se peut que j'ai omis de faire quelque chose, j'ai pourtant suivi la démarche ci dessus.

Sauriez vous d'ou peut venir le probleme?
Je vous joint le fichier concerné.
 

Pièces jointes

  • TestVBAPays.xls
    22 KB · Affichages: 91

kiru@

XLDnaute Nouveau
Re : Condition SI ==> Regroupez des pays selon un Code

Ah merci beaucoup les amis!

C'est vrai que maintenant ca fonctionne!

Seulement une petite question. j'ai glissé la formule vers le bas pour les autres pays. Mais si je veut que cela marche très bien je dois mettre la souris dans chaque cellule puis validé par entrée. Sinon cela reste FR (a cause de la premier formule qui sort FR comme résultat).

Et j'ai le même souci avec une seconde méthode que j'ai fait a base de conditions SI

J'ai remarqué que lorsque je fermais puis rouvrait le fichier hé bien tout rentrait dans l'ordre. Savez vous a quoi cela est dû ?
 

kiru@

XLDnaute Nouveau
Re : Condition SI ==> Regroupez des pays selon un Code

Au niveau du code, savez vous pourquoi =rep(LC(-1)) ne fonctionne pas ?
Car c'est plus pratique que d'utiliser A1 ainsi je peut recopier la formule dans la ligne 2, rep ira chercher le nom du pays dans ligne 2 colonne 1.

Mais excel me met en noir LC et ne veut pas executer avec un message d'erreur.
 

kiru@

XLDnaute Nouveau
Re : Condition SI ==> Regroupez des pays selon un Code

Mon code fonctionne bien désormais.

Mais j'aimerais ajouter une étape j'espère que vous pourrez m'aider.

En fait, en plus des codes pays je voudrais rajouter un code "WL"

En plus de la colonne pays, WL devra automatiser une autre colonne "Service Line" si celle-ci contient le mot Worldine.

Mais, le problème, c'est que Wordline est assimilé soit à France, Germany, Spain ou Belgium ....

Vous l'aurez compris ces pays sont déjà automatisé par les codes pays FR, GCE, IB et Belux ...


Donc pour résumer j'aimerais modifier le code afin d'ajouter une autre "condition" :

si Pays = France ET si Service Line = Worldine ALORS le code VBA devrait dire Wordline.

Dans le cas contraire le code affiche simplement FR.

Je pense qu'il serait plus judiceux d'ajouter cette condition en globalité meme si cela concerne tout les pays.


Saurez vous retranscrire cela en VBA?

merci bceaucoup.
 
Dernière édition:

kjin

XLDnaute Barbatruc
Re : Condition SI ==> Regroupez des pays selon un Code

Bonjour,
Tu ne lis pas correctement les réponses me semble t-il !
Tu as 2 possibilités pour afficher les références, et pour ce tu vas dans menu Outils/options/affichage et tu coches ou non Style L1C1.
Mais les 2 styles ne sont pas possibles en même temps
Pour renvoyer ta formule dans les cellules B2 et suivantes
en B1
=$A1
puis tu fais une recopie incrémentée de la formule vers le bas
tu obtiendras automatiquement
en B2 --> =$A2
en B3 --> =$A3..
Le calcul automatique doit être activé dans les options comme déjà dit
En ce qui concerne le TCD, seul un ton fichier allégé pourra nous aider à comprendre ton pb
A+
kjin
 

kiru@

XLDnaute Nouveau
Re : Condition SI ==> Regroupez des pays selon un Code

Oups j'ai sauté ton précédent post, c'est vrai que tu m'avais indiqué la solution.

Thanks c'est fait.

Concernant le TCD c'est bon cela fonctionne en fait en updatant le TCD d'origine ca ne marche pas mais j'ai recommencé le TCD à 0 et la c'est nickel.

Il ne me reste plus qu'a modifier le code pour ajouter des conditions comme dit ci-dessus.

Merci encore pour tes réponses.

Edit : Pyrof merci pour ton fichier il est vriament pas mal, dommage que je ne puisse pas utiliser la fonction selection dans mon cas (base de donnée donc la colonne ajoute le code automatiquement lorsque des données sont entrées).

Mais je garde ton fichier de coté j'en aurais surement besoin.
 
Dernière édition:

kiru@

XLDnaute Nouveau
Re : Condition SI ==> Regroupez des pays selon un Code

Re,
Si j'ai compris
A+
kjin

Oui tu as compris.

C'est ca que je recherche, à ce stade il n'y a plus qu'a caché la colonne B et c'est parfait.

Bravo tu pratique le VBA depuis longtemps je suppose ?

Dans mon fichier la colonne Pays et Code sont situés aux colonnes J et I environ.

Donc pour que ton code fonctionne sur mon fichier je suppose que je dois modifer une partie de ton code

Function rep(pays1, Optional Opt)
pays1 = Trim(pays1)
Application.Volatile
Dim tab_code 'Crée une variable
Set tab_code = CreateObject("Scripting.Dictionary")

l = 7
col = 2
While Sheets("feuil1").Cells(l, col) <> ""
pays = Trim(Sheets("feuil1").Cells(l, col))
' Sheets("feuil1" ).Cells(l, col) = pays
code = Trim(Sheets("feuil1").Cells(l, col - 1))
If code = "" Then
code = code_old
Else
code_old = code
End If
tab_code(pays) = code
l = l + 1
Wend

If Not tab_code.exists(pays1) Then
rep = "Non défini"
Else
Select Case Opt
Case ""
rep = tab_code(pays1)
Case "WL"
rep = "Worldline"
End Select
End If
End Function
 

kjin

XLDnaute Barbatruc
Re : Condition SI ==> Regroupez des pays selon un Code

Re,
Il s'agit d'une fonction(Formule) donc il n'y a rien à modifier !
Si France en I12 et WL en J12 (j'ai supposé que tu écrivais WL pour Worldline mais tu peux changer évidemment)
si en H54 tu saisies
=Rep(I12) renverra FR
=Rep(I12;J12) renverra WorldLine
Si France en I12 et J12 vide
=Rep(I12;J12) renverra FR

Une correction dans le code
Code:
Function rep(pays1, Optional Opt As String)
Dim Tab_code       'Crée une variable
Application.Volatile

pays1 = Trim(pays1)

Set Tab_code = CreateObject("Scripting.Dictionary")
L = 7
Col = 2
    While Sheets("feuil1").Cells(L, Col) <> ""
    pays = Trim(Sheets("feuil1").Cells(L, Col))
    'Sheets("feuil1" ).Cells(l, col) = pays
    code = Trim(Sheets("feuil1").Cells(L, Col - 1))
        If code = "" Then
        code = code_old
        Else
        code_old = code
        End If
    Tab_code(pays) = code
    L = L + 1
    Wend
 
If Not Tab_code.exists(pays1) Then
    rep = "Non défini"
Else
    Select Case Opt
        Case ""
        rep = Tab_code(pays1)
        Case "WL" 'modifie ici le code
        rep = "Worldline"
    End Select
End If
End Function
A+
kjin
 

Discussions similaires