Traitement de deux fichiers Excel par un troisième

Ben Becker

XLDnaute Nouveau
Bonjour à vous tous,

Je viens vous solliciter pour un problème sur lequel je n’arrive pas à avancer et après avoir chercher sur ce forum, je n’ai pas trouvé de réponses à mon problème.

J’ai 3 fichiers Excel, deux sont des bases de données et le troisième me sert à la présentation des chiffres souhaités.

En fait je souhaite récupérer dans mon fichier « Traitement par dépôt » toutes les lignes de mon fichier « Base de données » qui correspondent aux numéros commande du fichier « Commandes ». Je souhaite également que ces lignes soient rangées dans les bons onglets, exemple : les lignes de l’Entrepôt Paris dans l’onglet « Paris ».

Je pensais pouvoir passer par des formules pour y arriver : recherchev avec conditions,…. Mais ma « Base de données » fais plus de 50000 lignes et Excel m’explique gentiment que je lui en demande trop. Donc je voulais passer par une macro et notamment du Vlook, mais mes compétences ne me permettent pas d’obtenir ce que je veux et je vais de message d’erreur en message d’erreur.

Ayant du mal à expliquer clairement mon problème, je vous joins les 3 fichiers, sachant que les résultats que je souhaite obtenir sont mis dans le tableau « Traitement ».

Merci par avance

Ben
 

Pièces jointes

  • Traitement par dépôts.xls
    37 KB · Affichages: 110
  • Commandes du 24-03.xls
    30.5 KB · Affichages: 96
  • Base de données du 24-03.xls
    17.5 KB · Affichages: 144

Ben Becker

XLDnaute Nouveau
Re : Traitement de deux fichiers Excel par un troisième

En complément de mon exposé d'hier, vous trouverez ci-dessous mon code VBA qui ne fonctionne pas mais qui a au moins le mérite de décrire la logique que je cherche (en tout cas je l'espère). Merci d'avance pour votre aide.

Ben


Sub test()
Application.ScreenUpdating = False

l = 11
For i = 2 To Range("G65536").End(xlUp).Row

num_cmde = Workbooks("D:\...\Base de données\Base de données du 24-03.xls").Sheets("A").Cells(i, 1)
depot = Workbooks("D:\...\Base de données\Base de données du 24-03.xls").Sheets("A").Cells(i, 2)
code_article = Workbooks("D:\...\Base de données\Base de données du 24-03.xls").Sheets("A").Cells(i, 3)
quantite = Workbooks("D:\...\Base de données\Base de données du 24-03.xls").Sheets("A").Cells(i, 4)


If Application.WorksheetFunction.VLookup(Workbooks("D:\...\Base de données\Base de données du 24-03.xls").Sheets("A").Cells(i, 1), Workbooks("D:\...\Listing commandes\Commandes du 24-03.xls").Sheets("A").Columns("B:B"), 1, False) = Workbooks("D:\...\Base de données\Base de données du 24-03.xls").Sheets("A").Cells(i, 1) And Workbooks("D:\...\Base de données\Base de données du 24-03.xls").Sheets("A").Cells(i, 2).Value = "Entrepôt Rouen" Then
Sheets("Rouen").Select
Cells(l, 1) = num_cmde
Cells(l, 2) = code_article
Cells(l, 3) = quantite
l = l + 1
ElseIf Application.WorksheetFunction.VLookup(Workbooks("D:\...\Base de données\Base de données du 24-03.xls").Sheets("A").Cells(i, 1), Workbooks("D:\...\Listing commandes\Commandes du 24-03.xls").Sheets("A").Columns("B:B"), 1, False) = Workbooks("D:\...\Base de données\Base de données du 24-03.xls").Sheets("A").Cells(i, 1) And Workbooks("D:\...\Base de données\Base de données du 24-03.xls").Sheets("A").Cells(i, 2).Value = "Entrepôt Toulouse" Then
Sheets("Toulouse").Select
Cells(l, 1) = num_cmde
Cells(l, 2) = code_article
Cells(l, 3) = quantite
l = l + 1
ElseIf Application.WorksheetFunction.VLookup(Workbooks("D:\...\Base de données\Base de données du 24-03.xls").Sheets("A").Cells(i, 1), Workbooks("D:\...\Listing commandes\Commandes du 24-03.xls").Sheets("A").Columns("B:B"), 1, False) = Workbooks("D:\...\Base de données\Base de données du 24-03.xls").Sheets("A").Cells(i, 1) And Workbooks("D:\...\Base de données\Base de données du 24-03.xls").Sheets("A").Cells(i, 2).Value = "Entrepôt Paris" Then
Sheets("Paris").Select
Cells(l, 1) = num_cmde
Cells(l, 2) = code_article
Cells(l, 3) = quantite
l = l + 1
ElseIf Application.WorksheetFunction.VLookup(Workbooks("D:\...\Base de données\Base de données du 24-03.xls").Sheets("A").Cells(i, 1), Workbooks("D:\...\Listing commandes\Commandes du 24-03.xls").Sheets("A").Columns("B:B"), 1, False) = Workbooks("D:\...\Base de données\Base de données du 24-03.xls").Sheets("A").Cells(i, 1) And Workbooks("D:\...\Base de données\Base de données du 24-03.xls").Sheets("A").Cells(i, 2).Value = "Entrepôt Rennes" Then
Sheets("Rennes").Select
Cells(l, 1) = num_cmde
Cells(l, 2) = code_article
Cells(l, 3) = quantite
l = l + 1
ElseIf Application.WorksheetFunction.VLookup(Workbooks("D:\...\Base de données\Base de données du 24-03.xls").Sheets("A").Cells(i, 1), Workbooks("D:\...\Listing commandes\Commandes du 24-03.xls").Sheets("A").Columns("B:B"), 1, False) = Workbooks("D:\...\Base de données\Base de données du 24-03.xls").Sheets("A").Cells(i, 1) And Workbooks("D:\...\Base de données\Base de données du 24-03.xls").Sheets("A").Cells(i, 2).Value = "Entrepôt Lyon" Then
Sheets("Lyon").Select
Cells(l, 1) = num_cmde
Cells(l, 2) = code_article
Cells(l, 3) = quantite
l = l + 1
End If


