Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1310 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  EXCEl : Condition SI ==> Regroupez des pays selon un Code

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

EXCEl : Condition SI ==> Regroupez des pays selon un Code

n°1829563
kiru@
Aucune citation
Posté le 19-12-2008 à 15:27:19  profilanswer
 

Bonjour,
 
tout d'abord j'ai hésité a poster ce sujet ici si il doit être déplacé dans software pas de souci.
 
 
Voici mon problème.
 
Je possède une liste de pays, et je veut faire en sorte que, selon le pays, un code soit attribué automatiquement à chaque pays dans une colonne à côté.
 
Voici les pays et les codes correspondants :
 
Geog
 Country
 
APAC (Asia PACific)
 China
 
 Hong-Kong
 
 Japan
 
 Malaysia
 
 Singapore
 
 Taiwan
 
 Thailand
 
 Indonesia
 
BELUX (BElgium Luxembourg)
 Belgium
 
 Luxembourg
 
FR
 France
 
 Morocco
 
GCE
 Austria
 
 Germany
 
 Poland
 
IB
 Andorra
 
 Portugal
 
 Spain
 
INDIA
 India
 
IT
 Italy
 
MEA
 Greece
 
 South Africa (SAF)
 
 Swiss
 
 Turkey
 
NAM
 US
 
 Mexico
 
NL
 The Netherlands
 
SAM
 Brasil
 
 Argentina
 
 Chile
 
 Colombia
 
 Peru
 
 Venezuela
 
UK
 United Kingdom
 
WL
 Belgium
 
 France
 
 Germany
 
 
 
 
 
 
Vous remarquerez peut-être que le dernier code (WL) est attribué à des pays qui sont déjà concerné par d'autres codes (FR pour France, GCE pour Germany et BELUX pour Belgium mais laissons ca de côté j'essaierai de gérer cela plus tard).
 
 
Donc pour réaliser ce petit automatisme j'éprouve quelques soucis.
Excem 2003 ne gère que 7 conditions SI donc je ne peut pas mettre mes 32 conditions à la ligne.
 
Je peut faire cela mais ca me crée plusieurs colonnes avec des doublons :
 
 
=SI(A1="France";"FR";SI(A1="Morocco";"FR";SI(A1="Spain";"IB";SI(A1="Andorra";"IB";SI(A1="Belgium";"BELUX";SI(A1="Luxembourg";"BELUX";"" ))))))
 
 
=F1 & SI(A1="Hong-Kong";"APAC";SI(A1="Japan";"APAC";SI(A1="Malaysia";"APAC";SI(A1="Singapore";"APAC";SI(A1="Taiwan";"APAC";SI(A1="Thailand";"APAC";"" ))))))
 
=F1 & SI(A1="Indonesia";"APAC";SI(A1="Austria";"GCE";SI(A1="Germany";"GCE";SI(A1="Poland";"GCE";SI(A1="Portugal";"IB";SI(A1="India";"INDIA";"" ))))))
 
 
Quelqu'un aurait-il une méthode plus simple afin de mener à bien mon projet?
Merci beaucoup

mood
Publicité
Posté le 19-12-2008 à 15:27:19  profilanswer
 

n°1829570
kiru@
Aucune citation
Posté le 19-12-2008 à 15:33:42  profilanswer
 

Pour vous donné une idée du fichier voila ce qu'une personne m'a concocté :
http://www.cijoint.fr/cjlink.php?f [...] v5MKCa.xls
 
Le hic c'est que je n'arrive pas a comprendre le code a cause de la rechercheV ...

n°1829604
DamienCYS
Posté le 19-12-2008 à 15:57:49  profilanswer
 

ce code est très bien qu'est ce que tu ne comprend pas dans la recherchev ?

n°1829606
kiru@
Aucune citation
Posté le 19-12-2008 à 16:01:27  profilanswer
 

En fait deux choses qui me bloquent :
 
La première chose c'est qu'en reprenant le fichier lorsque je rajoute la liste entière des pays et que je fais un glisser formule vers le bas pour le Code il faut que je reclique sur chaque ligne ou la formule est présente et que je valide par entrée pour que la formule soit prise en compte.
 
je ne comprends pas pouruqoi je dois faire cette manipulation.
 
 
Ensuite mon plus gros problème c'est que lorsque je veut récupérer ce code dans mon fichier à moi hé bien j'ai des soucis pour la mise a jour de la formule c'est a dire que je n'arriv pas a mettre les bons arguments pour la formule de la rechercheV en ce qui concerne la ligne Test_Logique mais également pour la ligne Valeur_Si_Vrai.
 
Donc au final pour être plus clair je ne sais pas m'approprier la formule dans mon cas.

n°1829609
SuppotDeSa​Tante
Aka dje69r
Posté le 19-12-2008 à 16:04:37  profilanswer
 

Bonjour
 

Citation :

Excem 2003 ne gère que 7 conditions SI donc je ne peut pas mettre mes 32 conditions à la ligne.

C'est vrai.... et faux. Rien ne t'empeche dans la derniere condition de faire reference a une autre cellule qui reprendrait 7 SI, puis refaire reference a une autre cellule qui reprendrait 7 SI etc.
Mais c'est tout sauf propre.
 
RechercheV va chercher une valeur dans un tableau vertical et renvoyer une valeur de la colonne n°x de ce tableau.
 
Avec ton exemple : RECHERCHEV(A1;PaysCode;2;FAUX)
 
=SI(NB.SI(PaysCode;A1)>0;RECHERCHEV(A1;PaysCode;2;FAUX);"" )
 
Je laisse le NB.Si
On va chercher le pays saisi en A1 dans le tableau "PaysCode" et on va renvoyer la valeur de la deuxieme colonne du tableau (Ta colonne "Code" ) où cette valeur est sur la meme ligne que la valeur trouvée.
 
Si en A1 tu saisis Japan
Il va chercher JAPAN dans ton tableau PaysCode, et il va renvoyer la valeur qui est dans la seconde colonne ET sur la meme ligne que Japan. Donc APAC
 
Cordialement


---------------
Soyez malin, louez entre voisins !
n°1829613
kiru@
Aucune citation
Posté le 19-12-2008 à 16:12:02  profilanswer
 

Oui pour la technique que tu as décrite concernant la référence a une autre cellule j'ai commencé comme ca mais ce n'est pas propre comme tu le dis et puis dans mon cas ca m'a crée des doublons dans des colonnes différentes c'est pourquoi je recherche une autre solution.
 
Pour la recherche V j'ai compris le principe mais je ne comprends pas "PaysCode"  
 
A quoi cela correspond ?  
 
Pour moi ca correspond à la fois à la colonne A (Pays) et a la colonne B (Code).
 
Ais-je raison ? Si oui ou ce nom est-il déclaré?
 
 
Ca m'empêche d'y voir clair.

n°1829615
kiru@
Aucune citation
Posté le 19-12-2008 à 16:15:16  profilanswer
 

Voici ce qu'on ma répondu :
 
Pour nommer une cellule ou une plage de cellules
XL<2007
Sélectionner la plage voulue
Insertion-nom-définir
 
pour trouver la plage nommée
edition-atteindre et tu sélectionnes "payscode"  
 
 
La je comprends mieux.
 
je vais essayer de le faire marcher dans mon fichier à présent je reviens ici si j'ai un souci.
 
merci pour tes réponses.

n°1829616
SuppotDeSa​Tante
Aka dje69r
Posté le 19-12-2008 à 16:17:28  profilanswer
 

PaysCode c'est un nom que tu donnes a une plage de cellule.
Ca evite de se taper des $A$1:$B:X ou X devra etre incrémenté.
 
Là ton PaysCode change a chaque fois que tu ajoutes une ligne, donc pas besoin d'ajuster les formules.
 
 
[edit]
En fait il faut pas passer par Insertion, Definir. La tu vas donner un nom a une plage fixe. (Je fais court)
 
Il vaut mieux que tu sélectionnes ton tableau, click droit, créer une liste. Ensuite, tu vas dans Insertion, Definir pour lui donner un nom.
[/edit]
 
Cordialement


Message édité par SuppotDeSaTante le 19-12-2008 à 16:21:47

---------------
Soyez malin, louez entre voisins !
n°1829625
kiru@
Aucune citation
Posté le 19-12-2008 à 16:42:44  profilanswer
 

Merci pour tes précisions.
 
C'est plus clair maintenant.
 
Mais je ne vois toujours pas le role joué par cette déclaration :  
 
