Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/01/2012, 23h39   #1
Membre habitué
 
Avatar de zangaloni
 
Étudiant
Inscription : mars 2009
Messages : 464
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mars 2009
Messages : 464
Points : 114
Points : 114
Par défaut copier une feuille sur un classeur fermé

Bonsoir,
En cherchant comment écrire sur un classeur fermé, je suis tombé sur le code suivant :
Code :
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
Sub exportDonneeDansCelluleClasseurFerme()
    Dim Cn As ADODB.Connection
    Dim Cd As ADODB.Command
    Dim Rst As ADODB.Recordset
    Dim Fichier As String
 
    Fichier = "C:\Documents and Settings\mimi\dossier\LeClasseur.xls"
 
    Set Cn = New ADODB.Connection
    Cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=" & Fichier & ";" & _
        "Extended Properties=""Excel 8.0;HDR=No;"";"
 
    Set Cd = New ADODB.Command
    Cd.ActiveConnection = Cn
    Cd.CommandText = "SELECT * FROM [Feuil1$G30:G30]"
 
    Set Rst = New ADODB.Recordset
    Rst.Open Cd, , adOpenKeyset, adLockOptimistic
    Rst(0).Value = "Donnée test"
    Rst.Update
 
    Cn.Close
    Set Cn = Nothing
    Set Cd = Nothing
    Set Rst = Nothing
End Sub
Le code permet en effet d'écrire sur une cellule.
Ce que je cherche c'est de pouvoir copier le contenu de toute la feuille ou au moins le contenu d'une grande plage de données.
__________________
il faut être patient et ambitieux
bonne chance à tout le monde
zangaloni est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 08/01/2012, 04h15   #2
Expert Confirmé
 
Homme Philippe
ex Observeur CGG / Analyste prog.
Inscription : juin 2006
Messages : 1 715
Détails du profil
Informations personnelles :
Nom : Homme Philippe
Localisation : France, Finistère (Bretagne)

Informations professionnelles :
Activité : ex Observeur CGG / Analyste prog.

Informations forums :
Inscription : juin 2006
Messages : 1 715
Points : 3 655
Points : 3 655
Salut, lire et adapter http://silkyroad.developpez.com/VBA/...sFermes/#LIV-D
__________________
Pensez à Voter, d'avance merci. ( Pouces en bas à la droite de Citer )
Balisez votre code après l'avoir indenté sous Excel via Smart Indenter
Autre utilitaire : MZ Tools 3.0 VBA

Contribution : Excel / Word / PDF avec Adobe Acrobat Pro / PDFCreator 1 2
kiki29 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 08/01/2012, 12h12   #3
Membre habitué
 
Avatar de zangaloni
 
Étudiant
Inscription : mars 2009
Messages : 464
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mars 2009
Messages : 464
Points : 114
Points : 114
Bonjour,

J'ai bien vu cet exemple, le problème c'est que moi je n'utilise pas access.

Je n'utilise que des classeurs excel.
Mon besoin est de transmettre une feuille de données ou tout simplement une plage de données d'un classeur ouvert à un classeur fermé.

Je vais essayer de remplacer access par la plage que je veux copier, pour voir si ça donne quelque chose.
zangaloni est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2012, 13h02   #4
Expert Confirmé
 
Homme Philippe
ex Observeur CGG / Analyste prog.
Inscription : juin 2006
Messages : 1 715
Détails du profil
Informations personnelles :
Nom : Homme Philippe
Localisation : France, Finistère (Bretagne)

Informations professionnelles :
Activité : ex Observeur CGG / Analyste prog.

Informations forums :
Inscription : juin 2006
Messages : 1 715
Points : 3 655
Points : 3 655
Re, à combiner avec http://silkyroad.developpez.com/VBA/...sFermes/#LIV-A
__________________
Pensez à Voter, d'avance merci. ( Pouces en bas à la droite de Citer )
Balisez votre code après l'avoir indenté sous Excel via Smart Indenter
Autre utilitaire : MZ Tools 3.0 VBA

Contribution : Excel / Word / PDF avec Adobe Acrobat Pro / PDFCreator 1 2
kiki29 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2012, 16h49   #5
Membre habitué
 
