Rapatrier des données sous conditions vers un autre classeur

Résolu
gu95 -  
gu95 Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour à tous,

J'ai un classeur Excel A, qui me sert de base de travail, où je sélectionne les données que j'aimerais rapatrier vers un autre classeur B via une liste déroulante (Oui/Non) [colonne A de mon classeur A].

J'aimerais que les toutes les lignes où j'ai un "oui" soient rapatriées dans le classeur B.

Tout cela serait encore mieux si cela se faisait automatiquement à l'aide d'un bouton.

Merci par avance pour vos conseils!

2 réponses

  1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonjour,

    il manque beaucoup de renseignements nécessaires à la construction d'une macro comme
    nombre de lignes concernées et à partir de quelles lignes? quelles colonnes ? localisation et nomdes 2 classeurs ? où installe t'on le résultat dans le classeur cible ? etc.
    au besoin
    Mettre le classeur sans données confidentielles en pièce jointe sur https://www.cjoint.com/
    et coller le raccourci proposé (clic droit) dans le message de réponse
    Dans l'attente

    0
    1. gu95
       
      Bonjour,

      En effet je n'ai pas mis beaucoup de renseignements. J'ai un fichier "BDD" (ci-joint : http://www.cjoint.com/c/ELeiE6EKe8C) qui va être une base de données vivante, c'est à dire que de nouvelles lignes pourront y être créées. De ce fait toutes les lignes du classeur peuvent potentiellement être concernées.
      Dans ce fichier BDD, la colonne A sert à sélectionner les lignes que l'on souhaite reporter dans le deuxième fichier: "Exemple". La sélection de ces lignes se fait via une liste déroulante "Oui" pour que la ligne soit reportée dans le fichier exemple, "Non" poiur qu'elle ne le soit pas.
      Dans le fichier "Exemple" j'aimerais reporter dans la première feuille "BPU" les colonnes suivantes: (cf fichier joint: http://www.cjoint.com/c/ELeiFM5VkoC )
      - colonne B : Code
      - Colonne C : Désignation des prestations
      - Colonne E: unité

      Ce qui serait top serait également de copier les en-tête des colonnes où bien de les conserver comme telles dans le fichier "exemple".
      Ces deux fichiers seront rangés dans le même répertoire.


      J'ai déjà un début de piste avec le code suivant, cependant les données sont reportées dans le même classeur, je n'arrive pas à sélectionner les colonnes qui m'intéresse et j'ai le problème des en-tête.

      Sub Copier()
      Dim Lig As Long
      Dim Col As String
      Dim NbrLig As Long
      Dim NumLig As Long

      Sheets("Feuil2").Activate ' feuille de destination

      Col = "A" ' colonne de la donnée non vide à tester
      NumLig = 0
      With Workbooks("BDD_travail.xls").Worksheets("BDD") ' feuille source
      NbrLig = .Cells(65536, Col).End(xlUp).Row
      For Lig = 1 To NbrLig
      If .Cells(Lig, Col).Value = "Oui" Then
      .Cells(Lig, Col).EntireRow.Copy
      NumLig = NumLig + 1
      Cells(NumLig, 1).Select
      ActiveSheet.Paste
      End If
      Next
      End With

      End Sub



      Merci par avance,
      0
  2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonjour

    proposition
    Option Explicit
    Option Base 1
    '------------------------------------------------------------------
    Sub rapatrier()
    Dim Derlig As Integer, Nbre As Integer, T_bdd, T_oui
    Dim Lig As Integer, Cptr As Integer, Index As Integer
    Dim Ligvid As Integer

    '------------initialisations
    Application.ScreenUpdating = False
    With ThisWorkbook.Sheets("BDD")
    Derlig = .Columns("A").Find(what:="*", searchdirection:=xlPrevious).Row
    Nbre = Application.CountIf(.Columns("A"), "oui")
    'mémorisation en RAm des données et _
    préparation de variable-tableau des lignes "oui"
    T_bdd = .Range("B2:E" & Derlig)
    ReDim T_oui(Nbre, 3)

    '----------------selection des lignes "oui"
    Lig = 1
    For Cptr = 1 To Nbre
    Lig = .Columns("A").Find("oui", Cells(Lig, "A")).Row
    Index = Index + 1
    'copie des données "oui"
    T_oui(Index, 1) = T_bdd(Lig - 1, 1)
    T_oui(Index, 2) = T_bdd(Lig - 1, 2)
    T_oui(Index, 3) = T_bdd(Lig - 1, 4)
    Next
    End With

    '---------------------rapatriement
    Workbooks.Open Filename:="exemple.xlsx" ' A ADAPTER
    With Sheets("BpU")
    Ligvid = .Columns("A").Find(what:="", after:=.Range("A1")).Row
    .Cells(Ligvid, "A").Resize(Nbre, 3) = T_oui
    .Activate
    End With
    End Sub

    0
    1. gu95
       
      Re-bonjour Michel,

      tout d'abord un grand merci pour votre réponse extrêmement rapide. j'ai essayé de faire tourner le programme mais j'ai un message d'erreur qui je pense doit venir de l'emplacement du deuxième fichier "exemple".
      Le message erreur d'exécution 1004 contient 'exemple.xlsx est introuvable. vérifier le nom du classeur et la validité de l'emplacement.

      Mes deux fichiers sont pourtant enregistrés dans un seul et même dossier.
      0
      1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320 > gu95
         
        curieux!..... j'avais essayé chez moi et c'était OK "exemple" s'était ouvert....
        Je viens de réessayer et c'est OK
        pistes:

        1/Si tu as mis le nom réel de ton classeur cible, vérifie l'orthographe (attention aux espaces...;)
        2/ essaie en mettant le chemin avant d'ouvrir "exemple"
        dim chemin as string
        chemin=thisworbook.path &"\"
        Workbooks.Open Filename:=chemin & "exemple.xlsx
        "


        mais je t'avoue que je suis perplexe !

        tu dis le résultat des courses
        0
    2. gu95
       
      Avec le chemin cela marche niquel.

      Merci beaucoup pour votre aide et votre rapidité :)
      0
      1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320 > gu95
         
        Bon WE :o)
        0
    3. gu95 Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
       
      Bonjour,

      J'avais encore une question, est-il possible de conserver la mise en forme des cellules du premier fichier BDD lorsque les données sont rapatriées dans le fichier "exemple"?

      Merci encore par avance,
      0