Next i
Application.ScreenUpdating = True
End Sub
 

skoobi

XLDnaute Barbatruc
Re : Traitement de deux fichiers Excel par un troisième

Bonjour Ben Becker,

J'ai préparé quelque chose mais le fichier est au boulo, je n'ai pas eu le temps de te l'envoyer :eek:. Je te l'enverrai lundi si tu veux.

Bon WE.
 

Ben Becker

XLDnaute Nouveau
Re : Traitement de deux fichiers Excel par un troisième

Bonjour le forum, skoobi,

désolé pour ma réponse tardive, je te remercie de t'être penché sur mon problème, ce serait une grande aide si en effet tu pouvais me l'envoyer car je fait du sur-place.

Ben
 

skoobi

XLDnaute Barbatruc
Re : Traitement de deux fichiers Excel par un troisième

Bonjour,

Ci-joint une proposition.
Pour que le code dans le fichier "Traitement par dépôts.xls" via le bouton "Bilan" fonctionne il faut que les 3 fichiers soient ouverts.
Je n'ai pas eu le temps de mettre des explications dans le code.
Si besoin refait signe.
Bonne journée.
 

Pièces jointes

  • Ben Becker.zip
    23.2 KB · Affichages: 73

ChTi160

XLDnaute Barbatruc
Re : Traitement de deux fichiers Excel par un troisième

Salut Ben Becker
Bonjour le Fil (Skoobi)
Bonjour le Fourm

Arff je me suis penché sur le problème et en voyant la réponse de Skoobi ,je me suis rendu compte que nous avions utilisé la même méthode , mais à l'envers Lol
je suis parti des données pour aller vers les feuilles et lui l'inverse lol

je ne joins que le fichier Commandes du 24-03.xls et comme pour Skoobi il faut que les trois fichiers soient ouvert et comme lui pas encore de commentaires Arfff
Le Fichier : Regarde la pièce jointe Commandes du 24-03.zip
Bonne journée
 

Ben Becker

XLDnaute Nouveau
Re : Traitement de deux fichiers Excel par un troisième

Re,

un grand merci à vous deux pour vos réponses apportées. C'est exactement ce que je voulais, et en plus je viens de comprendre vos codes ce qui est une source de satisfaction pour moi.
Des deux codes, je vais retenir celui de skoobi qui est mis sur le fichier que je souhaitais.

J'en profite tout de même pour évoquer le sujet des fichiers ouverts : l'idéal pour moi à la base était de ne pas ouvrir les 2 fichiers "commande" & "base de données"...est-ce vraiment beaucoup plus compliqué de créer un code pour que le résultat s'affiche sans les ouvrir ?
Si la réponse est oui, n'en tenez pas compte vous m'avez largement aidé.

Ben
 

skoobi

XLDnaute Barbatruc
Re : Traitement de deux fichiers Excel par un troisième

Re bonjour,
Hello Jean-Marie :),

J'en profite tout de même pour évoquer le sujet des fichiers ouverts : l'idéal pour moi à la base était de ne pas ouvrir les 2 fichiers "commande" & "base de données"...est-ce vraiment beaucoup plus compliqué de créer un code pour que le résultat s'affiche sans les ouvrir ?
Si la réponse est oui, n'en tenez pas compte vous m'avez largement aidé.
Non, à partir du moment où tu ne compte pas faire de modification dans ces fichiers, ce n'est pas compliqué.
Il faut pour cela utiliser GetObject.
En fait, le fichier est "chargé sans être ouvert visuellement" dans une variable pour pouvoir y récupérer ce que l'on veut et ensuite il faut absolument pensé à le fermer (en gras)
Voici un exemple qui écrit la cellule A2 de la feuille 1 du fichier Essai.xls se trouvant sur C dans un message:

Code:
Sub test()
Dim Wb As Workbook
[SIZE=3][B]Set Wb = GetObject("C:\Essai.xls")[/B][/SIZE]
MsgBox Wb.Sheets(1).[A2].Value
[SIZE=3][B]Wb.Close[/B][/SIZE]
End Sub
Bonne soirée.
 

Discussions similaires

Statistiques des forums

Discussions
312 321
Messages
2 087 245
Membres
103 498
dernier inscrit
FAHDE