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 :

Transfert partiel de données entre tableaux selon des références.


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 4
    Par défaut Transfert partiel de données entre tableaux selon des références.
    Bonjour à tous!

    J'essaye de faire une mise à jour partielle d'un tableau (Feuil1) de données à partir d'un autre tableau(Feuil2).
    J'illustre par un exemple , dans le fichier joint, les principaux cas particuliers de mon problème. Le tableau réel fait 61 colonnes et possède beaucoup de lignes (>1000) dont le nombre varie car des lignes sont ajoutées régulièrement.

    Concrètement, je tente de faire un comparaison entre les Ref (Feuil1, colonne K et Feuil2, colonne B), lorsque les Ref sont identique alors le Pu de la Feuil2 vient écraser le Pu de la Feuil1 associé et le Pe est copié/collé.

    Étant débutant en VBA, mes tentatives ont été vaines malgré la recherche de d'exemples proches sur les forums.
    Toute aide, même partielle serais très appréciée.
    Merci à vous!
    Fichiers attachés Fichiers attachés

  2. #2
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut
    Bonjour Franckxxx,

    Pourquoi ne pas passer par une rechercheV classique ?

    En colonne M (ici ligne 2) : =RECHERCHEV(SUBSTITUE(K2; "~"; "~~");Feuil2!$B$3:$D$13;2;FAUX),
    En colonne N (ici ligne 2) : =RECHERCHEV(SUBSTITUE(K2; "~"; "~~");Feuil2!$B$3:$D$13;3;FAUX).
    ... pour le fichier exemple que tu as donné.

    Ca ne te convient pas ?

    Cordialement,
    Kimy

  3. #3
    Membre chevronné
    Homme Profil pro
    retraité enseignement
    Inscrit en
    Mars 2013
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Saône (Franche Comté)

    Informations professionnelles :
    Activité : retraité enseignement
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2013
    Messages : 213
    Par défaut mise à jour feuille...
    bonjour,

    je vous propose de parcourir la liste en testant l'égalité des références, une itération sur le fichier et pour chaque fiche la recherche de l'égalité possible :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    Sub mise_a_jour()
     
    Dim lref As Integer, lref2 As Integer 'ligne de parcours
    Dim ref As Range  'zone des reférences
    Dim ref2 As Range 'idem feuille 2
     
     
    Set ref = Feuil1.Range(Feuil1.Cells(2, 11), Feuil1.Cells(2, 11).End(xlDown))
    Set ref2 = Feuil2.Range(Feuil2.Cells(4, 2), Feuil2.Cells(4, 2).End(xlDown))
     
     
    For lref = 1 To ref.Count
        lref2 = 0
        Do                 'recherche des mêmes reférences
            lref2 = lref2 + 1 'tant que <> ou fin de liste
        Loop Until ref.Cells(lref, 1) = ref2.Cells(lref2, 1) Or lref2 = ref2.Count
        If ref.Cells(lref, 1) = ref2.Cells(lref2, 1) Then
            'écriture des PU et PE
            Feuil1.Cells(lref + 1, 13) = Feuil2.Cells(lref2 + 3, 3)
            Feuil1.Cells(lref + 1, 14) = Feuil2.Cells(lref2 + 3, 4)
        End If
    Next lref
    End Sub
    ensuite insérer un bouton en feuille 1

    Je vous joins le fichier :
    mise a jour.xls

    geogeo70

  4. #4
    Membre confirmé
    Homme Profil pro
    Ingénieur après-vente
    Inscrit en
    Octobre 2014
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Ingénieur après-vente
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2014
    Messages : 24
    Par défaut Solution simpliste
    Bonsoir,
    pour un nombre de lignes important je passerai ausi par un simple Vlookup pluis un copier coller.
    Comme je comprends que feuil2 ne comporte pas necessairement toutes les lignes je passerai par des colonnes temporaires avec une formule un peu plus alambiquée qui donnerait en VBA
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub Macro2()
        Dim LigneMax As Integer
        LigneMax = Range("A1").CurrentRegion.Rows.Count
        Range("O2:O" & LigneMax).FormulaR1C1 = _
            "=IF(ISERR(VLOOKUP(RC11,Feuil2!C2:C4,2)),Feuil1!RC[-2],VLOOKUP(RC11,Feuil2!C2:C4,2))"
        Range("P2:P" & LigneMax).FormulaR1C1 = _
            "=IF(ISERR(VLOOKUP(RC11,Feuil2!C2:C4,2)),Feuil1!RC[-2],VLOOKUP(RC11,Feuil2!C2:C4,3))"
        Range("O2:P" & LigneMax).Copy
        Range("M2").PasteSpecial Paste:=xlPasteValues
        Columns("O:P").Delete Shift:=xlToLeft
    End Sub
    La formule pourrait aussi être rentrée manuellement.

  5. #5
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    Salut

    lorsque les Ref sont identique alors le Pu de la Feuil2 vient écraser le Pu de la Feuil1
    Je pense que les propositions avec des formules ne tiennent pas compte du fait qu'une valeur est déjà présente en Pu et doit-être mise à jour.

    Étant débutant en VBA, mes tentatives ont été vaines malgré la recherche de d'exemples proches sur les forums.
    Du coup Franck parmi toutes ces tentatives, tu n'en a pas une à nous proposer ? Juste histoire qu'on soit dans une assistance et non une réalisation de code à la demande.


    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  6. #6
    Membre confirmé
    Homme Profil pro
    Ingénieur après-vente
    Inscrit en
    Octobre 2014
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Ingénieur après-vente
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2014
    Messages : 24
    Par défaut
    @ Qwaz:
    Ma solution prend en compte l'alternative de mise à jour ou de conservation, d'où le passage par une colonne supplémentaire temporaire.

    Je pense que c'est plus efficace que de boucler sur chaque ligne en VBA pour faire le test.

    Cordialement

  7. #7
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    Salut

    Autant pour moi, pour que mon intervention ne soit pas complètement inutile , il existe un fonction SiErreur() qui te permet d'éviter l'imbriquement du if + iserr.

    Bonne journée
    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

Discussions similaires

  1. [XL-2007] transfert automatique de données entre 2 fichiers Excel
    Par intellli dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 13/02/2015, 12h14
  2. [XL-2010] Trier et transfert données entre 2 tableaux
    Par gilou41 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 03/03/2014, 07h21
  3. transfert des donneés entre feuile
    Par hicham28 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 29/05/2007, 01h23
  4. Réponses: 2
    Dernier message: 21/10/2005, 17h02
  5. Comment récuperer des données entrées au clavier?
    Par Elisée A. dans le forum MFC
    Réponses: 2
    Dernier message: 13/02/2004, 07h22

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