NB.SI(PaysCode;A1)>0;
 
 
Le supérieure à 0 m'intrigue.

n°1829682
SuppotDeSa​Tante
Aka dje69r
Posté le 19-12-2008 à 20:01:15  profilanswer
 

Ca evite, au cas ou il ne trouve pas la valeur cherchée, qu'Excel te renvoit #N/A dans la cellule.


Message édité par SuppotDeSaTante le 19-12-2008 à 20:01:28

---------------
Soyez malin, louez entre voisins !
mood
Publicité
Posté le 19-12-2008 à 20:01:15  profilanswer
 

n°1830024
kiru@
Aucune citation
Posté le 21-12-2008 à 12:24:38  profilanswer
 

Merci pour la précision dje.

n°1830284
Ptit loup
Quand c'est flou, y'a un loup
Posté le 22-12-2008 à 09:49:26  profilanswer
 

A l'instar de dje, j'utilise aussi un truc pour éviter les #N/A, mais je lui préfère un "SIERREUR"
 
Par exemple sur cette recherche, je retourne la 3ème colonne des colonnes C à F de ma feuille "BoG and Classification"
(j'utilise aussi les colonnes sans préciser de numéro de ligne...)
 
=SIERREUR(RECHERCHEV($K2;'BoG and Classification'!$C:$F;3;FAUX);"" )

n°1830333
pyrof
Posté le 22-12-2008 à 11:32:12  profilanswer
 

Bonjour,
 
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

n°1830420
kiru@
Aucune citation
Posté le 22-12-2008 à 14:36:27  profilanswer
 

Houlaaaa merci pour le code pyrof mais le VBA je n'ai encore jamais utilisé.
 
Ca fait 3 mois que je bosse sur excel deja que j'ai quelques difficultés avec la rechercheV comme le montre le fait que je n'ai pas réussi a faire fonctionner le code de dessus.
 
Mais je peut tenter pourquoi pas.
 
j'ai fait comme tu m'as dis mais je sèche ici :
 
 
dans cells(1,2) tappes la formules =rep(LC(-1)  
 
 
cells(1,2) correspond à quoi exactement ?Colonne 1 ligne 2 ?
Pour la formule je l'ai mise dans une cellule mais ca ne fonctionne pas excel me dit qu'elle contient une erreur.
 
 
Enfin pour le code VBA pour l'insérer je dois créer une nouvelle macro ?

n°1830422
pyrof
Posté le 22-12-2008 à 14:39:30  profilanswer
 

dans la feuille 2  
ligne 1 colonne 1 tu saisis le nom du pays
dans le cellule ligne 1 colonne 2 su saisis :
 
=rep(LC(-1))
 
et tu auras le code

n°1830432
kiru@
Aucune citation
Posté le 22-12-2008 à 15:06:09  profilanswer
 

Merci pour ces précisions?
 
Mais en ce qui concerne l'ajout du code VBA j'ai ouvert la fenêtre Microsoft Visual Basic et c'est grisé foncé.
Pas moyen de faire nouveau code ou quelque chose du genre.
 
Est-ce bien ici que l'on doit entrer le code VBA ?

n°1830443
pyrof
Posté le 22-12-2008 à 15:20:39  profilanswer
 

tu dois avoir une fenêtre Projet, si ce n'est pas le cas fait CTRL R
 
 
 
tu fais clic droit, insertion ,module
et tu colles le VBA  
 
tu reviens dans la feuille, ça doit fonctionner

n°1830449
kiru@
Aucune citation
Posté le 22-12-2008 à 15:33:42  profilanswer
 

ALors j'ai ajouté le code VBA comme tu m'as dit.
IL n ya pas de systeme d'enregistrement donc j'ai simplement fermer la fenêtre je pense que le code st gardé en mémoire.
 
Ensuite j'a mis cette formule =rep(LC(-1))  en ligne 1 colonne 2.
 
mais rien ne se passe.
 
Ne devrais'-je pas selectionner le code vba quelque part? Dire a excel que la formule agit sur le code que j'ai copié collé? Car la aucune déclaration n'a relier le code et ma formule si je ne m'abuse ?

n°1830450
pyrof
Posté le 22-12-2008 à 15:38:44  profilanswer
 

Connais tu le site http://www.excel-downloads.com/forum/forum-excel/
 
c'est un forum un peu plus performant, on peut joindre des fichiers

n°1830452
kiru@
Aucune citation
Posté le 22-12-2008 à 15:41:00  profilanswer
 

Je suis deja tomber dessus en cherchant des tuto je pense.
Je vais m'inscrire ca a l'air pas mal merci.

n°1830495
kiru@
Aucune citation
Posté le 22-12-2008 à 16:31:46  profilanswer
 

Il fallait mettre ca : =rep(A1)
 
Ca fonctionne maintenant;
 
Merci beaucoup pyrof ;)

n°1830504
Ptit loup
Quand c'est flou, y'a un loup
Posté le 22-12-2008 à 16:59:34  profilanswer
 

En effet, on peut faire du VBA, mais vu qu'un simple fonction "RECHERCHEV" suffit, c'est un peu idiot de ne pas l'utiliser (surtout que je doute que la macro soit autant optimisée qu'un RECHERCHEV)

