IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

[VBA] Copier une plage de cellules dans un fichier fermé [FAQ]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2004
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 24
    Points : 11
    Points
    11
    Par défaut [VBA] Copier une plage de cellules dans un fichier fermé
    Bonjour à tous.

    Je souhaite faire une manipulation qui n'est apparemment pas vraiment courante.

    J'aimerais à partir d'un fichier Excel (1) pouvoir mettre à jour une plage de cellule dans un autre fichier Excel (2) à partir d'un troisième fichier Excel (3) qui serait la source.
    Ces trois fichiers sont dans répertoires différends et 1 et 2 sont dans des dossiers placés sur un serveur (accessible via un réseau donc).

    J'aimerais ne pas avoir à "ouvrir" les fichiers 2 et 3.

    Impossible de trouver comment je pourrais écrire mon code.

    Quelqu'un a-t-il une solution a proposer ?

    Merci.

  2. #2
    Membre actif
    Avatar de repié
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    335
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 335
    Points : 281
    Points
    281
    Par défaut
    Je ne pense pas que tu puisse le faire sans ouvrir le fichier mais tu peux par contre utiliser la fonction qui permet de bloquer la fenetre et donc de ne pas afficher à l'écran l'ouverture des classeurs 2 et 3.

    Mais par contre je suis désolé je ne trouve plus le nom de la fonction mais il y a déja des sujets qui en ont parlé...

    Je vais la chercher
    Pti Pié

  3. #3
    Membre actif
    Avatar de repié
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    335
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 335
    Points : 281
    Points
    281
    Par défaut
    Voilà j'ai trouvé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.ScreenUpdating = False
    Donc tu met cette fonction, tu ouvres les fichiers qui t'interresse, tu fait la copie, tu fermes les fichier puis tu mes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.ScreenUpdating = True
    J'espere que ca devrai t'aller!
    Pti Pié

  4. #4
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 144
    Points
    20 144
    Par défaut
    bonsoir

    cet exemple permet de transférer les données entre 2 classeurs fermés
    "Classeur1_Fermé.xls" est le classeur source . toutes les données de la Feuil1 sont récuperees dans la requete
    Classeur2_Fermé.xls" est le classeur destination . les données recuperees sont ajoutées a la suite des enregistrements existants

    ps
    le classeur contenant la macro et les 2 classeurs fermés sont dans le meme repertoire

    il faut activer la référence Microsoft ActiveX Data Object 2.x Library


    bien entendu ce n'est qu'un exemple et il faudra que tu l'adaptes à ton projet


    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
    38
    39
    40
    41
    42
    43
    Sub tranfertEntreClasseursFermes()
    Dim Cn As New ADODB.Connection
    Dim oProdRS As New ADODB.Recordset, oRS As ADODB.Recordset
    Dim oConn As ADODB.Connection
    Dim j As Integer
     
    '------------------------------------------------------------------
    ' "Classeur1_Fermé.xls" est le classeur source
    Cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
    "Data Source=" & ThisWorkbook.Path & "\Classeur1_Fermé.xls;" & _
    "Extended Properties=""Excel 8.0;HDR=NO;"""
     
    'les donnees sources sont dans la Feuil1 du classeur "Classeur1_Fermé.xls"
    oProdRS.Open "SELECT * FROM [Feuil1$]", Cn, adOpenStatic
     
     
    '------------------------------------------------------------------
    ' "Classeur2_Fermé.xls" est le classeur destination
    Set oConn = New ADODB.Connection
    oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
    "Data Source=" & ThisWorkbook.Path & "\Classeur2_Fermé.xls;" & _
    "Extended Properties=""Excel 8.0;HDR=NO;"""
     
    'les donnees sont à placer dans la Feuil1 du classeur "Classeur2_Fermé.xls"
    Set oRS = New ADODB.Recordset
    oRS.Open "Select * from [Feuil1$]", oConn, adOpenKeyset, adLockOptimistic
     
    '------------------------------------------------------------------
    'transfert des données
    Do While Not (oProdRS.EOF)
        oRS.AddNew
            For j = 0 To oRS.Fields.Count - 1
            oRS.Fields(j) = oProdRS.Fields(j).Value
            Next j
        oRS.Update
        oProdRS.MoveNext
    Loop
     
    oProdRS.Close
    Cn.Close
    oRS.Close
    oConn.Close
    End Sub


    bonne soiree
    michel

  5. #5
    Nouveau membre du Club
    Inscrit en
    Juillet 2005
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 23
    Points : 28
    Points
    28
    Par défaut
    Bonsoir, c'est super ça, de pouvoir écrire dans des fichiers fermés.

    Après avoir essayer ton code, j'ai une petite question: Comment est-ce qu'on fait pour écrire les données à un endroit voulu ? car là ça copie des données mais un peu n'importe où, et ça ne copie pas toutes les données.

    N'y a t'il pas un moyen de copier par exemple la valeur d'une cellule précise pour la mettre dans le deuxième fichier à dans une autre cellule choisie ?

  6. #6
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 144
    Points
    20 144
    Par défaut
    bonjour

    dans mon precedent message j'ai bien précisé qu'il ne s'agissait que d'un exemple


    "ça copie des données mais un peu n'importe où, et ça ne copie pas toutes les données"
    ...ç'est que ton classeur n'est pas structuré comme une base de données ...


    sinon, pour extraire une plage specifique d'un classeur fermé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    RangeSource = "B5:E10"
    Feuille = "Feuil1"
     
    Set ADOCommand = New ADODB.Command
        With ADOCommand
            .ActiveConnection = ADOConnection
            .CommandText = "SELECT * FROM `" & Feuille & "$" & RangeSource & "`"
        End With
     
    Set ADORecordSet = New ADODB.Recordset
    ADORecordSet.Open ADOCommand, , adOpenKeyset, adLockOptimistic
     
    Set ADORecordSet = ADOConnection.Execute("`" & Feuille & "$" & RangeSource & "`")

    et un exemple pour ecrire dans la cellule A1 d'un classeur fermé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Set Cd = New ADODB.Command
    Cd.ActiveConnection = Cn
     
    Cd.CommandText = "SELECT * from `Feuil1$A1:A1`"
     
    Set Rst = New ADODB.Recordset
    Rst.Open Cd, , adOpenKeyset, adLockOptimistic
     
    Rst(0).Value = " ma donnée"
    Rst.Update
     
    Cn.Close

    bonne journée
    michel

  7. #7
    Nouveau membre du Club
    Inscrit en
    Juillet 2005
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 23
    Points : 28
    Points
    28
    Par défaut
    Merci SilkyRoad, c'est sympas, je vais essayer ça dès que possible.

    A+


Discussions similaires

  1. Copier une plage de cellules dans un autre fichier
    Par Naoned005 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 14/04/2012, 17h02
  2. Copier une plage de cellule dans un autre fichier
    Par bilou_12 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 11/04/2012, 21h31
  3. Copier une plage de cellules dans un fichier fermé
    Par COCONUT2 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 31/07/2007, 17h23
  4. [VBA-E] Copier une plage de cellules avec critère
    Par jfamiens dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 13/06/2006, 16h34
  5. [VBA-E]Copier une serie de cellules dans une autre feuille
    Par Tartenpion dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 10/03/2006, 17h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo