Correspondance de colonne

jhlamoustache

XLDnaute Occasionnel
Bonjour à tous

Issu d'une conversation:

Bonjour Dranreb,

je dois développer une procédure qui mettra à jour une feuille (Destination) mensuellement environ à partir de données extraites sur une autre feuille (Source). L'utilisateur ordonnera ses colonnes comme il le souhaite. Pour développer mon code, j'ai l'habitude d'utiliser des tableaux. Je me dois donc de trouver une procédure qui permette de de faire correspondre le champs de la feuille Source avec ceux de la feuilles destination. De plus je ne suis pas sûr qu'au fil du temps l'ordonnancement des champs de la feuille Source soit toujours le même. J'ai lu qu'il fallait utiliser un dictionnaire, et faire du "mapping", mais je ne sais pas bien comment m'y prendre. Pourriez-vous m'aider svp ?

Ce à quoi Dranreb a répondu.

Si la source est sous forme de tableau les ListColumn du ListObject qui le représente on pour identifications les titres des colonnes, et pas besoin de mapping.
Sinon :
Code (Visual Basic):
Dim DicTit As New Dictionary, TTit(), C As Long
TTit = ActiveSheet.[A1:Z1].Value
For C = 1 To 26
DicTit(TTit(1, C)) = C
Next C

J'ai donc adapté le code, mais je ne vois pas comment je vais modifier les valeurs (jaunes sur Excel) au bon endroit dans le tableau TabD avant de le recoller sur la feuille "Destination"
NB : En principe je devrai passer par un tableau transposé pour ajouter les nouvelles lignes.
Merci de votre aide
 

Pièces jointes

  • Suivi trajets.xlsm
    19.5 KB · Affichages: 23

jhlamoustache

XLDnaute Occasionnel
Bonjour, je suis de retour.
Je reprends le développement qui était en pause.
J'ai testé la solution de JOB75, mai ce n'est pas conforme. Cependant on n'en est pas loin. Cf l'onglet résultat JOB 75.
Pour les doubles lignes ce n'est pas possible.
A suivre
 

Pièces jointes

  • Suivi trajets.xlsm
    28.7 KB · Affichages: 10

jhlamoustache

XLDnaute Occasionnel
Bonjour Job, Bernard,

Oui. Dans l'onglet destination, une fois que l'importation aura été effectuée, l'utilisateur dispose de colonnes supplémentaires pour enregistrer son analyse, enregistrer des décisions, confier des tâches (à qui, échéance...), assurer un suivi, clôturer...
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Je ne comprends pas que ce problème ne soit pas encore résolu.
Vous critiquiez des colonnes fixes des deux cotés, dans DétDst c'est normal non ? Mais dans DétMvt aussi puisque la 1ère partie du traitement les y met, justement, comme dans DétDst à partir des colonnes sources où les titres on été trouvés ! Parce que c'est plus facile après de raisonner sur deux sources à comparer ayant la même structure. Je crois que vous n'aviez pas compris ça …
 
Dernière édition:

jhlamoustache

XLDnaute Occasionnel
Oui, c'est bien le code du post #7 que j'utilise.
Il n'y a que pour le voyage 1 que l'ancienne arrivée a été reportée. Pour le voyage 2 l'ancienne ville de départ (Albi) n'est pas renvoyée. De plus les colonnes de 1 à 4 correspondent (alors qu'elles ne sont pas au même endroit entre Source et Destination) , mais les autres sont redistribuées. Le résultat attendu figure ligne 1 à 6. Je suis perplexe...
 

Pièces jointes

  • Suivi trajets.xlsm
    32.7 KB · Affichages: 2

Dranreb

XLDnaute Barbatruc
Oui, on dirait que 7 et 8 doivent être transformé 8 et 9, parce que la 7 c'est une date, pas la ville de départ dans la feuille "Destination" actuelle, qui n'est pas modifiée pour l'instant, pour les tests.
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Revérifiez la structure de la feuille Destination, qui sert de base, et qui ne devrrait plus bouger, n'est ce pas ? Parce que dans les autres feuilles vous avez mis un peu n'importe quoi par rapport à ça, actuellement.
Remarque: ce serait plus simples si les anciennes valeurs était mises bout à bout à droite des valeurs à jour, puisque vous ne voulez pas de ligne au dessus, grisée ou autre pour bien montrer qu'elle n'est plus d'actualité, voire masquable facilement.
 

jhlamoustache

XLDnaute Occasionnel
Rectification : les colonnes de mes résultats Feuill3 ne sont pas ordonnés comme Feuill1. Donc l'ordonnancement des colonnes résultat de votre code est conforme. Par contre je vais modifier dans le code pour que les tests portent sur les bonnes colonnes.

Au passage, de manière générique, toutes colonnes de destination qui n'a pas de correspondance dans Source doit être devra être évaluée avec l'ancienne valeur à gauche. Je ferai en sorte que les colonnes concernées dans Destination restent toujours contigües.
 

jhlamoustache

XLDnaute Occasionnel
Je viens d'effectuer des tests en changeant l'ordonnancement des colonnes des Destination. Le résultat n'est conforme que lorsque les colonnes sont ordonnées comme sur la feuille résultat. Autrement, les valeurs sont dans les bonnes colonnes, mais les anciennes valeurs ne sont pas correctement testées. Cela vient du fait que cette partie du code est en dur, n'est-ce pas ?
If DétMvt(5) <> DétDst(5) Then TRésu(L, 6) = DétDst(5)
If DétMvt(7) <> DétDst(7) Then TRésu(L, 8) = DétDst(7)
If DétMvt(10) <> DétDst(10) Then TRésu(L, 11) = DétDst(10)
If DétMvt(12) <> DétDst(12) Then TRésu(L, 13) = DétDst(12)
Les colonnes des Destination doivent rester mobile, car nous sommes au début du développement de notre outil, et le cahier des charges pourrait évoluer (sûrement).
 

Dranreb

XLDnaute Barbatruc
Si c'est vraiment si instable que ça, vous pouvez certes définir des constantes pour les numéros de colonnes.
Voire des variables initialisé d'après les titres de la destination un peu comme c'est fait pour les mouvements.
 

jhlamoustache

XLDnaute Occasionnel
J'ai séché sur la définition des constantes et des variables.
Puis j'ai modifié le code comme ceci :
Case Else: 'Existe des deux cotés
For C = 1 To DCDst: TRésu(L, C) = DétMvt(C)
If DétMvt(C) <> DétDst(C) Then
TRésu(L, C + 1) = DétDst(C)
C = C + 1
End If
Next C
ca a l'air de bien fonctionner. Cependant j'aimerais avoir votre avis. Me serais-je tendu un piège ?
 

Pièces jointes

  • Suivi trajets.xlsm
    36.1 KB · Affichages: 2

Discussions similaires

Statistiques des forums

Discussions
312 329
Messages
2 087 333
Membres
103 519
dernier inscrit
Thomas_grc11