extraction d'un fichier vers un autre

  • Initiateur de la discussion Initiateur de la discussion NICOALBERT
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

NICOALBERT

XLDnaute Occasionnel
Bonjour a tt le forum.

Je viens vers vous car je suis entrain de réaliser une base de donnée sur le turf. et je voudrais importer des informations d'un fichier vers un autre selon critère. j'ai deux fichier le 1er:"2008" qui est la base, et le 2èm: "Etude cheval". ce que je voudrais c'est que selon le nom du cheval se trouvant en I3 du fichier Etude cheval, on extrait tous les lignes ou le nom du cheval se trouve dans le fichier "2008" dans les feuilles 1 et 2.

Pouvez vous m'aider . en vous remerciant d'avance.
 

Pièces jointes

Re : extraction d'un fichier vers un autre

Bonjour à Tous,

Dans le classeur "Etude Cheval" chaque ligne trouver dans le classeur "2008" doit pouvoir se mettre a la ligne autant de fois que nécessaire.

j'ai tt essayer , même avec l'enregistreur de macro mais je ni arrive pas, pouvez vous m'aider?

merci a tous.
 
Re : extraction d'un fichier vers un autre

Bonjour NICOALBERT,

Le fichier "Etude cheval" ne paraît pas au point, il faut le revoir.

Avec au moins une liste déroulante (de validation) pour choisir le cheval...

Et des champs correspondant au fichier "2008"...

A+
 
Re : extraction d'un fichier vers un autre

Re,

Dans le fichier "Etude cheval.xls" :

1) j'ai créé la feuille "Liste" avec cette macro qui met à jour la liste des chevaux, sans doublons :

Code:
Private Sub CommandButton1_Click()
Dim d As Object, w As Worksheet, cel As Range
Set d = CreateObject("Scripting.Dictionary")
On Error Resume Next
For Each w In Workbooks("2008.xls").Worksheets
  For Each cel In w.Range("N2", w.Range("N65536").End(xlUp))
    If Not d.exists(cel.Value) Then d.Add cel.Value, cel.Value
  Next
Next
Range("A1").Resize(d.Count) = Application.Transpose(d.items)
Columns(1).Sort [A1], 1 'tri ascendant
End Sub

2) dans le code de la feuille "Cheval" :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Set Target = Target.Cells(1, 1)
If Target.Address <> "$I$3" Then Exit Sub
Dim lig As Integer, w As Worksheet, cel As Range
lig = 5
Rows("5:65536").Clear 'vide la plage de recopie
If Target = "" Then Exit Sub
Application.ScreenUpdating = False
On Error Resume Next
For Each w In Workbooks("2008.xls").Worksheets
  If Err Then MsgBox "Ouvrez le fichier '2008.xls' !!": Exit Sub
  For Each cel In w.Range("N2", w.Range("N65536").End(xlUp))
    If cel = Target Then
      cel.EntireRow.Copy Rows(lig)
      lig = lig + 1
    End If
  Next
Next
Rows("5:65536").WrapText = False 'évite les retours à la ligne
End Sub

La macro se déclanche quand on choisit un cheval dans la liste de validation en I3.

A+
 

Pièces jointes

Dernière édition:
Re : extraction d'un fichier vers un autre

Un grand merci , sa fonctionne très bien.

Mais est ce qu'il est possible de réaliser la même chose mais sans liste dèroulante , car dans mon fichier le nom du cheval se met en place automatiquement par une autre macro et j'ai des recherches sur toute la page. sur chaque Feuille j'ai 4 réunions de 9 courses chacune et 20 chevaux par courses. donc la je met un bout de fichier qui ne représente que la course N°1 de la réunion 1.

encore merci pour le temps que vous prenez à nous aider dans nos galère.
 

Pièces jointes

Re : extraction d'un fichier vers un autre

Bonsoir NICOALBERT,