n°1830511
kiru@
Aucune citation
Posté le 22-12-2008 à 17:12:15  profilanswer
 

En fait la j'utilise les deux.
Le travail que je fait n'est pas pour moi la personne choisira entre les deux méthodes celle qu'elle préfère.
 
pyrof j'ai une autre question :
 
 
 
d'apres ton code tu m'as dit de procéder ainsi :
 
dans cells(1,1) tu écris le non du pays
 
dans cells(1,2) tappes la formules =rep(LC(-1)  
 
 
Mais que dois-je modifier dans le code pour que ton code s'applique à partir de la ligne suivante ? En fait je voudrais mettre un en-tête ou un titre à la colonne j'ai donc besoin de la 1ere ligne.
 

n°1830652
pyrof
Posté le 23-12-2008 à 08:00:27  profilanswer
 

Bonjour,
 
l'argument de la fonction rep est l'adresse de la cellule contenant le nom du pays
 
dans l'exemple rep(LC(-1)), LC(-1) veut meme ligne(L) colonne précédente C(-1)
 
si tu met rep(A1) la fonction prendra la valeur de la première cellule
 
Avec LC(-1), tu peux recopier la formule dans la ligne 2, rep ira chercher le nom du pays dans ligne 2 colonne 1.
 
Voila pourquoi je préfère travailler ac LC(-1) que par A1
 
Il est évident que le recherchev fonctionne, mais il faut développer le cas ou le pays n'est pas dans la liste. Ce qui complique la commande. Parfois le vba est plus facile à mettre en œuvre que des commandes à rallonge qui parfois peuvent être appliquées à une multitude de cellule.
C'est mon expérience qui le démontre.
 
Bonne fête de fin d'année

n°1830668
kiru@
Aucune citation
Posté le 23-12-2008 à 09:47:54  profilanswer
 

Merci pour l'explication.
 
Je comprends mieux le code à présent.
 
Même si =rep(LC(-1))  ne fonctionne pas, excel indique que LC contient une erreur et ne vut donc rien éxecuter.
 
C'est vrai que ce serait plus pratique que par A1.
 
Bonne fête de fin d'année également.

n°1830733
kiru@
Aucune citation
Posté le 23-12-2008 à 11:43:05  profilanswer
 

Ah oui je reviens à vous pour un autre petit souci.
 
Comme dit dans mon premier post :
 
"Vous remarquerez peut-être que le dernier code (WL) est attribué à des pays qui sont déjà concerné par d'autres codes (FR pour France, GCE pour Germany et BELUX pour Belgium mais laissons ca de côté j'essaierai de gérer cela plus tard). "
 
 
je dois donc gérer cela a présent.
 
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 judicieux d'ajouter cette condition en globalité meme si cela concerne tout les pays.
 
 
j'ai commencé à "essayer" de modifier mon code qui fonctionne avec les conditions (car VBA je suis novice).
 
J'ai pondu cette ligne qui ne fonctionne pas pour le moment :
 
=SI(ET(NB.SI(PaysCode;LC(1))>0;LC(2)<>Wordline);RECHERCHEV(LC(1);PaysCode;2;FAUX);"Wordline" )
 
 
Explication :  
ET ... C(2)="Wordline" ==> Je veut dire ET si Colonne + 2 est différent de Wordline alors afficher Code Pays, sinon afficher Worldine.
 
 
D'après mon raisonnement le code affiche soit le Code Pays, soit Wordline si la colonne "Service Line" contient le mot Wordline.
 
Je suppose que ma ligne contient des erreurs.

n°1830739
pyrof
Posté le 23-12-2008 à 11:51:53  profilanswer
 

Bonjour,
 
J'ai du mal a te suivre
Nous étions sur Hardware, je t'ai dis d'aller sur Excel download pour pouvoir joindre des fichiers.
Tu l'as fais, c'est bien
Mais tu continues les fils sur les 2  Forum, ça devient dur à suivre
 

n°1830741
kiru@
Aucune citation
Posté le 23-12-2008 à 11:53:03  profilanswer
 

Car je suis sur la méthodo par condition ici et via le VBA dans l'autre.
 
Pas de souci je ferme ici si cela gêne.
 
Bonne fêtes ;)

