Récupérer données dans un autre classeur fermé

mistick

XLDnaute Nouveau
Bonjour à tous!

Je débute en VBA, et j'ai besoin pour un projet de créer une macro qui aille pêcher des données dans un autre classeur, même si celui-ci n'est pas ouvert.
Les deux classeurs à relier ont tous deux des feuilles différentes. On va appeller ces classeurs "machin" (le classeur qui doit récupérer les donées) et "truc" (le classeur source). La macro ne porte que sur la feuille 4 du classeur machin, mais portera sur toutes les feuilles du classeur truc.

Les données à récupérer doivent rester dans cet autre classeur également, il s'agit d'une copie.

Ma macro doit utiliser une fonction IF :

IF la cellule A2 de la feuille 4 du classeur "machin" s'intitule "blablabla1"

- THEN la colone A à partir de la ligne 3 de la feuille 4 du classeur "machin" doit prendre les valeurs de la colone A de la feuille 3 du classeur "truc" à partir de la ligne 2.

- ET la colone B à partir de la ligne 3 de la feuille 4 du classeur "machin" doit également prendre les valeurs de la colone D de la même feuille 3 du classeur "truc" à partir de la ligne 2 également.

Et j'ai 36 possibilitées différentes (les "blablabla") pour ma cellule A2 du classeur "machin".


J'ai essayé d'être la plus claire possible, je ne peux pas envoyer mes classeurs car mon étude est confidentielle (chui en stage).


Grand merci à tous ceux qui voudront bien se pencher sur mon problème...

Cordialement,
 
Dernière édition:

mistick

XLDnaute Nouveau
Re : Récupérer données dans un autre classeur fermé

Avec l'éditeur de macro j'ai réussi à récupérer mes données et à les coller, j'ai intégré la fonction if dedans, tout ce qu'il me manque c'est comment faire tout ça sans que mon classeur source s'ouvre...

Une idée?
 

néné06

XLDnaute Accro
Re : Récupérer données dans un autre classeur fermé

Bonjour mistick et bienvenue sur le Forum,

je peux dire que ton explication comporte beaucoup de Blabla....s , de trucs et de machins.
Je comprends très bien la confidentialité des classeurs , mais avec un exemple en pièce jointe, avec des données "BIDONS", nous pourrions mieux cerner tes besoins et l'architecture de ton programme.

Cordialement

René
 

mistick

XLDnaute Nouveau
Re : Récupérer données dans un autre classeur fermé

Bonjour René, merci de t'intéresser à mon problème =)

Je peux expliquer le principe je pense :

En fait c'est des simulations sur données technico écononomiques de cas-types d'exploitations agricoles.
Le classeur source contient les données, le classeur d'arrivée contient les calculs (le simulateur).

J'ai créé une macro qui permet à l'utilisateur de sélectionner le cas type sur le simulateur, et je voudrais que en fonction du nom du cas type qui arrive ainsi dans ma cellule A2, les données propres à ce cas type se placent en dessous.

En code ce que j'ai fait ça donne :
Avec : 01 Plaine (analyse groupe CER France 01 - Chambre Agriculture 01) => le nom du cas type sélectionné
Bovins lait : la feuille qui contient le cas-type
B3:B75,D3:D75 : les cellules à copier
TEST V4 : le simulateur

'01 Plaine (analyse groupe CER France 01 - Chambre Agriculture 01)
If Range("A2") = "01 Plaine (analyse groupe CER France 01 - Chambre Agriculture 01)" Then
Windows("fichier cas-types.xls").Activate
Sheets("Bovins Lait ").Select
Range("B3:B75,D3:D75").Select
Range("D3").Activate
Selection.Copy
Windows("TEST V4.xls").Activate
Range("A3").Select
ActiveSheet.Paste
End If


Donc ça, ça marche très bien si les 2 classeurs sont ouverts, et je voudrais arriver à le faire avec fichier cas-types.xls fermé.
Si ça ne suffit pas comme info, n'hésitez pas à me le dire...
 
Dernière édition:

néné06

XLDnaute Accro
Re : Récupérer données dans un autre classeur fermé

Bonjour mistick,

Tu as déjà 66 visites sur ton méssage et pas de réponse concluante ??