Cette macro se lance quand on renseigne (ou valide) la cellule I3 et celles semblables plus bas en colonne I :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Set Target = Target.Cells(1, 1)
If Target.Offset(1) <> "Allocation" Then Exit Sub
Dim lig&, derlig&, w As Worksheet, cel As Range
lig = Target.Row + 2
derlig = Target.EntireColumn.Find("Allocation", After:=Target.Offset(1), LookIn:=xlValues).Row - 2
If derlig < lig Then derlig = 65536
Rows(lig & ":" & derlig).Clear 'vide la plage de recopie
If Target = "" Then Exit Sub
Application.ScreenUpdating = False
On Error Resume Next
For Each w In Workbooks("2008.xls").Worksheets
  If Err Then MsgBox "Ouvrez le fichier '2008.xls' !!": Exit Sub
  For Each cel In w.Range("N2", w.Range("N65536").End(xlUp))
    If cel = Target Then
      cel.EntireRow.Copy Rows(lig)
      If lig = derlig Then MsgBox "Dernière ligne disponible !": GoTo 1
      lig = lig + 1
    End If
  Next
Next
1 Rows(Target.Row + 2 & ":" & derlig).WrapText = False 'évite les retours à la ligne
End Sub

Noter que le repérage se fait par les cellules contenant "Allocation".

Fichier (2) joint.

A+
 

Pièces jointes

Re : extraction d'un fichier vers un autre

Bonjour NICOALBERT,

Vous avez bien dit "cheval et jockeys".

Voici la macro modifiée (en rouge) :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Set Target = Target.Cells(1, 1)
If Target.Offset(1) <> "Allocation" [COLOR="Red"]And Target.Offset(1) <> "CHEVAUX"[/COLOR] Then Exit Sub
Dim lig&, derlig&, w As Worksheet, cel As Range
lig = Target.Row + 2
derlig = [COLOR="red"]Columns("I")[/COLOR].Find("Allocation", After:=[COLOR="red"]Cells(Target.Row + 1, "I")[/COLOR], LookIn:=xlValues).Row - 2
If derlig < lig Then derlig = 65536
Rows(lig & ":" & derlig).Clear 'vide la plage de recopie
If [COLOR="red"]Cells(Target.Row, "I") = "" Or Cells(Target.Row, "N") = ""[/COLOR] Then Exit Sub
Application.ScreenUpdating = False
On Error Resume Next
For Each w In Workbooks("2008.xls").Worksheets
  If Err Then MsgBox "Ouvrez le fichier '2008.xls' !!": Exit Sub
  For Each cel In w.Range("N2", w.Range("N65536").End(xlUp))
    If [COLOR="red"]cel = Cells(Target.Row, "I") And cel.Offset(, 6) = Cells(Target.Row, "N")[/COLOR] Then
      cel.EntireRow.Copy Rows(lig)
      If lig = derlig Then MsgBox "Dernière ligne disponible !": GoTo 1
      lig = lig + 1
    End If
  Next
Next
1 Rows(Target.Row + 2 & ":" & derlig).WrapText = False 'évite les retours à la ligne
End Sub

A+
 
Re : extraction d'un fichier vers un autre

Re,

Bon, j'anticipe la demande suivante.

Cette macro édite la liste si les 2 critères, cheval (colonne I) et jockey (colonne N) sont renseignés, ou si un seul des deux est renseigné :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Set Target = Target.Cells(1, 1)
If Target.Offset(1) <> "Allocation" And Target.Offset(1) <> "CHEVAUX" Then Exit Sub
Dim lig&, derlig&, [COLOR="Red"]t1$, t2$,[/COLOR] w As Worksheet, cel As Range
lig = Target.Row + 2
derlig = Columns("I").Find("Allocation", After:=Cells(Target.Row + 1, "I"), LookIn:=xlValues).Row - 2
If derlig < lig Then derlig = 65536
Rows(lig & ":" & derlig).Clear 'vide la plage de recopie
[COLOR="Red"]t1 = Cells(Target.Row, "I"): t2 = Cells(Target.Row, "N")[/COLOR]
If t1 = "" [COLOR="red"]And[/COLOR] t2 = "" Then Exit Sub
Application.ScreenUpdating = False
On Error Resume Next
For Each w In Workbooks("2008.xls").Worksheets
  If Err Then MsgBox "Ouvrez le fichier '2008.xls' !!": Exit Sub
  For Each cel In w.Range("N2", w.Range("N65536").End(xlUp))
    If ([COLOR="red"]t1 = "" Or[/COLOR] cel = t1) And ([COLOR="red"]t2 = "" Or[/COLOR] cel.Offset(, 6) = t2) Then
      cel.EntireRow.Copy Rows(lig)
      If lig = derlig Then MsgBox "Dernière ligne disponible !": GoTo 1
      lig = lig + 1
    End If
  Next
