je vous joins un fichier qui je pense est assez explicite
en gros je voudrais exporter des lignes d'un fichier sources vers 3 fichiers destinataires avec un critère qui se trouve en colonne G (tous les fichiers ont la même structure, la page d'export se nomme " generale" sur le fichier source et sur les fichiers destinataires
je ne sais pas adapter la formule RECHERCHER ou peut-être une autre, je ne suis pas assez compétent pour dire ou faire cela
par avance merci
Apparemment, ton fichier n'aura pas suffi à expliciter ta demande ...
On pourrait arriver à comprendre le début, s'il n'y avait que ton fichier "source" et les 3 fichiers "destinataires". Je dis on pourrait, parce que ce n'est pas certain!
De ce que j'ai compris, ne suffirait-il pas:
d'activer les filtres automatiques dans ton fichier source
de filtrer les données avec, comme critère, un 'T' en colonne G
de copier-coller les données ainsi filtrées dans un classeur "Trot"
... et de recommencer la même chose avec les "Haies" et les "Plat"
Ce que ton fichier ne permet pas de comprendre:
pourquoi les 3 tableaux "destinataires" contiennent-ils des données qui ne figurent pas dans le tableau "source"?
pourquoi des couleurs différentes dans chaque tableau?
que vient faire "dans le jeu de quilles" le tableau "Stats annuelles" à droite?
les RECHERCHEV utilisées dans ce 5[SUP]e[/SUP] tableau ne pourront fonctionner que s'il n'y a jamais deux fois la même date dans le fichier source. Le résultat obtenu n'est jamais que l'équivalent d'un copier-coller du tableau source (sans les couleurs). Quel en est l'intérêt?
Ce dont je suis à peu près certain, c'est que des formules (comme la RECHERCHEV) ne suffiront pas: à mon avis on devrait utiliser des formules matricielles. Rien ne dit non plus que des formules pourront se mettre à jour dans les fichiers destinataires, si le classeur source n'est pas ouvert en même temps. Une autre solution serait d'utiliser des macros ... mais c'est une autre paire de manches!
Un filtre serait tout de même beaucoup plus simple, non?
je crois que pour la clarté il est plus judicieux que je t'envoi deux fichiers, le fichier source et un des fichiers destinataires, ainsi et si tu me comprends mieux, et que c'est faisable pour un, c'est faisable pour les deux autres en changeant la variable.
Je pense que tu comprends que je veux transférer les lignes du fichier source dans chacun des trois fichiers destinataire en fonction du critère de la colonne G soit en O soit en P soit en T (le nom des deux autres fichiers destinataires stats plat Annuel et stats haies Annuel)
Comment as-tu obtenu ton fichier trot annuel? En faisant des copier-coller au fur et à mesure? As-tu testé le filtre automatique?
Dans ton fichier "trot annuel", les dates commencent en 2007, alors que dans le "stats annuel", les données ne sont reprises que depuis 2010 ... on ne saurait pas obtenir par quelque technique que ce soit, des données qui ne figurent pas dans la source!?
Quoi qu'il en soit, pour illustrer ce que je disais plus tôt, voici ce que je te propose de tester. Ouvre le fichier stats annuels; dans le fichier stats-trot annuel, en I2, colle cette formule:
valide avec la combinaison de touches Ctrl+Shift+Enter et recopie la formule à droite jusqu'en O2. Applique un format date en I2, puis sélectionne I2:O2 et recopie la plage jusqu'en O1160
... tu devrais voir le temps de calcul s'allonger de manière significative. Avec ce type de formule, ce sera le cas, chaque fois que cette feuille sera recalculée.
Vois-tu ce que je veux dire?
Teste maintenant, sur ta machine, si le fichier source peut-être fermé, sans que les formules n'affichent d'erreur.
Dans une cellule vide du fichier trot, fais un simple calcul (p. ex. =5*2) au moment où tu valides, combien de temps pour afficher le résultat?
En outre, la formule que j'ai proposée ne fonctionnera que si tu es au moins en Excel 2007 (le titre de la discussion indique XL 2013, mais tes fichiers sont des .xls )
Modeste a bien raison, le filtre automatique s'impose ici.
Par macro c'est assez simple :
Code:
Private Sub Workbook_Open()
Dim chemin$, source$, critere$, w As Worksheet, P As Range
chemin = ThisWorkbook.Path & "\" 'à adapter
source = "stats Annuel" 'à adapter
critere = "T" 'à adapter
Application.ScreenUpdating = False
Application.DisplayAlerts = False 'si le fichier source est ouvert
With Feuil1 'CodeName
.Range("A2:G" & .Rows.Count).Delete xlUp 'RAZ
source = Dir(chemin & source & ".xls*")
If source = "" Then MsgBox "Fichier source introuvable...": Exit Sub
Set w = Workbooks.Open(chemin & source).Sheets(1) '1ère feuille du fichier source
If w.FilterMode Then w.ShowAllData 'si un filtre est en place
Set P = w.Range("A1:G" & w.Range("A" & w.Rows.Count).End(xlUp).Row)
P.AutoFilter 7, critere
P.Copy .[A1]
w.Parent.Close False
With .UsedRange: End With 'actualise la barre de défilement
End With
End Sub
Edit 1 : ajouté If w.FilterMode Then w.ShowAllData
Edit 2 : ajouté With .UsedRange: End With pour actualiser la barre de défilement.
Mettez les 2 fichiers joints dans le même répertoire (le bureau) et ouvrez "stats trot. Annuel.xls".
j ai bien compris ce que tu m'expliques, mais je pense que nous allons simplifier la tache
sur chaque fichier destinataire j'ai la feuille arrivée, autant extraire les lignes T pour le fichier trot, les lignes O pour le fichier haies et les lignes P pour le fichier plat, donc si tu veux bien me faire la formule pour le fichier stats trot Annuel
et moi je l'adapterais en changeant le T en O ou en P
Par avance merci
Modeste a bien raison, le filtre automatique s'impose ici.
Par macro c'est assez simple :
Code:
Private Sub Workbook_Open()
Dim chemin$, source$, critere$, w As Worksheet, P As Range
chemin = ThisWorkbook.Path & "\" 'à adapter
source = "stats Annuel" 'à adapter
critere = "T" 'à adapter
Application.ScreenUpdating = False
Application.DisplayAlerts = False 'si le fichier source est ouvert
With Feuil1 'CodeName
.Range("A2:G" & .Rows.Count).Delete xlUp 'RAZ
source = Dir(chemin & source & ".xls*")
If source = "" Then MsgBox "Fichier source introuvable...": Exit Sub
Set w = Workbooks.Open(chemin & source).Sheets(1) '1ère feuille du fichier source
If w.FilterMode Then w.ShowAllData 'si un filtre est en place
Set P = w.Range("A1:G" & w.Range("A" & w.Rows.Count).End(xlUp).Row)
P.AutoFilter 7, critere
P.Copy .[A1]
w.Parent.Close False
End With
End Sub
Edit : ajouté If w.FilterMode Then w.ShowAllData
Mettez les 2 fichiers joints dans le même répertoire (le bureau) et ouvrez "stats trot. Annuel.xls".
1) le filtre automatique s'impose : je ne sais pas ce que c'est et encore bien moins m'en servir
2)B]Edit[/B] : ajouté If w.FilterMode Then w.ShowAllData ca c'est du latin que je ne comprends pas n'ayant pas atteint ce degré de connaissance.
3) en suivant vos recommandations (les les deux fichiers dans le bureau et ouvrir "stats trot. Annuel.xls".) j'y arrive et cela me prends jusqu'à fin mars mais pas plus loin, par exemple cela ne me prends pas le 1er avril 2016 et j ai fais des essais plus loin mais rien ne se transcrit (est ce une mauvaise manip de ma part)
Merci par avance
Cordialement
cela me prends jusqu'à fin mars mais pas plus loin, par exemple cela ne me prends pas le 1er avril 2016 et j ai fais des essais plus loin mais rien ne se transcrit (est ce une mauvaise manip de ma part)
Au lieu de 3 fichiers de destination on peut n'en utiliser qu'un seul.
Avec en J1 une liste de validation pour choisir le critère de filtrage.
La macro dans le code de la feuille :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Critere As Range, chemin$, source$, w As Worksheet, P As Range
Set Critere = [J1] 'cellule à adapter
If Intersect(Target, Critere) Is Nothing Then Exit Sub
chemin = ThisWorkbook.Path & "\" 'à adapter
source = "stats Annuel" 'à adapter
Application.ScreenUpdating = False
Application.DisplayAlerts = False 'si le fichier source est ouvert
Range("A2:G" & Rows.Count).Delete xlUp 'RAZ
source = Dir(chemin & source & ".xls*")
If source = "" Then MsgBox "Fichier source introuvable...": Exit Sub
Set w = Workbooks.Open(chemin & source).Worksheets(1) '1ère feuille du fichier source
If w.FilterMode Then w.ShowAllData 'si un filtre est en place
Set P = w.Range("A1:G" & w.Range("A" & w.Rows.Count).End(xlUp).Row)
If Critere <> "<tout>" And Critere <> "<vides>" And Critere <> "<zéros>" _
Then P.AutoFilter 7, Critere
If Critere = "<zéros>" Then P.AutoFilter 7, 0
If Critere = "<vides>" Then P.AutoFilter 7, ""
P.Copy [A1]
w.Parent.Close False
With Me.UsedRange: End With 'actualise la barre de défilement
End Sub
Sur les anciennes versions d'Excel, les listes de validation ne créent pas l'évènement Change.
On peut alors utiliser une ComboBox et ces macros :
Code:
Private Sub ComboBox1_GotFocus()
ComboBox1.List = Array("<tout>", "T", "P", "O", "<zéros>", "<vides>")
End Sub
Private Sub Combobox1_Change()
Dim chemin$, source$, critere$, w As Worksheet, P As Range
chemin = ThisWorkbook.Path & "\" 'à adapter
source = "stats Annuel" 'à adapter
critere = ComboBox1
Application.ScreenUpdating = False
Application.DisplayAlerts = False 'si le fichier source est ouvert
Range("A2:G" & Rows.Count).Delete xlUp 'RAZ
source = Dir(chemin & source & ".xls*")
If source = "" Then MsgBox "Fichier source introuvable...": Exit Sub
Set w = Workbooks.Open(chemin & source).Worksheets(1) '1ère feuille du fichier source
If w.FilterMode Then w.ShowAllData 'si un filtre est en place
Set P = w.Range("A1:G" & w.Range("A" & w.Rows.Count).End(xlUp).Row)
If critere <> "<tout>" And critere <> "<vides>" And critere <> "<zéros>" _
Then P.AutoFilter 7, critere
If critere = "<zéros>" Then P.AutoFilter 7, 0
If critere = "<vides>" Then P.AutoFilter 7, ""
P.Copy [A1]
w.Parent.Close False
With Me.UsedRange: End With 'actualise la barre de défilement
End Sub
que dire quand je vois ce que vous pouvez faire, et qui me laisse perplexe tellement cela semble évident pour vous
et que tout cela marche à la perfection.
les merci , les bravo sont tellement peu par rapport à ce que vous nous amenez en facilité, en gentillesse, que je ne sais plus quel mots employés pour vous remercier
A votre place Yves je n'utiliserais finalement qu'un seul fichier avec une feuille source et une feuille filtrée :
Code:
Private Sub ComboBox1_GotFocus()
ComboBox1.List = Array("<tout>", "T", "P", "O", "<zéros>", "<vides>")
End Sub
Private Sub Combobox1_Change()
Dim w As Worksheet, critere$, P As Range
Set w = Feuil2 'CodeName de la feuille source
critere = ComboBox1
Application.ScreenUpdating = False
Range("A2:G" & Rows.Count).Delete xlUp 'RAZ
If w.FilterMode Then w.ShowAllData 'si un filtre est en place
Set P = w.Range("A1:G" & w.Range("A" & w.Rows.Count).End(xlUp).Row)
If critere <> "<tout>" And critere <> "<vides>" And critere <> "<zéros>" _
Then P.AutoFilter 7, critere
If critere = "<zéros>" Then P.AutoFilter 7, 0
If critere = "<vides>" Then P.AutoFilter 7, ""
P.Copy [A1]
w.AutoFilterMode = False 'retire le filtre
With Me.UsedRange: End With 'actualise la barre de défilement
End Sub
En fait et pour tout vous dire la finalité de ce fichier vous trouverez les explications dans le fichier qui se trouve
a ce lien Download - TransferNow
le fichier que vous me proposez c'est en fait la mercedes des temps moderne, sans chauffeur, ni carburant
Merci mille fois de lire les petites explications sur le fichier joint
je pense ce lien et ce fichier serait plus utile pour faire ce que je vous demande
En effet j'ai essayé de faire ce que vous dites, mais il me répondait " fichier introuvable"
Papa disait mieux un qui sait que 10 qui cherchent ....je peux vous dire que j'ai la une F1
je ne sais comment vous remercier .....les mots me manquent moi le fana de chiffres je suis
gâté ...MERCI MILLE FOIS