Je pense que ton explication est trop vague, tu sais ce que tu recherches mais tu n'arrives pas à nous faire passer l'info.
Comme précédemment , un fichier en pièce jointe nous évitera de "déchiffrer" ta demande.
Pour info, tu devras ouvrir les fichiers et les refermer (par programmation) pour puiser les données nécessaires .

A+
 

Eric 45

XLDnaute Occasionnel
Re : Récupérer données dans un autre classeur fermé

Bonsoir à tous
Bonsoir
mistick

Je n'ai pas testé, mais un bout de code :
Code:
Option Explicit
Code:
Sub test()
Dim Chemin As String, NomFich As String
Dim classeur As Workbook
Dim base As Range

  Chemin = "d:\"
  NomFich = "source.xls"
  Set classeur = GetObject(Chemin & NomFich)
' boucle sur les cellules
For i = 3 To 100 '100 => exemple
  Set base = classeur.Sheets(3).Range("a" & i - 1)
  Set base2 = classeur.Sheets(3).Range("d" & i - 1)
  MsgBox base.Value 'pour vérification de la cellule du fichier source
  classeur -machin.Sheet(4).Range("a" & i) = base.Value
  classeur -machin.Sheet(4).Range("b" & i) = base2.Value
Next i
  Workbooks(NomFich).Close False

End Sub
Le classeur "source.xls" est ouvert, mais invisible

Mais avec un bout de fichier ........
Eric


 

Staple1600

XLDnaute Barbatruc
Re : Récupérer données dans un autre classeur fermé

Bonsoir/Bonjour à tous

Mistick:
As-tu déposé tes yeux tout en bas de cette page ?
Là ou ils pourront lire ces deux mots Discussions similaires
et là on tu pourras cliquer cinq fois avant que le coq ait chanté trois fois ;)
 

mistick

XLDnaute Nouveau
Re : Récupérer données dans un autre classeur fermé

Bonjour à tous,

un très grand merci à toi Eric 45, j'ai adapté un peu ton code parce que ça marchait pas tip top, ça donne :


VB:
    Dim nom_Ktype As String
    nom_Ktype = Range("A2")
Dim Chemin As String, NomFich As String
Dim classeur As Workbook
Dim classeur2 As Workbook
Dim base As Range

  Chemin = "S:\ZONES PERSONNELLES\docs de travail\"
  NomFich = "fichier cas-types2.xls"
  Set classeur = GetObject(Chemin & NomFich)


'Bovins viande 
    ''71 Broutards repoussés (Réseau d'élevage Charolais) => nom du cas-type à récupérer
       If nom_Ktype = "71 Broutards repoussés (Réseau d'élevage Charolais)" Then
For i = 3 To 100 
  Set base = classeur.Sheets("Bovins Viande").Range("b" & i)
  Set base2 = classeur.Sheets("Bovins Viande").Range("c" & i)

    Windows("TEST V4.xls").Activate
Range("a" & i) = base.Value
Range("b" & i) = base2.Value

Next i
  Workbooks(NomFich).Close False
    End If


J'ai du utiliser Windows.Activate parce qu'il n'arrivait pas à revenir à ma feuille d'origine (ou plutot je n'arrivais pas à lui dire autrement^^)
A ton avis, est-ce que ça risque de merder si j'essaie ça avec une autre version d'Excel (2010)?

Autre question je ne comprends pas pourquoi tu mets false et pas true à la ligne Workbooks(NomFich).Close ?





Staple1600, je préfère garder mes yeux à leur place plutôt que les déposer n'importe où, je risquerais de ne pas les retrouver (haha). Blague à part, j'ai fouiné un peu partout sur internet à la recherche d'une réponse que je pourrais adapter à ma question, mais jusque là je n'avais point trouvé (où du moins rien compris à ce qui était proposé, mes connaissances en VBA étant très limitées)... Mais à toutes fins utiles je vais aller me promener dans ces sujets, merci.
 
Dernière édition:

Discussions similaires

Réponses
20
Affichages
276

Statistiques des forums

Discussions
312 617
Messages
2 090 252
Membres
104 467
dernier inscrit
Sklerijenn59