n°1830794
Ptit loup
Quand c'est flou, y'a un loup
Posté le 23-12-2008 à 13:06:09  profilanswer
 

Je persiste et signe, ce genre de chose n'a pas à être géré avec du VBA !!!
 
Les fonctions peuvent très facilement être utilisées, sont claires, maintenables et performantes, je ne comprends pas pourquoi on devrait s'en passer.
 
Tu mixes des "SI" avec des "RECHERCHEV" et tu auras ton résultat...
Le plus simple, ça reste dans un premier temps de décomposer ton pb...
Dans une colonne, tu mets le résultats de ta recherche, puis ensuite, dans une autre colonne tu fais ton SI... etc...
Quand tout est OK, tu peux facilement remettre ça dans une seule formule.
 
Edit : si tu veux qu'on t'aide plus, indique qq valeurs (en mode "fixe" pour que ça soit lisible), avec les différent cas pour qu'on écrive bien le truc, et on te fait ça


Message édité par Ptit loup le 23-12-2008 à 13:07:02
n°1830929
Ptit loup
Quand c'est flou, y'a un loup
Posté le 23-12-2008 à 17:02:33  profilanswer
 

Voilà ce que je te propose de mettre en "I2", et ensuite d'étendre...
Perso j'utilise le "SIERREUR", tu peux aussi remplacer le truc par ton NB.SI si tu préfères

=SIERREUR(SI(L2<>"Worldline";RECHERCHEV(J2;PaysCode;2;FAUX);"Worldline" );"" )


 
Tu parlais de la colonne "S&M or SL" (colonne K), mais je pense plutôt qu'il s'agit de la colonne "Service Line" (colonne L)... c'est pour ça que j'ai indiqué un "L2" dans ma formule.
 
Voilà.

n°1830930
Ptit loup
Quand c'est flou, y'a un loup
Posté le 23-12-2008 à 17:02:43  profilanswer
 

et bonnes fêtes ! :p

n°1830941
kiru@
Aucune citation
Posté le 23-12-2008 à 17:42:28  profilanswer
 

Merci pour la proposition.
J'essaye ton code, je n'ai pas le résultat escompté pour le moment mais je fais des petit test pour voir d'ou provient l'erreur.
 
Bonne fête à toi également.
 
 

n°1830945
kiru@
Aucune citation
Posté le 23-12-2008 à 17:53:30  profilanswer
 

J'ai modifié le code que voici :

 

=SI(NB.SI(PaysCode;J5)>0;(SI(L5<>"Worldline";RECHERCHEV(J5;PaysCode;2;FAUX);"WL" )))

 

(exemple pour la ligne 5)

 

Ca fonctionne comme ca.


Message édité par kiru@ le 23-12-2008 à 17:58:48
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  EXCEl : Condition SI ==> Regroupez des pays selon un Code

 

Sujets relatifs
[AutoHotkey] code qui bug[VBA Excel] Envoi mail puis reprendre la main...
WYSIWYG - Enregistrer code HTML - Recuperer format interprétéeImporter textes en html sous excel pour les traiter avec vba
[C#] Insérer une ligne dans tabeau ExcelQuelle application dans le code pour ouvrir Win Picture & Fax Viewer
Création de ligne/ Tableau Type sous excelProblème code javascript
Reprise du code de Supercopier 
Plus de sujets relatifs à : EXCEl : Condition SI ==> Regroupez des pays selon un Code


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR