midoparis
Messages postés18Date d'inscriptionlundi 11 février 2008StatutMembreDernière intervention22 janvier 2009
-
19 mai 2008 à 17:17
midoparis
Messages postés18Date d'inscriptionlundi 11 février 2008StatutMembreDernière intervention22 janvier 2009
-
20 mai 2008 à 16:38
Bonjour à tous !
Je dois mettre en place un système pseudo intelligent, et je vais essayer de vous expliquer au mieux la situation pour avoir les conseils les plus avisés des meilleurs d'entre vous ;)
Situation :
J'ai un tableau excel, quelques colonnes, plusieurs lignes (5000).
Dans la premiere ligne, il y a le nom de plusieurs champs (identifiant, nom, diplome obtenu)
Dans les autres lignes, il y a des valeurs.
Probleme :
Une seule personne peut avoir plusieurs diplomes. Donc pour un meme identifiant on peut avoir plusieurs lignes.
De plus, la colonne diplome peut parfois changer. Il faudrait donc que l'utilisateur choisisse quelle est la colonne de comparaison via un userform + listbox.
Objectifs :
1 - Recuperer la colonne a traiter
2 - Repérer les lignes en double,
3 - Comparer les diplomes,
4 - Repérer le diplome le plus élevé,
5 - Supprimer les autres lignes.
Etape 1 :
pas de souci, je récupere la valeur dans une variable globale, comme ça je la réutilise quand je veux.
Etape 2 :
pas de souci non plus.
Je trie le tableau sur la colonne sélectionnée. Je parcours le fichier et j'écris à la droite du tableau deux nouvelles colonnes : une avec les identifiants, et une avec le nombre de diplome de chaque identifiant.
Je peux ainsi savoir où sont les blocs de la meme personne (avec autant de lignes que de diplomes obtenus).
Etape 3, 4 et 5 :
ça commence a devenir dur...
Ce que je me dis, c'est qu'il faudrait que je fasse la liste de tous les diplomes présents, en attribuant un chiffre à chaque diplome. Ensuite, lorsqu'il tombe sur un bloc d'au moins 2 lignes, il recopie ailleurs le morceau de colonnes correspondant aux diplomes, il remplace chaque intitulé par un chiffre, il voit qui est le plus grand, il retourne le numero de ligne du diplome le plus grand, ce qui nous donne la ligne contenant le diplome le plus grand, il recopie cette ligne dans un autre onglet, et il passe au bloc suivant.
Mon gros problème est "Comment faire ce système pseudo intelligent qui va a partir d'une liste de mots, leur attribuer un nombre selon une table précise, puis me retourner le numero de la ligne la plus élevée pour que je traite cette ligne?
midoparis
Messages postés18Date d'inscriptionlundi 11 février 2008StatutMembreDernière intervention22 janvier 2009 20 mai 2008 à 16:38
en fait, c'est pas tout à fait ça, mais j'ai réussi !!
Dans mon fichier, j'ai la liste des noms et de leur diplome. Et j'ai une ligne par personne par diplome.
Et mon but est de ne conserver QUE la ligne contenant le meilleur diplome, sachant que les diplomes sont ecrits sous forme de texte.
En fait ce que j'ai fait (pour ceux qui souhaitent le savoir..), j'ai fait un fichier excel où j'ai noté la liste des diplome possible, et a coté une note (plus la note est grande, meilleur est le diplome) .
Quand je prends mon fichier, je fais reconnaitre à Excel, les blocs de chaque personne, et pour chaque bloc, il fait le meme traitement :
- s'il y a un seul diplome tu colle la ligne dans l'onglet final sinon :
-tu copie les diplomes dans un onglet temporaire
-tu fais "recherchev" dans le fichier de reference et tu rapatrie les notes de chacun
-tu change tous les #N/A en 0
-tu regarde quelle est la meilleure note
-tu refais une boucle et :
- dès que la note est egale au maximum ou a 0, tu copie la ligne equivalente au fichier initial dans le fichier final, et tu reviens dans le fichier temporaire
-tu passe au bloc d'apres
a la fin, j'obtiens mon nouvel onglet, avec les meilleurs diplomes uniquement de chaque personne, ainsi que les diplomes non presents dans la liste (pour ne rien oublier).
en tout cas merci d'avoir pris le temps de me repondre :)