Remplacement de valeurs de cellule par ligne
Bonjour communauté,
Je débute vraiment en VBA, et j'ai réalisé un code me permettant d'ouvrir un fichier .xlsx pour copier sa feuille dans le fichier (Onglet Ref) portant la macro afin de manipuler des données selon leur valeur ou précisément selon leur suffixes. Grosso modo je souhaite à partir de la feuille Ref garder la colonne A intacte et faire des remplacements sur les cellules de la plage B et les colonnes suivantes de sorte que lorsque la cellule se termine par DK_ je la garde et lorsque ce n'est pas le cas je remplace la cellule par sa ligne en comparant avec la colonne A depuis Ref.
J'ai tenté de copier les cellules de Ref ne finissant pas par DK_ dans la feuille Step1 et l'inverse dans Step2 et faire un merge entre les deux mais ca ne fonctionne pas. (Boucle tenté pour remplacer les cellules de Step1 qui ne finissent pas par DK_ par leur ligne depuis Ref)
Pourriez vous m'aider svp. vous trouverez les fichiers en pièces jointes Merci bcq
Bonjour,
Votre explication est très confuse. Qu'entendez-vous par " je remplace la cellule par sa ligne en comparant avec la colonne A depuis Ref" ? vous parlez de remplacer une cellule par une ligne ? Ce sont deux choses différentes. Voulez-vous dire remplacer la valeur de la cellule par celle se trouvant sur la meme ligne en colonne A ?
Ie. si C3 finit par DK, la remplacer par A3 ?
Autrement pour votre code il "ne fait rien" dans le sens ou l'étape 1 efface toutes les cellules vérifiant un critère, puis l'étape 2 toutes celles ne vérifiant pas le critère. Vous appliquez au final exactement le meme traitement aux cellules qu'importe leur valeur.
Pouvez-vous réexpliquer s'il-vous-plait votre objectif de manière simple, concise et avec des exemples ? Un fichier, ou au moins quelques lignes, du résultat attendu serait optimal.
Edit Sorry mes réponses demandent une longue préparation et je n'ai pas rafraichi...
Pour compléter l'intervention de Saboh
Bonjour et
Déjà moi je vois un problème "Francais" n'est pas vraiment ce qui est attendu on souhaite connaitre ta version Excel. Francais ne va pas vraiment nous aider à t'aider...
La version d'Excel se lit dans Fichier > Compte (en bas) Cliquer sur le point d'interrogation)
puis dans l'écran suivant :
L'information demandée est l'année 2016, 2019... ou 365 si tu as un abonnement et le cas échéant la mention 32 ou 64 bits
Bien vouloir modifier ton profil en conséquence.....;
Ensuite concenant ton casseur tes explications sont plus embrouillées qu'autre chose : A prmière vue tu nous joins un fichier xlsx dont on n'a pas vraiment besoin puis qu'il s'agirai de reprendre ton code à partir de la feuille Ref donc bref on va être obligé de se gratter la tête pour comprendre.
Bon pendant qu'on réfléchit ça va te permettre de préciser ta version et également de préciser ce que veut dire "lorsque ce n'est pas le cas je remplace la cellule par sa ligne en comparant avec la colonne A depuis Ref."
Donc comment doit se terminer la comparaison ?
Ce qui serait bien c'est que nous fasse un classeur avec les données de départ et une feuille avec une dizaine de ligne retouchée (même manuellement) mais montrant le résultat attendu. Les macros que tu as pu faire, on s'en fiche un peu puisse que de toute façon elle ne te satisfont pas.
Bon je veux pas dire non plus qu'elle ne valent rien hein... Ne me fais pas dire ce que je ne dis pas. Simplement il est très probable qu'elles ne serviront pas à grand chose. Soit que le répondeur n'y connaisse rien en VBA et qu'il tente du PQ (Power Query) soit qu'il utilise VBA et ce sera sans doute d'un niveau un peu plus corsé...
A+
Salut,
Merci pour vos retour et désolé si je me suis mal exprimé, j'utilise du Office 365 sur 32 bits? J'essayerai d'étre plus clair :
Le fichier DK_1.xlsm me permet d'ouvrir le DK.xlsx afin de copier toutes la feuil1 de ce dernier ce qui correspond à cette plage de donnée :
| OAFCB | OADK_ | |||
| OANL_ | OADK_ | |||
| OANLM | OADK_ | |||
| OANL_ | OADK_ | OADK_ | ||
| OANLM | OADK_ | |||
| OANLM | OADK_ | |||
| OANL_ | OADK_ | OADK_ | ||
| OANL_ | OADK_ | |||
| OANL_ | OADK_ | |||
| OACP_ | OADK_ | |||
| OAFID | OADK_ | |||
| OALO_ | OADK_ | OALOC | OADK_ | |
| OALOC | OALO_ | OMDK_ | ||
| OANL_ | OADK_ | |||
| OA50NL_ | OADK_ | |||
| OADZ_ | OADK_ | OADK_ | ||
| OA60NL_ | OADK_ | |||
| VNNL_ | VNDK_ | |||
| VNNL_ | VNDK_ | |||
| 17NL_ | 17DK_ | |||
| OA70KD_ | OADK_ | |||
| OA70MD_ | REDOA70 | |||
| REDOA70 | OA70MD_ | OA70MGK | OADK_ | OA70MGH |
| OA70MGH | REDOA70 | |||
| OA70MGK | REDOA70 | |||
| OA80FCB | OA50DK_ | OADK_ | ||
| OAFCB | OADK_ | OADK_ | ||
| 51NL_ | 51DK_ | |||
| REDOA70 | OA70MD_ | OA70MGH | OA70MGK | OADK_ |
| OANL_ | OADK_ | |||
| OACP_ | OADK_ | OADK_ | ||
| OAFID | OADK_ | |||
| OALO_ | OALOC | OADK_ | OADK_ | |
| OALOC | OALO_ | |||
| OANL_ | OADK_ | |||
| OA50NL_ | OADK_ | |||
| 23DZ_ | OADK_ | OADK_ | ||
| OA60NL_ | OADK_ | |||
| 27NL_ | 27DK_ | |||
| OA70KD_ | OADK_ | |||
| OA70MD_ | REDOA70 | |||
| OA70MGH | REDOA70 | |||
| OA70MGK | REDOA70 | |||
| OANL_ | OADK_ | |||
| OANL_ | OADK_ | |||
| OANL_ | OADK_ | |||
| OA80FCB | OA50DK_ | OADK_ | ||
| OAFCB | OADK_ | OADK_ |
Donc la je souhaite garder la colonne A intacte mais avoir toutes les autres cellules des autres colonnes en gardant le bon positionnement avec des valeurs finissant en DK_ majoritairement c'est le cas pour les lignes mais pas pour toutes. Alors premier réflexe:
-Je copie en Step1 nouvelle feuille Ref (plage partagée en ci-dessous) avec la colonne A intacte mais sur la plage B et au déla je garde que les valeurs de cellules qui ne se terminent pas par DK_ et j'essaie de faire une condition : si correspondance entre valeurs cellules plage B et au déla dans Step1 avec les valeurs colonne A de Ref je copie dans Step1 la valeur de la cellule en question mais en la remplacant par sa ligne de Ref et ensuite garder que les DK_ mais un peu compliqué à mon niveau. Merci pour votre aide
NB : Step2 prend Ref mais en gardant que les cellules finissant par DK_ dans la plage B et au déla (j'ai essayé de faire un merge mais ca n'a pas fonctionné)
Cordialrement;
Je t'ai donné un lien pour modifier ton profil
Merci de corriger.
Je passe la main car je n'ai pas 365 et les explications ne me semble pas claires:
Ce qui serait bien c'est que nous fasse un classeur avec une feuille avec une dizaine de lignes retouchées (même manuellement) mais montrant le résultat attendu.
A+
Toujours pas d'exemple et des explications toujours aussi brumeuses…
S'il vous plait faites des lignes d'exemple !
Voulez-vous :
Pour chaque ligne, parcourir les colonnes, si la cellule est de type "xxxDK_", la remplacer par du vide ainsi que toutes les suivantes.
Sinon, lire la cellule de la colonne suivante et répéter.
Puis changer de ligne.
Par exemple
| A | B | C | DDK_ |
| A | BDK_ | ||
| DK_ |
Renverrai
| A | B | C | |
| A | |||
?
Re bonjour,
Merci pour vos réponses, le but est que à chaque fois que la boucle croise une valeur de cel qui ne finit pas par DK_ de la plage B et au déla->comparer à la colonne A de Ref et remplacer cette cel par sa ligne dans Ref en gardant que les DK_ et en concaténant avec ceux existants initialement. Vous trouverez en pièce jointe le résultat attendu dans l'onglet Résultat manuellement, les cel sont identifiés en jaune dans Feuil1. Merci
Cordialement;
Re,
Votre fichier d'exemple n'est pas consistant, ou suit une logique qui m'échappe.
Par exemple :
Pourquoi (sur la feuil1) ligne 13 colonne C on a OALOC → OADK (jusque là ok)
Mais ligne 24 les valeurs en B et C sont effacées ?
Pourquoi ligne 34, colonne C, OADK_ devient OMDK_ ?
Idem ligne 35 OALO_ devrait devenir OADK_ or on a OMDK_ puis un OADK_ qui apparait de nulle part en colonne D?
Autrement je crois avoir compris votre logique mais les exemples sembles présenter plusieurs erreurs, ou quelque chose m'échappe encore.
Voici l'algo que j'ai en tete pour le moment :
Pour chaque ligne,
Lire les valeurs à partir de la colonne B et les suivantes (s'arreter à la première cellule vide)
si valeur finit par DK_ → next
sinon, remplacer par valeur en A_i (2 premières lettres + DK_) ET supprimer toutes valeurs suivante de la ligne ne présentant pas DK_
Ligne suivante
Bonjour Saboh,
Merci pour ton retour, oui parce que ce sont les cellules répetitifs et en tout cas l'idée c'est de garder que les DK_ sur cette plage dans le résultats final. Merci bcq bonne journée
Bonjour,
Merci pour vos réponses
, je vais simplifier encore le fichier en supprimant qlq lignes pour que ca soit plus simple le résultat que je souhaite avoir est dans la feuil2 du fichier (Remplacement des cellules tagés en jaune par leur ligne dans Feuil1) C'est exactement ce qui se passe pour les lignes 12,22,23,24,25
J'essaie de réflechir à un algo plus simple en parallèle. Bonne journée
Cordialement