IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Importer uniquement les nouvelles données [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Avril 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Avril 2016
    Messages : 17
    Par défaut Importer uniquement les nouvelles données
    Bonjour à tous

    Je dispose de 2 fichiers Excel, le premier contient les données brutes (issue d’une requête sur Service Now) et le deuxième me permet de traiter ces données pour réaliser un tableau de bord.
    Actuellement j’ai un bout de code VBA qui ouvre le 1er fichier et copie intégralement les données dans une feuille du 2ième fichier : cette solution ne me convient pas car j’écrase à chaque import l’ensemble de mes données brut (et donc les éventuelles corrections que j’aurais pu faire).
    Comment faire pour ne recopier que les nouvelles données brutes dans mon fichier destination ? (sachant que je dispose d’une colonne contenant des valeurs uniques)
    Merci pour votre aide

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour,
    Intéresse-toi à la méthode WorksheetFunction.Countif.
    Pour chaque donnée trouvée dans une boucle sur les données "brutes", ne faire un ajout sur la destination que si Countif = 0

  3. #3
    Membre averti
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Avril 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Avril 2016
    Messages : 17
    Par défaut
    Citation Envoyé par unparia Voir le message
    Bonjour,
    Intéresse-toi à la méthode WorksheetFunction.Countif.
    Pour chaque donnée trouvée dans une boucle sur les données "brutes", ne faire un ajout sur la destination que si Countif = 0
    Je ne suis pas un pro de VBA, surtout quand il s'agit de bloucle... tu peux me donner un exemple STP ?

  4. #4
    Membre chevronné

    Homme Profil pro
    Consultant ERP
    Inscrit en
    Janvier 2013
    Messages
    372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2013
    Messages : 372
    Par défaut
    Euh Excel n'a pas d'indexation comme Access donc ça risque d'être long d'identifier les données uniques présentes.
    Tes lignes sont mélangées?
    Si non, une importation paramétrée à la première ligne modifiée?
    Si oui, une macro qui va mettre un flag sur la ligne du fichier source si elle est déjà présente sur le fichier destination ; puis importe les données sans flag?

  5. #5
    Membre averti
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Avril 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Avril 2016
    Messages : 17
    Par défaut
    Qu'est-ce que tu appelles "importation paramétrée par ligne" ?

    Ah oui je viens de comprendre ce que veux dire.

  6. #6
    Membre Expert
    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 723
    Par défaut
    Bonjour,

    SI les lignes sont entremêlées, tu pourrais utiliser un dictionnaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set dico = CreateObject("Scripting.Dictionary")
    Puis tu y mets toutes les clés uniques existant déjà dans ton fichier de sortie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For each rg in MaFeuilleDeSortie.Range("TableauDeSortie[Clé]")
        dico(rg.value) = ""
    Next rg
    Enfin, tu boucles sur chaque clé de ton fichier brut en testant si la clé existe déjà dans ton dico; si non tu copies la ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    For each rg in MaFeuilleEnEntree.Range(<blablabla>)
        If Not dico.Exists(rg.value) Then ...

  7. #7
    Membre chevronné

    Homme Profil pro
    Consultant ERP
    Inscrit en
    Janvier 2013
    Messages
    372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2013
    Messages : 372
    Par défaut
    Citation Envoyé par thierry31140 Voir le message
    Qu'est-ce que tu appelles "importation paramétrée par ligne" ?
    Si tu sais que tes données à importer vont d'une ligne n à une ligne m, sans ligne ancienne, et qu'il n'y a pas de nouvelles données ailleurs que dans cette plage, tu détermines ta plage avec n et m et tu importes ce groupe de lignes?

    Ou tu importes les lignes une par une si l'information est mélangée?

    Si à l'intérieur d'une même ligne les informations peuvent être nouvelles et anciennes c'est une autre histoire.
    Bref je te propose du bidouillage, ne connaissant pas de méthode propre sur Excel.

  8. #8
    Membre averti
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Août 2015
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Août 2015
    Messages : 37
    Par défaut
    Est-ce que les nouvelles données sont complétées à la suite des anciennes ligne? Si oui tu peux faire un comptage des lignes s'il y a une différence entre tes 2 fichiers tu copie la différence à la suite.

  9. #9
    Membre averti
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Avril 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Avril 2016
    Messages : 17
    Par défaut
    Citation Envoyé par FLoPigloo Voir le message
    Est-ce que les nouvelles données sont complétées à la suite des anciennes ligne? Si oui tu peux faire un comptage des lignes s'il y a une différence entre tes 2 fichiers tu copie la différence à la suite.
    Les données sont une liste d'incidents ouverts dans service now, donc avec un numéro différent et une date et heure qui s’incrémentent, il suffirait de trouver l'incident le plus vieux déjà copié dans le fichier de destination et copier uniquement les enregistrements suivants.
    Par contre je ne sais pas faire en VBA.

  10. #10
    Membre chevronné

    Homme Profil pro
    Consultant ERP
    Inscrit en
    Janvier 2013
    Messages
    372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2013
    Messages : 372
    Par défaut
    Citation Envoyé par thierry31140 Voir le message
    Les données sont une liste d'incidents ouverts dans service now, donc avec un numéro différent et une date et heure qui s’incrémentent, il suffirait de trouver l'incident le plus vieux déjà copié dans le fichier de destination et copier uniquement les enregistrements suivants.
    Par contre je ne sais pas faire en VBA.
    Ca ça veut dire que tes lignes ne sont pas "mélangées" et c'est très simple.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Ecraser un fichier texte avec les nouvelles données
    Par Dendrite dans le forum VB.NET
    Réponses: 15
    Dernier message: 21/08/2010, 07h49
  2. Réponses: 18
    Dernier message: 17/03/2009, 17h25
  3. Réponses: 2
    Dernier message: 14/10/2008, 09h38
  4. Réponses: 2
    Dernier message: 07/10/2008, 11h57
  5. [CR9 et VB6] n'affiche pas les nouvelles donnée
    Par moumoule17 dans le forum SDK
    Réponses: 3
    Dernier message: 22/04/2005, 12h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo