VBA - copier/coller avec conditions

Bonjour à tous,

Je bloque depuis ce matin sur une macro que je pensais simple à réaliser. Il me reste encore beaucoup de chose à apprendre :joy::joy::joy:.
Voilà ma problématique:

Cette macro doit copier/coller, de manière dynamique, des données d’un fichier A vers un fichier B.
Toutefois, si la donnée dans le fichier A est déjà présente dans le fichier B elle ne doit pas exécuter la copie. Je pensais prendre comme critères le nom des clients par exemple qui est en colonne B pour empêcher la copie automatique.
En d’autres termes, je souhaite que les nouvelles entrées du fichier A s’ajoute dans le fichier B sauf si le nom du client est déjà présent.

J’espère avoir été clair dans mes explications.
Si ce n’est pas le cas, je me ferais un plaisir de reformuler tout ça.

Merci à tous par avance pour votre aide :grin::grin::grin:

Bonsoir,

Pour que l’on puisse t’aider :

:books: Donne le plus de détails possible, et ajoute un fichier

Cordialement.

Bonjour Zebulon,

Merci pour ta réponse.
Effectivement avec des fichiers c’est plus simple.

Comme je disais précédemment, je souhaite transférer les données du fichier A vers le fichier B de manière dynamique. Le nombre de ligne du fichier A va augmenter quotidiennement en fonction des nouvelles entrées.
Une fois la données transférée en B, je souhaite avoir la possibilité de remplir certaines colonnes (B+H+I+J+N) directement dans le fichier B.
Pour le moment dès que je veux utiliser le tableau dans le fichier B, la donnée dans le colone B s’efface.

j’espère être un peu plus clair dans mes explications cette fois:grin:

Merci à tous

Fichier A.xlsx (13,9 Ko) Fichier B.xlsx (6,5 Ko)

Bonjour,

Si j’ai bien compris, avec power query tu peux copier les données de la feuille A dans la feuille B. Par contre les données des colonnes B, H J et N doivent elles venir obligatoirement de la feuille A ?
Si ce n’est pas une obligation autant les saisir directement dans la feuille B.
Sinon la solution power query va se mettre à jour à chaque ouverture de la feuille B écrasant les valeurs saisies dans ces colonnes.
A toi de me dire.
Je joins les deux fichiers afin que tu puisse voir.
Cordialement.
Fichier A.xlsx (13,8 Ko) Fichier B.xlsx (18,1 Ko)

Zebulon,

Pour répondre à ta question, non les données des colonnes B,H, J et N ne doivent pas obligatoirement venir de la feuille A. Ces données doivent être renseigné dans la feuille B justement.

Ma première idée était d’utiliser power quey pour l’extraction de données et ça marche super bien.
Toutefois, si j’actualise la feuille B, les données que je veut renseigner s’effacent automatiquement.
Je pensais avoir trouver la parade en ajoutant une nouvelle colonne, nommé “ID U new”.
Dans ce cas, les données renseigné dans cette colonne ne disparaissent pas lors de l’actualisation.

Malheureusement pour moi, si la ligne de “Mme B” est supprimée dans la feuiller A, lors de l’actualisation dans le feuille B, l’identifiant de “Mme B” qui se trouve dans le colonnes “ID U new” se décale pour être associé à “Mr et Mme B”.

Dans le meilleur des mondes, il faudrait que toutes la ligne disparaisse si elle est supprimer dans la feuille A. Cela empêcherait ce décalage identifiant.

Fichier B.xlsx (18,6 Ko)
Fichier A.xlsx (14,0 Ko) .

Je joins les deux fichiers afin que tu puisse voir.

Merci beaucoup pour ton aide

re,

Une alternative, dissocier la saisie des colonnes B, H, J et N du tableau issu de la feuille A et regrouper le tout avec power query.

A tester si pratique à l’utilisation.
Cordialement.
Fichier B.xlsx (49,2 Ko) Fichier A.xlsx (13,7 Ko)

Bonjour Zebulon,

Cette une bonne alternative mais inutilisable en pratique dans mon cas.

J’ai donc utiliser une marco pour copier les information du fichier A vers le ficher B et ça fonctionne:
Sub Macro3()
Windows(“Fichier A.xlsx”).Activate
Cells.Select
Selection.Copy
Windows(“FICHIER B.xlsx”).Activate
ActiveSheet.Paste
End Sub

