CODE VBA très complexe

Bonjour à tous,

J'ai une demande très complexe à vous demander.

Je souhaite avoir un code VBA qui recherche une correspondance de nombre, je m'explique:

J'ai un fichier qui s'appel "CODE POUR VBA"
Dans ce fichier j'ai 10 tableaux voir en PJ
Ensuite, j'ai d'autres fichiers qui se trouve dans un dossier que je vais appeler "DOSSIER DE DESTINATION".
Les fichiers sont de mises en formes identiques voir en PJ (les fichier s'appel classeur1, classeur2, classeur3 etc...)
J'aimerais que le code VBA me trouve une correspondance pour les nombres qui se trouve dans mes tableaux avec les colonnes qui sont dans mon dossier DESTINATION.
exemple:
Dans mon dossier DESTINATION, les fichiers ont beaucoup de colonnes, chaque colonne contient beaucoup de lignes, Ligne 21 a 30 mais je vais vous faire mes explications jusqu'à la ligne 24 et se sera pareil pour les lignes à suivre.

J'aimerais trouver les correspondances du premier tableau, et j'aimerais la trouver dans la ligne 21 de mon dossier
Ensuite, trouver les correspondances du deuxième tableau, dans la ligne 22

Ensuite, trouver les correspondances du troisième tableau, dans la ligne 23
Ensuite, trouver les correspondances du quatrième tableau, dans la ligne 24

Et lorsque la colonne a été trouvée, il ne doit plus chercher le nombre de la colonne qu'il a trouvé mais les autres colonnes, donc à ce moment il ne restera que 4 colonnes à trouver.

Exemple:
Dans une feuille de un de mes fichier excel j'ai une colonne avec ses nombres:

ligne 21 : 3

ligne 22 : 26

ligne 23 : 13

ligne 24 : 3

Chaque nombre est dans les colonnes de mes 4 premiers tableaux (pour cette exemple mais faudra le faire pour les 10 tableaux) donc, le code doit mettre dans un nouveau fichier la colonne entière de ce qu'il a trouvé.

Ensuite, il fait la même recherche dans mes fichiers mais on exclu:

- la 1ere colonne du premier tableau car le 3 a été trouvé cela veut dire qu'on a plus besoin de cette colonne c'est à dire que le script va exclure les numéros qui se trouve dans la colonne ou il y a un 3: il exclut donc les numéros 22 - 25 - 3

- la 3ème colonne du deuxième tableau car le 26 a été trouvé cela veut dire qu'on a plus besoin de cette colonne c'est à dire que le script va exclure les numéros qui se trouve dans la colonne ou il y a un 26: il exclut les numéros 19 - 26 - 4

- la 2ème colonne du troisième tableau car le 13 a été trouvé cela veut dire qu'on a plus besoin de cette colonne c'est à dire que le script va exclure les numéros qui se trouve dans la colonne ou il y a un 13: il exclut les numéros 14 - 39 - 13

- la 5ème colonne du quatrième tableau car le 3 a été trouvé cela veut dire qu'on a plus besoin de cette colonne c'est à dire que le script va exclure les numéros qui se trouve dans la colonne ou il y a un 3: il exclut les numéros 3 - 52 - 25

Donc il va rechercher:

- Un nombre dans les colonnes 2, 3, 4, 5 pour le 1er tableau c'est à dire 17 - 30 - 8 - 14 - 33 - 11 - 11 - 36 - 14 - 7 - 40 - 18

- Un nombre dans les colonnes 1, 2, 4, 5 pour le 2ème tableau c'est à dire 21 - 23 - 2 - 20 - 25 - 3 - 7 - 40 - 16 - 1 - 63 - 22

- Un nombre dans les colonnes 1, 3, 4, 5 pour le 3ème tableau c'est à dire 21 - 32 - 6 - 9 - 44 - 18 - 8 - 45 - 19 - 6 - 47 - 21

- Un nombre dans les colonnes 1, 2, 3, 4 pour le 4ème tableau c'est à dire 27 - 16 - 1 - 17 - 30 - 11 - 15 - 32 - 13 - 12 - 35 - 16

Et ainsi de suite.

Dans la logique il faudrait que le fichier final n'est que 5 colonnes.

Il faut savoir:

- qu'il n'y a pas d'ordre de recherche dans les tableaux.
- que si les nombres exact ne sont pas trouvés dans tous les fichiers, alors le script doit recherché la colonne qui se rapproche le plus du bon nombre dans la colonne et mettre en rouge le nombre qui n'est pas dans le tableau. Exemple:

Le script a trouvé 4 colonnes avec les bon numéros:
Première colonne trouvé:

ligne 21 : 3

ligne 22 : 26

ligne 23 : 13

ligne 24 : 3

Deuxième colonne trouvé:

ligne 21 : 7

ligne 22 : 7

ligne 23 : 9

ligne 24 : 1

Troisième colonne trouvé:

ligne 21 : 17

ligne 22 : 21

ligne 23 : 6

ligne 24 : 15

Quatrième colonne:

ligne 21 : 36

ligne 22 : 25

ligne 23 : 45

ligne 24 : 30

Pour trouver la cinquième colonne, si tous les numéros ne correspondent pas au tableau il extrait la colonne qui y ressemble le plus exemple:

ligne 21 : 33

ligne 22 : 22

ligne 23 : 32

ligne 24 : 1

Le 1 ne correspond pas à un des numéros restant dans le 4ème tableau, donc il est mis en rouge dans le nouveau fichier, mais il y a 3 numéro des tableau sur 4 qui ont été trouvé donc c'est celui qui se rapproche le plus.

C'est pour ça qu'il ne faut trouver que 5 colonnes c'est très important, c'est beaucoup de recherche mais c'est très important qu'il ne faut que 5 colonnes pour le résultat final.

Le nouveau fichier doit être créé au moment du lancement du code, et il doit être ouvert pour que ce soit moi qui l'enregistre dans le bon dossier.

Et dernière petite chose, ce sont de gros fichiers, donc si le code pouvez s'exécuter le plus rapidement possible ce serait le top.

J'espère que vous avez pu comprendre ce que je demande, n'hésitez pas à me poser des questions pour plus de renseignement.

C'est quelque chose de complexe je sais mais c'est pour mon travail, je vous remercie pour l'aide que vous allez m'apporter

7code-pour-vba.xlsx (11.97 Ko)
13classeur-1.zip (780.03 Ko)
2classeur-2.zip (535.82 Ko)
1classeur3.zip (611.71 Ko)
2classeur4.zip (488.99 Ko)

Salut Lilie,

Je présume que tes longues explications pas très claires en ont découragé plus d'un. Je pense qu'il vaut mieux y aller par étape.

Peux-tu donner un seul exemple concret, en indiquant - par des couleurs de fonds par exemple - quels chiffres sont traitées et comment ils sont trouvés dans tes fichiers de destination (en précisant lequel et en y mettant également des couleurs de fonds ou autre) ?

Ai-je bien compris que tu cherches d'abord une correspondance dans le premier fichier de destination, puis dans le second, etc. ? Si non, dans quel dossier de destination doivent être recherchées les données à traiter ?

Cordialement.

Bonjour Yvouille,

Merci de m'avoir répondu car tu as tout à fait raison, longues explications pour finalement ne rien comprendre

Je vais expliquer étape par étape en renseignant mieux les tableaux pour que tout le monde puisse comprendre.

- J'ai un fichier avec 10 tableaux, et tous les numéros de chaque tableau correspond à un article voir le fichier "Article", et chaque colonne de ce tableau correspond à une référence.

- J'ai un autre fichier qui s'appelle "classeur 2", dans ce fichier, j'ai pour chaque colonnes écrit "A B C D E F G H I J", se sont les noms des locaux ou je stocks mes articles.

Mais dans ce fichier j'ai beaucoup de nombre, y 'en a qui ne servent à rien, mais y'en a que je vais devoir extraire pour pouvoir faire un panier à la fin de la semaine.

1ère étape:

J'aimerais trouver une colonne dans le fichier classeur 2, qui correspondrait pour chaque ligne à un numéro qui se trouve dans chaque tableau exemple

- Pour la ligne 21, je voudrais que la colonne est comme numéro une valeur qui se trouve dans le premier tableau du fichier Article et qui correspond à "Vis"

- Pour la ligne 22, je voudrais que la colonne est comme numéro une valeur qui se trouve dans le premier tableau du fichier Article et qui correspond à "Tournevis"

- Pour la ligne 23, je voudrais que la colonne est comme numéro une valeur qui se trouve dans le premier tableau du fichier Article et qui correspond à "Clou"

- Pour la ligne 24, je voudrais que la colonne est comme numéro une valeur qui se trouve dans le premier tableau du fichier Article et qui correspond à "Marteau"

et ainsi de suite... jusqu'à la ligne 30.

Est ce que c'est plus compréhensible comme ça pour la première étape?

Merci encore pour votre aide

3article.xlsx (12.16 Ko)
2classeur-2.zip (530.59 Ko)

................

1ère étape:

J'aimerais trouver une colonne dans le fichier classeur 2, qui correspondrait pour chaque ligne à un numéro qui se trouve dans chaque tableau exemple

- Pour la ligne 21, je voudrais que la colonne est comme numéro une valeur qui se trouve dans le premier tableau du fichier Article et qui correspond à "Vis"

Dans ton classeur 2 tu as plusieurs feuilles. Comment savoir laquelle choisir ?

Pour la ligne 21, inscrits s'il-te-plait manuellement à l'endroit souhaité le résultat souhaité - que tu marqueras en jaune - et indique comment tu es arrivé à ce résultat, en marquant par exemple les données qui ont été nécessaires à trouver ce résultat en vert.

Amicalement.

Yvouille,

Il faut rechercher la colonne dans toutes les feuilles du classeur 2.

Je vais te créer un fichier qui pourrait correspondre à ce que je recherche, parcontre je ne recherche pas qu' un resultat sur la ligne 21, je recherche une colonne entière.

Tu verras le fichier en PJ,

Ce qui est écrit en rouge c'est juste des indications pour vous aider.

bonjour Lilie3887, Yvouille,

c'est quoi la différence entre cette questions et vos autres questions ? On cherche d'une autre manière que MaFraise et le reste ?

Je ne comprends pas les résultats dans "Résultat-souhaits". Donc, la 21eme ligne + 18eme colonne (=R18) d'une des 4 feuilles de classeur-2 contient un des 15 chiffres de "Vis", c'est ça ?

En premier vue, seulement 39, 44, 45 et 47 se trouvent dans ces lignes 21 et apparament c'est le "39" avec son 3eme occurence dans ligne 21 de feuille 1. Mais on a 408 fois ce chiffre "39" dans cette ligne&feuille, donc ce 18 est assez aléatoire ?

image

BsAlv,

Je t’ai déjà dit à plusieurs reprises que les Grands Noms de ce Forum n’interviennent sur un fil déjà entamé que si on leur demande de l’aide.

Tu sembles ne pas vouloir comprendre cela ou simplement vouloir m’embêter gratuitement.

Je te cède donc la place sur ce fil et vais prendre en charge une autre personne qui a besoin d’aide.

Bonjour Lilie,

J’aurais volontiers continué à vous aider, sans l’intervention de BsAlv.

Cordialement.

Bonjour Yvouille, Bonjour BsAlv,

J'espère que vous allez bien?

Tout d'abord je vous remercie de votre aide et je veux vous dire que tout aide est la bienvenue

Je pense qu'on va y aller vraiment petit à petit:

Je pense qu'on va commencer par la première étape.

j'ai un tableau "vis" dans mon fichier "Article".

Ce tableau comprend 5 références et chaque référence correspond à 3 nombres.

J'ai un autre fichier qui correspond au résultats que chaque sites m'ont envoyé.

L'extrait de un de ses fichiers est "classeur 1" et "classeur 2".

Est ce que je peux avoir un code VBA qui me créé une nouvelle feuille ensuite, il recherche dans la ligne 21 des classeurs, une seule valeur de chaque référence du tableau "Vis", et enfin il me colle les colonnes entière dans la nouvelle feuille, mais la nouvelle feuille il l'a laisse ouverte car je veux moi même l'enregistrer manuellement?

Je vous joins les fichiers et vous remercie encore pour votre aide

1classeur-1.zip (129.04 Ko)
1classeur-2.zip (122.61 Ko)
1article.xlsx (10.61 Ko)

bonjour Lilie3887,

je peux vous donner 10.500 colonnes pour ces 5x3 référence * nombres. Voir PJ, colonne AA = référence, colonne AB =fichier, colonne AC = feuille, colonne AD = colonne dans cette feuille (en ligne 21), colonne AE = index

Il vous reste donc un choix de 5 (1 pour chaque couleur) ou 15 colonnes (aleatoire ???) de ces 10.500 ?

Supposons que je prends le premier (= les données de AA3), donc pour la valeur "21" la colonne 11 (=K) de la 2eme feuille de classeur-1. Je copie K21:K29 vers une nouvelle feuille et je supprime cette plage ? C'est quoi la différence avec vos questions précédentes ? (seulement augmenter la vitesse ? C'est combien pour le moment ?)

