XL 2016 Transco avec multiples conditions

KH94

XLDnaute Nouveau
Bonjour à tous,

NB: Avant tout, je tiens à notifier que cette base est une base d'exemple pris sur un site d'exercice Access ( bonbache.fr)

Je suis nouveau dans le développement VBA ainsi que sur ce forum.

J'au un problème sur une correspondance multiples variables.

Je dispose de deux fichiers dans un même classeur.

le premier fichier est une base de données volumineux ( 50 000 lignes environ) avec les variables suivantes en tête de colonne ( Civilité, nom, prénom, nb. enfant, aides, code_id(que je veux remplir), ville).

le second fichier ne dispose que de quelques lignes avec comme entête de colonne: civilité, aides, ville, code_id ( ici les code sont déjà prédéfinit).

le problème: je dois vérifier chaque ligne du premier fichier (base de données) et si sur une ligne la civilité, aides et ville correspondent exactement à une ligne du second fichier (fichier de référence), je dois attribuer dans la session code_id de la ligne du premier fichier le code_id du second fichier.

honnêtement, je ne sais pas où commencer sous VBA.
 

Pièces jointes

  • TABLE POUR TRANSCO.xlsx
    13.1 KB · Affichages: 5

mapomme

XLDnaute Barbatruc
Supporter XLD
@sylvanu ;)

Cela s'explique par le fait que le tableau Transco est très petit dans le cas de ton exemple (18 lignes)
La double boucle sur la base et sur Transco comprend en moyenne 50 000 fois 9 lignes soit 450 000 passages.

Si on passe Transco à 300 lignes, le nombre moyen de passage devient 50 000 fois 150 soit 7 500 000 passages.

On voit que la méthode de la double boucle va très vite augmenter en durée en fonction du nombre de lignes de Transco.

La méthode par Dico augmente beaucoup moins vite car le temps d'accès au dico est à peu près constant mais surtout on n'a qu'une seule boucle à parcourir.

Comme toujours, les méthodes de recherche ou de tri dépendent non seulement de la méthode choisie mais aussi de la répartition des données initiales et de leur quantité.

Dans le fichier joint (j'ai repris ton fichier), on exécute les deux méthodes une fois avec un Transco à 18 lignes et une autre fois avec un Transco à 300 lignes. Les résultats sont les suivants:

____________________ 18 lignes ________________________________ 300 lignes

1641488484034.png
 

Pièces jointes

  • KH94- TABLE POUR TRANSCO- v2 (test).xlsb
    31.7 KB · Affichages: 2
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Re,

est possible de mettre en rouge les ligne qui n'ont pas été transcodées dans la base de données? histoire de de ne pas fouiller dans toute la base....
Voir le fichier v3 joint.

On pourrait aussi appliquer un filtre automatique. En ne filtrant sur les cellules vides de la colonne G, on obtient toutes les lignes en cause en un seul bloc.

nota: ne pas oublier dans le fichier joint d'adapter les deux constantes à votre cas particulier.
 

Pièces jointes

  • KH94- TABLE POUR TRANSCO- v3.xlsm
    26.9 KB · Affichages: 4

KH94

XLDnaute Nouveau
Bonsoir a tous!

Je reviens encore avec mon problème de Correspondance.

j'ai essayé des deux méthode sur ma base de donnée et cela ne marche pas. j'ai donc essayé sur une autre base de données et j'ai toujours le meme problème.

Lorsque j'utilise la methode de dictionaire proposée par @mapomme j'obtiens #N/A dans la colonne de destination. quant à la methode proposée par @sylvanu on ne me signale pas d'erreur mais je n'obtient rien dans la colonne de correspondance.


dans ce fichier je regarde les variables Car, Cylinders, departement, model, origin pour attribuer identifiantID qui est dans la table de transco.


Vous trouverer ci-joint les deux methodes dans deux fichiers distinctes avec le fichier de transco

encore desolé pour ma demande excessive

vbadictionary_Option.PNG
 

Pièces jointes

  • data_Base_Array_Sylvanu.xlsm
    118.3 KB · Affichages: 1
  • identifiant.xlsx
    22.4 KB · Affichages: 6
  • data_Base_Dictionary_Mapomme.xlsm
    239.8 KB · Affichages: 3

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour KH, Mapomme,
Dans votre fichier data_Base_Array, les colonnes B et G ne contiennent pas des nombres mais des chaines de caractères.
En PJ je convertis ces deux colonnes en nombres avant la recherche avec :
VB:
If Val(Transco(j, 2)) = Val(cy) Then
et
If Val(Transco(j, 4)) = Val(Moder) Then
J'ai mis les deux en Val au cas où un jour le même problème se pose sur le fichier Identifiant.
Cela provient probablement de l'importation.
 

Pièces jointes

  • data_Base_Array_Sylvanu.xlsm
    142.8 KB · Affichages: 4
Dernière édition:

KH94

XLDnaute Nouveau
Bonjour KH, Mapomme,
Dans votre fichier data_Base_Array, les colonnes B et G ne contiennent pas des nombres mais des chaines de caractères.
En PJ je convertis ces deux colonnes en nombres avant la recherche avec :
VB:
If Val(Transco(j, 2)) = Val(cy) Then
et
If Val(Transco(j, 4)) = Val(Moder) Then
J'ai mis les deux en Val au cas où un jour le même problème se pose sur le fichier Identifiant.
Cela provient probablement de l'importation.
Bonjour @sylvanu :)

Encore merci pour ta spontanéité.🤩

Une question concrète, si dans mes variables tout est que du texte avec parfois des caractères spéciaux, seul le code à attribuer est numérique, comment dois-je procéder car malgré ta correction, je demeure toujours au point d'hier: mes résultats ne s'affichent pas

Moi même je commence à être gêner de ma demande....😪🥴🥴
 

KH94

XLDnaute Nouveau
Bon @sylvanu j'ai réfléchi un peu et voici ce que j'ai pu faire:

les éléments en commun: Voiture; Type de design; Capitale de Contrôle; Continent / Pays ; Kilométrage.

Si ces éléments sont identique dans la base et dans le ID_CODE alors je créer une colonne dans la base du nom de Identifiant qui copie l'identifiant correspondant dans la feuille ID_CODE dans la colonne Identifiant. Si possible que le code soit dans le classeur de ID_CODE ou dans un nouveau classeur

Merci encore.
 

Pièces jointes

  • BASE.xlsx
    19.5 KB · Affichages: 1
  • ID_CODE.xlsx
    19.1 KB · Affichages: 1

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
315 087
Messages
2 116 084
Membres
112 655
dernier inscrit
fannycordi