Connais-tu un moyen pour exécuter la copier uniquement si les cellules de la colonnes A et D, du fichier B, sont différentes ?
Par exemple quand je lance la macro, si dans le fichier B le dossier de Mr A en date du 20/01/20 est déjà pressent (prendre en référence la colonne A = date & D= nom) il ne faut pas copier la ligne.
Si la nouvelle ligne est différente des infos en colonne A & D alors la ligne peut être ajoutée.

Je te joint les fichiers.
Fichier A.xlsx (14,0 Ko)
Fichier B.xlsx (24,2 Ko)

Merci beaucoup

Bonsoir,

Je ne suis pas un pro du VBA, je pense que tu trouveras un contributeur qui se fera une joie de te répondre.
Cordialement.

Bonjour

Sur ce lien un outil pour recopier les données du fichier A vers le fichier B soit en les réactualisant sur la base des valeurs en colonne A et D identiques soit si inexistants par ajout d’une ligne en fin du fichier B avant la ligne TOTAL
L’outil dans son onglet Paramètres décrit le nom exact des Fichiers et onglet à prendre en compte
Ceux-ci peuvent modifiés mais doivent être à l’identique de ceux attribués au risque d’un bug à l’exécution
L’activation du traitement peux se faire à partir de n’importe quel fichier Fichier A Fichier B ou de cet outil
De l’outil il suffit d’activer le bouton Traitement des fichiers par activation de la macro Traitement de l’outil qu’il faut aller chercher
Attention les fichiers A B et cet outil doivent tous être ouverts au moment de l’exécution

Fais des essais et dis moi

https://www.cjoint.com/c/JBtipOSFqM5

Bonjour Zebulon,

Je te remercie pour ton aide :grinning:

cordialement

Bonjour FFO,

je vais essayer ça ce matin et je reviens te dire si mon problème est résolu.

Merci :smiley:

FFO,

Ta solution est parfaite pour répondre à ma problématique.
Toutefois, j’ai du loupé une étape car j’ai “une erreur d’exécution 9” à chaque fois que je veux lancer la macro.
Comme indiqué j’ai pourtant bien tous les ficher ( A et B) ouverts.

Fichier A.xlsx (13,9 Ko)
Fichier B.xlsx (16,8 Ko)

cordialement

As tu bien vérifié que les noms dans l’onglet paramètres de l’outil en colonne B et C :
Colonne A Colonne B Colonne C
|Classeurs|Noms |Onglet|
|A |Fichier A.xlsx |MASTER FILE MIDDLE OFFICE|
|B |Fichier B.xlsx |Solution 2 depuis middle|

Correspondent tous bien au nom de tes fichiers colonne A et nom d’onglet dans chacun d’eux

Vérifies au caractère et casse prés sinon fais débugage et rapportes moi la ligne colorée en jaune signalée

Je viens de rapatrier tes 2 derniers fichiers le Fichier A.xlsx
se nomme Fichier A (1).xlsx et non Fichier A.xlsx comme indiqué cellule B2 de l’outil le fichier Fichier B.xlsx se nomme Fichier B (1).xlsx et non Fichier B.xlsx comme indiqué cellule B2 de l’outil
De plus dans le fichier Fichier B.xlsx l’onglet se nomme Feuil1 et non Solution 2 depuis middle comme indiqué en cellule C3 de l’outil

De plus le deuxième fichier Fichier B.xlsx comportait 2 lignes de titre et une lige TOTAL necessaire pour un bon fonctionnement avec résultat correct
Or celui que tu viens de me transmettre est totalement vide
Il serait souhaitable d’avoir un fichier de destination avec un format de présentation déterminé est stable
Le résultat en dépend
Donc bien alimenter l’onglet Paramètres de l’outil en fonction du nom de chaque fichier source et cible ainsi que leur onglet à utiliser et avoir un fichier cible au format de présentation stable à déterminer
Merci de me fournir un fichier cible qui restera celui à utiliser quant à sa présentation seules les données seront à alimenter par l’outil

Tu as parfaitement raison, c’était un problème de nom.
J’ai corrigé cette boulette et la copie du fichier A vers le B fonctionne.
Toutefois j’ai encore petits points d’interrogations :