4article-1.xlsb (113.84 Ko)

Re BsAlv,

Comme je n'arrive pas à expliquer ce que je veux (mais dans ma tête c'est très clair) je veux le faire étape par étape.

Pour l'instant c'est 5 colonnes entière s que je veux que se soit copié et coller vers la nouveau fichier que le code va créer. donc on ne supprime rien des fichier classeurs.

Ensuite je veux qu'il me sort 5 colonnes de référence différente, n'importe qu'elle valeur qui se trouve dans la référence.

Je sais pas si j'ai été clair

re,

C'est quoi la différence avec ce que MaFraise et autres ont fait ?

Bon, on ne crée pas encore un nouveau fichier, mais une nouvelle feuille et je ne comprends pas ce que vous voulez. Donc dans cette nouvelle feuille, je vous montre en 7 colonnes ce que je sais à ce moment.

10article-1.xlsb (28.43 Ko)

Re,

Ce que MaFraise a fait, c'était d'autre demande, c'était la demande de coloré des cellules, de copier des lignes dans d'autre fichier etc...

Ce que tu m'as extrait c'est top c'est exactement ça que je voulais pour la première étape.

Maintenant, je rajoute un autre tableau dans mon fichier "Article". J'ai rajouté le tableau "Tournevis" (Voir fichier joint)

