Copier coller des lignes d'une requête sous condition

Bonjour à tous,

Je travaille dans une usine assez importante où il y a énormément de flux de marchandise et donc de palettes. Je dois procéder au suivi de celles-ci.

Pour travailler j'ai plusieurs fichiers :

- Un fichier .cvs qui s'actualise tous les jours où se trouve toutes les informations d'expédition des palettes sur les 10 derniers jours. En s'actualisant il supprime donc les informations du 11ème jours. En soit ces 10 jours d'historique se décale chaque jours (J+1) supprimant à chaque fois une journée. (je ne sais pas si c'est très compréhensible ^^)

- Un classeur excel où je fais mon suivi.

J'ai créé une requête sur mon fichier cvs qui s'affiche dans mon classeur excel. Mon but serait que cette requête alimente ma base de données tous les jours sans doublons et sans faire un copier coller à la main.

J'ai pensé à faire du copier coller et après supprimer les doublons cependant ayant beaucoup de lignes je ne peux pas faire cela car pour une même journée pour le même client je peux envoyer le même nombre de palette et donc la fonction supprimer les doublons me supprime ces lignes.

Auriez-vous une idée, car je rame

Bonjour et bienvenue sur le forum.

Tu devrais joindre tes fichiers.

Bye !

Bonjour et merci !

Voici mon fichier.

Ayant des connexion avec un fichier sur le réseau de l'entreprise je ne peux pas vous donner le fichier CVS.

En soit sur l'onglet Requete Expédition mon fichier CVS est afficher et mit à jour. J'aimerais que les données de la requête soit copiées sur l'onglet "Base Expédition" sans les lignes déjà présentent dans celui-ci.

A mon avis il faut utiliser VBA mais à part créer des formulaire je ne sais faire grand chose dessus.

21test.xlsm (80.68 Ko)

Bonjour à tous

Je t'ai répondu tu un autre forum où tu avais aussi posté (il est bien de signaler le multipost...)

Il faut copier les données du 1er CSV dans un tableau Excel, puis chaque jour croiser les données de ce tableau et celles du CSV afin de récupérer les nouveaux et pouvoir les ajouter au tableau qui lui sera donc complet.

Donc combiner PowerQuery pour la requête de non correspondance et VBA pour la mise à jour du tableau

Bonjour,

Je ne savais pas qu'il fallait stipuler les autres post sur d'autre forum.

D'accord, c'est ce que j'ai commencé à faire avec une requete qui va chercher les infos sur le fichier csv.

C'est la partie VBA que j'ai du mal a comprendre..

RE

Ta 1ère requête, tu places le résultat dans un onglet et tu romps la liaison.

Ensuite dans Powerquery tu ajoute ce tableau (disons Histo) et tu crées une requête de non correspondance en croisant ce tableau et le CSV

Le résultat de cette requête doit être ajouté au tableau Histo.

Je saurais le faire en passant par une table intermédiaire mais sur 2016 on peut manipuler PowerQuery par VBA donc je vais regarder si on peut le faire plus directement

RE

Comment crées-tu une requête de non correspondance ?

Merci de l'aide, j’espère que l'on y arrivera !

Re

Pour la requête expebac_01, dans PowerQuery paramètre bien le format de chaque colonne et dans le tableau résultant dans Requete Expédition (j'ai laissé l'espace à la fin) où tu romps la liaison, reparamètre bien le format des colonnes du tableau de façon à ce que les lignes ajoutées soient automatiquement au bon format.

J'ai renommé le Tableau résultant Histo.

L'ajouter à PowerQuery.

Dans PowerQuery prendre la requête expebac_01et la fusionner avec Histo : comme tu n'as pas d'ID unique (ce qui est risqué quand on compare) il faut sélectionner dans les deux tables toutes les colonnes qui, en se concaténant, vont donner un ID unique et utiliser jointure externe gauche.

Déployer la colonne Histo obtenue à la fusion et filtrer pour ne garder que les null : si la concaténation virtuelle a bien bien fonctionné toutes les colonnes d'une même ligne contiennent null.

Supprimer toutes ces colonnes : il reste les nouvelles lignes seulement avec les bonnes colonnes. A chaque import ce filtre se fera automatiquement.

Pour VBA a priori on ne peut éviter de passer pas l'interface Excel...

Voici le code

Sub MAJ()
'Chris pour ExcelPratique

    Sheets.Add After:=Worksheets(Worksheets.Count)
    With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
        "OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=""expebac_01"";Extended Properties=""""" _
        , Destination:=Range("$A$1")).QueryTable
        .CommandType = xlCmdSql
        .CommandText = Array("SELECT * FROM [expebac_01]")
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .PreserveColumnInfo = True
        .ListObject.DisplayName = "Tableau_DonnéesExternes_1"
        .Refresh BackgroundQuery:=False
    End With
    With Sheets("Requete Expédition ")
        Range("Tableau_DonnéesExternes_1").Copy Destination:=.Cells(.ListObjects(1).Range.Rows.Count + 1, 1)
    End With
    Application.DisplayAlerts = False
    On Error GoTo Fin
    ActiveSheet.Delete
Fin:
    Application.DisplayAlerts = False
End Sub

Voir si tu veux le lancer manuellement ou selon un timing lié à tes autres codes

Tu aurais le fichier que tu as modifié pour que je puisse avoir un visuel ?

Re

Vu que je n'ai pas ton CSV, j'ai utilisé une table qui n'a rien à voir donc je doute que cela aide beaucoup.

Et tu parles du visuel de quoi plus précisément ?

Bonjour,

C'est juste que je ne comprends pas tout ce que tu m'as expliqué ^^

(j'ai laissé l'espace à la fin) où tu romps la liaison,

Je ne comprends pas comment tu as fait cela.

Dans PowerQuery prendre la requête expebac_01et la fusionner avec Histo : comme tu n'as pas d'ID unique (ce qui est risqué quand on compare) il faut sélectionner dans les deux tables toutes les colonnes qui, en se concaténant, vont donner un ID unique et utiliser jointure externe gauche.

Déployer la colonne Histo obtenue à la fusion et filtrer pour ne garder que les null : si la concaténation virtuelle a bien bien fonctionné toutes les colonnes d'une même ligne contiennent null.

Pareil pour cette partie ^^

Après je suis entrain de réfléchir à comment procéder autrement, peut-être seulement copier coller les lignes en fonction de la date, par exemple toutes les lignes de j-1 sont copiées et collées automatiquement dans ma base.

Qu'en penses-tu ?

Bonjour

Le nom de ton onglet se termine par un espace que j'ai donc du gérer dans le code VBA...

As-tu un minimum de connaissance des bases de données ?

Comme dans une BD, où on croise des tables, dans PowerQuery on peut fusionner des requêtes.

Quand on croise des tables ou requêtes il faut être sûr de mettre en relation correctement les éléments : par exemple quand on a une tables des clients et une table des factures, la table des clients doit avoir un ID unique reporté dans la table des factures afin qu'on attribue au bon client les factures quand on fait une requête.

Dans ton cas comment savoir que telle ligne d'historique correspond à telle ligne du dernier CSV ?

La colonne FLUX semble contenir toujours la même chose

La date existe n fois

Idem pour le code emballage

Idem pour le libellé et pour le Nb

Vérification faite, même en concaténant les 4 colonnes, on a des doublons.

A priori : en sélectionnant juste le champ date de chaque requête pour croiser, tu récupérera les nouveaux, sous réserve que les CSV ait bien une rupture par jour, c'est à dire qu'on n'ait pas une partie du jour sur une extraction mais un complément sur le même jour sur l'extraction suivante.

Ce que je propose est automatique mais si tu veux faire du copier coller...

Re,

C'est bon j'ai trouvé comment procéder. J'ai créé une macro qui actualise la requête, copie toutes les données, les colles dans mon tableau d'historique et ensuite supprime les doublons. Ca ne fonctionnait pas avant mais la je viens d'essayer plusieurs fois et ça fonctionne !

J'ai bien le nombre de ligne qu'il me faut à chaque fois.

Sais-tu comment je peux demander en VBA que mes données se collent à la suite de mon tableau ?

Re

Tu l'as dans mon code...

Ta méthode utilisera plus de ressources que PQ.

Encore décarcassé pour rien...

Re

Je n'ai quasiment aucune connaissance dans la BD, je sais juste additionner des requêtes.

Et oui ma requête tombe à 2h du matin donc j'ai bien, une journée sur une et une autre le lendemain..

Je cherche juste que ce soit le plus simple possible c'est tout...

Je suis désolé de t'avoir fait perdre ton temps, j'essaye de comprendre au mieux mais bon ce n'est vraiment pas évident quand on est novice comme moi...

Je te remercie de ton aide.

Bonjour à tous

Une variante traditionnelle à tester;

Bye !

12test-v1.xlsm (80.71 Ko)

Salut !

Je viens de tester gmb et ça fonctionne super, le seul problème et que si je supprime toutes les lignes du 19/04 et que j'en laisse une seule, il ne me les copie pas. ^^

, le seul problème et que si je supprime toutes les lignes du 19/04 et que j'en laisse une seule, il ne me les copie pas.

Est-ce vraiment un problème ?

Bye !

Est-ce vraiment un problème ?

C'est un problème en effet car mon fichier se met à jour tous les jours à 2h du matin donc j'ai une partie des données le soir même et l'autre partie le lendemain.

Par exemple pour aujourd'hui, j'ai une partie des données du 20/04 (aujourd'hui) et j'aurais le reste ce soir à 2h.

Re

Bizarre je n'ai pas constaté cela en utilisant le code de gmb, par contre on récupère les dates en texte...

Mais du coup, si les extraits coupent les dates il n'y a plus aucun moyen de comparer sauf à écraser partiellement...

On en revient à la nécessité d'ID quand on manipule des données...

Rechercher des sujets similaires à "copier coller lignes requete condition"