1 - Au niveau du format du tableau, j’aimerais que les en-têtes du fichier A soit les même dans le fichier B. En lançant la macro il y a bien eu une copie mais juste des valeurs. (ci-joint le fichier B). D’ailleurs je ne sais pas pourquoi mais la ligne concernant Mr A se retrouve en dessous de la ligne “TOTAL”.
2 - SI je rajoute une information dans le fichier B en colonne B, une fois la macro relancée la ligne se copie quand même en dessous.

Je t’ajoute les bons tableau à titre d’exemple
Fichier A.xlsx (13,8 Ko)
Fichier B.xlsx (17,8 Ko)

2 solutions concernant la ligne de titre pour le fichier cible Fichier B.xlsx
Soit tu utilises une maquette préparée comme fichier vierge avec les lignes de titre et ligne TOTAL pré-positionné soit l’outil les mets en place reste à savoir dans cette alternative ce que l’outil doit réaliser (format nom colonne présentation)
Cette recopie peut être inscrite en dur dans le code mais évolution impossible sans intervention dans le cœur de la macro
On peut s’appuyer sur la présentation du fichier source Fichier A.xlsx pour la ramener dans le fichier cible Fichier B.xlsx
Mais il est dans cette 2° alternative tout aussi simple de le réaliser manuellement car si on l’automatise il faudra distinguer les opérations sur fichier cible vierge de ceux déjà alimentés
Toujours possible mais cela alourdi le traitement

Pour la recopie en dessous de la ligne TOTAL ce désordre est la conséquence du formalisme du fichier Fichier B.xlsx différent du tout premier transmis

D’où l’importance d’une présentation stable du fichier cible Fichier B.xlsx

Merci donc de me déterminer la souche de ce fichier cible et la manière de le réaliser automatique par macro ou manuel par l’utilisateur

Je vais suivre tes conseils avisés et opter pour le fichier vierge pré-positionné afin éviter de l’inscrire en dur dans la macro. J’ai ajouté dans le fichier B le modèle du tableau à remplir.
Concernant la souche, je te joints le fichier A & B qui ne bougeront plus d’un pouce pour la macro.

Fichier A.xlsx (13,8 Ko)
Fichier B.xlsx (23,6 Ko)

Est il normal que dans le fichier cible Fichier B.xlsx le tableau à alimenter ne débute qu’en ligne 9 avec la première entête “SUIVI DES DOSSIERS” ?
Sur les premières lignes avant des données qui semblent être oubliées ne faut-il les supprimer et débuter l’entête dés la 1° ligne ?

En colonne A la donnée Total sera t’elle toujours présente en fichier source et cible ?
Je pense me baser sur elle pour déterminer la dernière ligne de chaque tableau

Merci pour tes réponses

J’ai collé le tableau en ligne 9 dans le fichier B à titre d’exemple. Désolé, j’airais du le préciser.
Effectivement, je souhaiterais que le tableau débute à partir de la ligne 1 du ficher B et que la macro ajoute les ligne en dessous de l’en-tête date; ID U… .
Je te confirme que la donnée total dans la colonne A sera toujours pressente dans les deux fichier et en dernière ligne.

Merci encore pour ton aide, tu me sauves :grinning:

Sur ce lien l’outil corrigé conformément aux dernières dispositions convenues
Cet outil fonctionne avec tes tous derniers fichiers transmis à l’exception du fichier cible Fichier B.xlsx auquel j’ai remonté le tableau en ligne 1 avec la première entête : “SUIVI DES DOSSIERS”
Attention de bien veiller à l’adéquation des noms onglet Paramètres de l’outil et les noms des fichiers source et cible et de leur onglet respectif sinon Bug en perspective
Les noms peuvent tout à fait être modifiés à condition qu’ils correspondent entre eux à la virgule et casse prés
Toujours garder la même présentation des colonnes pour les 2 fichiers source et cible à traiter pour un résultat obtenu correct
Un fichier cible Fichier B.xlsx minimum doit posséder dans son onglet au moins les lignes d’entêtes et la ligne total conformément à ceux transmis dans ton dernier fichier
Le traitement de l’outil actualise dans le fichier cible Fichier B.xlsx les données d’un article présent du fichier source Fichier A.xlsx présence identifiée par ses données colonne A et colonne D identiques sinon si absent le rajoute en bas de tableau avant la ligne total par ajout d’une nouvelle ligne

Je pense que cela devrait convenir

A toi de me dire

https://www.cjoint.com/c/JBuqkUBFGU5