Je ne trouve pas de solutions

J

Julien

Guest
Bonjour,

Voilà un problème que je rencontre et auquel je ne trouve pas de solutions. Je vais essayer d'être clair dans mon explication même si cela ne va pas être facile. N'hésitez donc pas à me demander de plus amples informations si vous voulez bien essayer de m'aider.

Voilà, J'ai un fichier avec un tableau du genre :

Ref Fournisseur Fournisseur Consommation
A ? ?
B ? ?
C ? ?
D ? ?
.........

Et un autre du genre :

Ref Fournisseur
A Allo
A Bonjour
A Merci
B Allo
B Bonjour
C Allo
D Allo
D Bonjour

En fait il y a plusieurs fournisseurs possibles pour une référence. Je voudrais qu' à partir du 2eme fichier, l'ordi renvoi le ou les fournisseur(s) dans le 1er fichier et sii il y en a plusieurs, qu'il les mette sur des colonnes différentes (à la place des points d'intéroggation)

Merci de votre aide
 
M

michel

Guest
bonsoir Julien

j'ai préparé un fichier qui correspondra peut etre à ta demande

bonne soirée
Michel
 

Pièces jointes

  • tri.zip
    8.2 KB · Affichages: 14
  • tri.zip
    8.2 KB · Affichages: 14
  • tri.zip
    8.2 KB · Affichages: 14
M

manuel

Guest
bonsoir à tous ,

Michel,
sensas comme solution !
Je suppose que le principe peut s'appliquer pour émuler des recherches verticales que je trouve trop longues sur de gros fichiers.
Aurais-tu des idées à ce sujet ?
Pour ma part, je copiais la colonne "article" sur la base de donnée ainsi qu'un index, puis je triais sur l'article, je filtrais sur l'index non-vide, reccupérais les infos par un traitement logique, puis je copiais le resultat sur la plage voulu. (Je reccupère plusieurs colonnes a la fois ! )
l'inconveniant c'est que c' un peu lourding!!!
Je ne peux pas le faire par une fonction et une macro doit etre retoucher à chaque fois ( biensur , je devrais me plonger sur les imput box ).
je me suis demandais si c'était possible de le faire par tableau .
Mais vu ta solution je me demande si cela vaut la peine !!!
ciao !
 
M

michel

Guest
Bonjour Julien

Je vais essayer de répondre à ta question . Que les puristes m'excusent par avance ..... pour la "lourdeur" de la procédure …ainsi que des explications …


y = Cells(i, 4).Value

le principe de saisie est : Cells (ligne , colonne )
Le 4 correspond donc à la 4eme colonne(D) de la feuille
Le "i" correspond a une variable indiquant le numero de ligne dans la feuille : combiné avec l'instruction FOR de 2 à 5 , cela permet de balayer la plage ("D2:D5") ,


z = Cells(i, 100).Address

Le but du fichier "tri" est d'incrémenter les différents fournisseurs d'une reference sur la même ligne . Quand une valeur est trouvée , il faut donc l'inscrire dans le tableau de résultat , dans la première cellule vide à droite des références (A,B,C…)
Pour trouver cette cellule vide :
Toujours sur le principe Cells (ligne , colonne ) , le 100 permet de sélectionner la 100eme colonne de la feuille : le 100 est une valeur choisie au hasard , assez éloignée du tableau de résultat , pour qu'il n'y ai pas de risque que cette colonne contienne une valeur de résultat ,
Ensuite la combinaison avec :
End(xlToLeft)) ( retour sur la gauche jusqu'à trouver la derniere cellule non vide ) et
Offset(0, 1) ( decalage d'une cellule sur la droite)
permet de trouver la cellule vide et d'y inscrire un nom de fournisseur


Cela fait beaucoup d'allers retour pour trouver une cellule vide . Il existe certainement des procédures plus "légères" , mais je ne les connais pas

je ne suis pas sur d'avoir été très clair dans mon explication . n'hésites pas à poser d'autres questions si nécessaire

bonne soirée
Michel
 
J

Julien

Guest
Je te remercie pour ta réponse. Malgré ce que tu as l'air de penser, je la trouve très claire.
Il ne me reste plus qu'à la tester.
Je te tiendrai au courant si cela ne marche pas.
Le problème que je rencontre avec ce genre de formule, c'est la lourdeur et la longueur de l'opération. Mon fichier étant important (17 000 lignes), la macro met énormément de temps à se réaliser.
Mercie encore et à bientôt peut être. Je pose régulièrement des questions sur le forum.
Bonne journée et bonne semaine.
 
M

manuel

Guest
Bonsoir à tous,

Julien, il me semble que l'on peut réduire le temps d'exécution de la macro de Michel en évitant que la boucle balaient la totalité des fichiers à chaque fois.
Chez mois je réduis le temps par trois ( par contre la macro dois trier au départ les fichiers impérativement s'ils ne le sont déjà ..).
J'espère que cela marchera pour toi.

En attendant mieux ,
xcelment vôtre
 

Pièces jointes

  • tri.zip
    11.2 KB · Affichages: 13
  • tri.zip
    11.2 KB · Affichages: 16
  • tri.zip
    11.2 KB · Affichages: 12

Discussions similaires

Statistiques des forums

Discussions
313 030
Messages
2 094 571
Membres
106 054
dernier inscrit
Mohajer