Et dans mes fichiers classeurs J'ai rajouté la ligne 22 (Voir fichier joint)

J'aimerais avoir 5 colonnes qui contiennent les valeurs qui correspondent à la fois aux tableau "Vis" pour la ligne 21 et "Tournevis" pour la ligne 22. Mais la recherche se fera toujours par Reference, par contre les valeurs des références peuvent être trouvé dans le désordre (Voir exemple dans le fichier "Resultat souhaité"

2article.xlsx (10.58 Ko)
2classeur-1.zip (203.89 Ko)
2classeur-2.zip (177.01 Ko)

re,

je ne comprends pas ce que vous dites, mais ici mon interprétation.

4article-1.xlsb (30.66 Ko)

Dites moi ce que vous ne comprenez pas pour que j'essaye de vous expliquer svp?

Et le fichier que vous m'avez envoyé me donne les résultats que je veux. Franchement merci, donc maintenant allons à l'étape suivante s'il vous plaît?

Pouvez-vous me le faire pour ses 5 tableaux en même temps s'il vous plaît?

Comme vous pouvez le voir chaque tableau correspond à une ligne dans les fichiers classeurs.

Et n'oubliez pas que les valeurs des références peuvent être trouvé dans le désordre (voir le fichier du "resultat souhaité)

3article.xlsx (11.39 Ko)
5classeur-1.zip (419.14 Ko)
5classeur-2.zip (304.71 Ko)