Avatar de zangaloni
 
Étudiant
Inscription : mars 2009
Messages : 464
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mars 2009
Messages : 464
Points : 114
Points : 114
J'ai beau essayer de combiner mais ça ne marche pas.

Je récapitule mon besoin, est de copier des données de mon classeur ouvert pour les coller dans un classeur fermé.

Merci de m'aider.
zangaloni est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2012, 16h57   #6
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 849
Points : 16 849
Envoyer un message via Skype™ à bbil
ben si ton classeur est fermé il suffit de l'ouvrir comme cela tu te retrouve avec 2 classeurs ouvert...
Utiliser ADO pour accéder à un classeur excel n'as vraiment de l'intérêt que dans le cas ou tu ne fait pas cela depuis excel...
bbil est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 12/01/2012, 12h40   #7
Membre habitué
 
Avatar de zangaloni
 
Étudiant
Inscription : mars 2009
Messages : 464
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mars 2009
Messages : 464
Points : 114
Points : 114
Oui, j'ai essayé ceci aussi, avec le code suivant
Code :
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
38
39
40
41
42
43
44
45
46
47
Sub output_action()
 
'
' output_action Macro
'
Dim chemin1 As String
Dim chemin As String
'
 
chemin = ThisWorkbook.Sheets("Tableau de bord").Range("E3").Value
 
chemin1 = chemin
 
Workbooks("Output_Action.xls").Sheets("Output_Action").Range("A:HI").ClearContents
 
 
    With Workbooks("Output_Action.xls").Sheets("Output_Action").QueryTables.Add(Connection:=Array( _
        "OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Password="""";User ID=Admin;Data Source=" & chemin1 & "" _
        , _
        ";Mode=Share Deny Write;Extended Properties=""HDR=YES;"";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet" _
        , _
        " OLEDB:Database Password="""";Jet OLEDB:Engine Type=35;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet O" _
        , _
        "LEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="""";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Data" _
        , _
        "base=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False" _
        ), Destination:=Workbooks("Output_Action.xls").Sheets("Output_Action").Range("A1"))
        .CommandType = xlCmdTable
        .CommandText = Array("OutPut_Actions$")
        .Name = "DonnéesExternes_1"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .PreserveColumnInfo = True
        .SourceDataFile = chemin1
        .Refresh BackgroundQuery:=False
    End With
 
End Sub
Mais je n'arrivais pas à enregistrer mon classeur.
message d'erreur "classeur non enregistré".

Bonjour,

Afin d'atteindre mon but(copier les données vers un classeur fermé) et en s'inspirant de l'idée d'ouverture et fermeture du classeur, j'ai utilisé le code suivant :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Sub OutPutr_Action()
 
    Application.DisplayAlerts = False
    Application.ScreenUpdating = False
 
    Dim titre As String
    Dim wbk1 As Workbook
    Dim wbk2 As Workbook
    Dim chemin As String
 
    'Chemin complet du classeur fermé
    titre = ThisWorkbook.Sheets("Tableau de bord").Range("E18").Value
 
    Set wbk1 = ThisWorkbook
    Set wbk2 = Workbooks.Open(titre) ' jouvre le classeur (titre)
 
    wbk2.Sheets("Feuil1").Range("A1:AJ500").Value = wbk1.Sheets("OutPut_Actions").Range("A1:AJ500").Value
    wbk2.Close
 
End Sub
je n'ai pas d'erreur signalé, mais mon fichier de réception réside vide.
zangaloni est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 18h20   #8
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 849
Points : 16 849
Envoyer un message via Skype™ à bbil
pour sauver un classeur lors de la fermeture il faut mettre a true le paramètre saveChange

bbil est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 12/01/2012, 19h23   #9
Membre habitué
 
Avatar de zangaloni
 
Étudiant
Inscription : mars 2009
Messages : 464
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mars 2009
Messages : 464
Points : 114
Points : 114
C'est exactement ce qui manquait.
Merci beaucoup
__________________
il faut être patient et ambitieux
bonne chance à tout le monde
zangaloni est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h52.


 
 
 
 
Partenaires

Hébergement Web