Bonjour,
Voilà, j'ai 3 classeurs (C1.xls avec 2 feuilles (MAJ, Données) et C2.xls avec plusieurs feuilles (Données, Tri,...), C3 qui contient des codes utilisant les données de C2)
Le classeur C2 contient plusieurs formules assez "complexes" du style RechercheV, analyse de listes déroulantes, etc....donc à chaque ouverture j'ai "mon petit sablier" qui prend un peu de temps....
Je dois copier la feuille "Données" du C1 dans la feuille "Données" du C2 et mettre à jour le classeur C2.
Jusqu'à présent, j'utilise un classeur nommé "Miseajour.xls" dans lequel je mets le code
Merci SilkyRoad
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 Sub RequeteClasseurFerme() Dim Cn As ADODB.Connection Dim Fichier As String Dim NomFeuille As String, texte_SQL As String Dim Rst As ADODB.Recordset 'Définit le classeur fermé servant de base de données Fichier = "C:\C1.xls" 'Nom de la feuille dans le classeur fermé NomFeuille = "Données" Set Cn = New ADODB.Connection '--- Connection --- With Cn .Provider = "Microsoft.Jet.OLEDB.4.0" .ConnectionString = "Data Source=" & Fichier & _ ";Extended Properties=Excel 8.0;" .Open End With '----------------- 'Définit la requête. '/!\ Attention à ne pas oublier le symbole $ après le nom de la feuille. texte_SQL = "SELECT * FROM [" & NomFeuille & "$]" Set Rst = New ADODB.Recordset Set Rst = Cn.Execute(texte_SQL) 'Ecrit le résultat de la requête dans la cellule A2 Range("A2").CopyFromRecordset Rst '--- Fermeture connexion --- Cn.Close Set Cn = Nothing End Sub
Donc dans la feuille active de "Miseajour", j'ai copié les cellules de "Données" de C1.xls.
Je souhaite maintenant les coller, et/ou les "envoyer" dans le C2, feuille "Données" et mettre à jour C2....
J'ai essayé avec
, mais ça ne fonctionne pas...
Code : Sélectionner tout - Visualiser dans une fenêtre à part Range("A2").PasteFromRecordset Rst
Pour la mise à jour, j'utilise
La mise à jour fonctionne (actuellement, mon code ouvre C2, ("petit sablier", je copie les cellules importées de C1, qui sont dans la Feuil1 de "Miseajour", je colle dans C2 ("petit sablier"), je ferme C2 ("petit sablier"), ensuite je reprend le code de SilkyRoad en changeant
Code : Sélectionner tout - Visualiser dans une fenêtre à part UpdateLinks:=3
par
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Fichier = "C:\C1.xls" 'Nom de la feuille dans le classeur fermé NomFeuille = "Données"
(en fait cette manip me permet "d'enlever" les formules (un peu comme un "x.DIF" (très utile plus tard dans mon classeur C3 qui contient lui aussi des listes déroulantes et formules....), je copie les cellules de "Feuil2" de "Miseajour" et colle dans C3.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Fichier = "C:\C2.xls" 'Nom de la feuille dans le classeur fermé NomFeuille = "Tri"
Voilà pour ma manip actuelle...que je trouve "lourde" et surtout longue (beaucoup de "petits sabliers"....).
Je pense que la méthode de connexion sur des classeurs fermés pourrait permettre de gagner du temps, mais je n'arrive pas à trouver le code....
En fait, il me manque le code du "coller" les "Données" de C1 vers C2, et la mise à jour de C2...(c'est-à-dire sans être obligé de l'ouvrir....)
Des idées ???
Merci,
A+
Partager