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 - 25 janv. 2016 à 17:24
gu95 Messages postés 3 Date d'inscription Statut Membre Dernière intervention - 25 janv. 2016 à 17:24
A voir également:
- Rapatrier des données sous conditions vers un autre classeur
- Fuite données maif - Guide
- Trier des données excel - Guide
- Supprimer les données de navigation - Guide
- Windows 7 vers windows 10 - Accueil - Mise à jour
- Excel validation des données liste - Guide
2 réponses
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
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
Bonjour
proposition
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
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.
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.
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"
mais je t'avoue que je suis perplexe !
tu dis le résultat des courses
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
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,