re,

il n'y a qu'un seul match, pour ref 2, j'avais ajouter ces chiffres jaunes au bout de la 4eme feuille de classeur-2, donc les 4 autres sont ces chiffres.

4article-1.xlsb (34.51 Ko)

Re BsAlv,

Merci c'est super

Maintenant, je vais rajouter dans les fichiers les 5 autres tableaux, et je pense que la il y aura un problème, se sera très difficile d'avoir les 5 bonnes colonnes de la même Ref pour chaque colonne, c'est pour cela que faudrait modifier le code, en faisant en sorte qu'il n'y ai pas qu'une seule "Ref" pour toute une colonne.

De plus je pense aussi qu'il y aura une autre difficulté, c'est que si il n'arrive pas à trouver les 5 colonnes avec les valeurs inscrit dans le tableau, alors il faudra une colonne avec le plus grand nombre possible des valeurs qui doit être trouvé, et me mettre en rouge la valeur qui n'est pas dans le tableau.

Je vous remercie beaucoup

1article.xlsx (12.05 Ko)
5classeur-1.zip (780.70 Ko)
4classeur-2.zip (536.51 Ko)

cela n'est pas evident, je dois créer une formule plus courte que 255 charactères qui fait tout cela

c'est pour cela que faudrait modifier le code, en faisant en sorte qu'il n'y ai pas qu'une seule "Ref" pour toute une colonne.

çà, je ne comprends pas.

Et puis, quand cela ne réussit pas avec 5, il faut essayer avec 4,3,2,1... ? Le nombre de combinaisons à vérifier commence à exploder.

Re BsAlv,

c'est pour cela que faudrait modifier le code, en faisant en sorte qu'il n'y ai pas qu'une seule "Ref" pour toute une colonne.

C'est à dire que le code peut trouver une colonne ou la ligne 21 peut correspondre à une des valeurs de la Ref2.

La ligne 22 peut correspondre à une valeur de la Ref5.

La ligne 23 peut correspondre à une valeur de la Ref4

La ligne 24 peut correspondre à une valeur de la Ref5

La ligne 25 peut correspondre à une valeur de la Ref3

La ligne 26 peut correspondre à une valeur de la Ref3

Et ainsi de suite... ceci est un exemple

Re BsAlv,

J'ai essayé le code que vous m'avez envoyé en dernier, le code avec 5 tableaux.

Mais avec moi ça ne fonctionne pas, peut-être que je m'y prends mal

re,

je le fais d'une autre manière, j'ouvre ces 2 classeurs et je copie& colle ces lignes 21-30 vers la feuille "Filtres" dans un tableau structuré. Au dessus ce tableau ce trouvent le chiffres de la feuille "Feuil1" que vous voulez utiliser. Maintenant je commence à filtrer le tableau avec plusieurs méthodes :

  • avec chaque réf individuelle, donc on commence avec Ref1, si cela n'a pas un résultat, avec Ref2, ...
  • puis j'utilise les chiffres de tous le refs ensemble (ligne 6 = non trié, non unique, ligne 7 = unique et trié)
  • puis si cela ne fonctionnait pas, j'oublie à filtrer une colonne, donc je ne filtre pas la colonne "Vis" mais les 9 autres oui. Puis "Tournavis" non et 9 autres oui.
  • Puis je le fais avec 2 colonnes non-filtrées + 8 colonnes filtrées.
  • Puis 3+7 (et pas encore programmé 4+6, 5+5, 6+4, 7+3,...)

Bon, j'avais un match avec ces colonnes non-filtrées et donc si "cahier+agenda+classeur" contient les chiffre "15+21+13", j'avais un résultat.

Ce n'est pas ce que vous me demandiez, mais que pensez-vous ? Cela vous aide ?

3article-1.xlsb (44.23 Ko)
Rechercher des sujets similaires à "code vba tres complexe"