Next
1 Rows(Target.Row + 2 & ":" & derlig).WrapText = False 'évite les retours à la ligne
End Sub

Edit : j'ai introduit les variables t1 et t2, la macro sera plus rapide.

A+
 
Dernière édition:
Re : extraction d'un fichier vers un autre

Bonjour,

un grand merci à JOB 75 pour le temps pris pour m'aider avec mon problème.Les différents programmes fonctionnent très bien sauf si on veut s'en servir pour des nombres (exemple le cheval CHELSEA HOTEL pour un poids de 58 KG , il ne me trouve pas de résultat alors qu'il y en a un)

Pourtant j'ai modifier le programme pour pour qu'il sélectionne la bonne colonne dans le classeur 2008,mais sa ne fonctionne pas.

Est ce normal , ou c'est moi qui mis prend très mal ce que je ne doute pas?

Cordialement NICOALBERT
 
Re : extraction d'un fichier vers un autre

Bonjour NICOALBERT,

Vous voulez donc une étude cheval + poids.

Faites la recherche en convertissant les nombres en texte (String) :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Set Target = Target.Cells(1, 1)
If Target.Offset(1) <> "Allocation" And Target.Offset(1) <> "CHEVAUX" Then Exit Sub
Dim lig&, derlig&, t1$, t2$, w As Worksheet, cel As Range
lig = Target.Row + 2
derlig = Columns("I").Find("Allocation", After:=Cells(Target.Row + 1, "I"), LookIn:=xlValues).Row - 2
If derlig < lig Then derlig = 65536
Rows(lig & ":" & derlig).Clear 'vide la plage de recopie
t1 = Cells(Target.Row, "I"): t2 = Cells(Target.Row, "N")
If t1 = "" And t2 = "" Then Exit Sub
Application.ScreenUpdating = False
On Error Resume Next
For Each w In Workbooks("2008.xls").Worksheets
  If Err Then MsgBox "Ouvrez le fichier '2008.xls' !!": Exit Sub
  For Each cel In w.Range("N2", w.Range("N65536").End(xlUp))
    If (t1 = "" Or cel = t1) And (t2 = "" Or [COLOR="Red"]CStr(cel.Offset(, 4))[/COLOR] = t2) Then
      cel.EntireRow.Copy Rows(lig)
      If lig = derlig Then MsgBox "Dernière ligne disponible !": GoTo 1
      lig = lig + 1
    End If
  Next
Next
1 Rows(Target.Row + 2 & ":" & derlig).WrapText = False 'évite les retours à la ligne
End Sub

A+
 

Pièces jointes

Re : extraction d'un fichier vers un autre

Bonjour,

je me retourne vers vous car j'ai un soucis, vos programme fonctionne très bien, et je vous en remercie.

Mais mon soucis c'est que cela fonctionne très bien avec le morceau de fichier que je vous ai joint. Mais avec la vrai base ( 20 Pages de 66 Colonnes et environ 30000 Lignes/page).Dès que je fait ma recherche exemple cheval N°1 sa m'efface tous ce qu'il y a en dessous même s'il n'y a que 5 résultats alors que j'ai prévue 85 lignes.

Pourriez vous m'aider .

Merci par avance.NICOALBERT
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
10
Affichages
1 K
Retour