Rapatrier des données sous conditions vers un autre classeur

Résolu/Fermé
gu95 - 24 nov. 2015 à 14:11
gu95 Messages postés 3 Date d'inscription mardi 12 janvier 2016 Statut Membre Dernière intervention 25 janvier 2016 - 25 janv. 2016 à 17:24
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!

A voir également:

2 réponses

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
25 nov. 2015 à 08:18
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
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
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
4 déc. 2015 à 12:05
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
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
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303 > gu95
4 déc. 2015 à 15:52
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
Avec le chemin cela marche niquel.

Merci beaucoup pour votre aide et votre rapidité :)
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303 > gu95
4 déc. 2015 à 16:05
Bon WE :o)
0
gu95 Messages postés 3 Date d'inscription mardi 12 janvier 2016 Statut Membre Dernière intervention 25 janvier 2016
25 janv. 2016 à 17:24
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