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 :

Ecrire sur un classeur fermé VBA/ADO


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 6
    Par défaut Ecrire sur un classeur fermé VBA/ADO
    Bonsoir à tous,

    Je sais que c'est le week-end, que certains d'entre vous aimeraient reposer leurs neurones, mais je suis frappé d'un certain goût du sadisme et ait décidé de poster tout de même mon problème.

    A chaque moment de la journée, j'aimerais pouvoir enregistrer plusieurs cellules d'une même ligne de mon classeur actif (disons la plage A1:A7) sur un classeur fermé qui servirait de base de données, d'où l'utilité de ADO ici.

    Malgré plusieurs tentatives, impossible de trouver le code miracle :


    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
    Sub InsertRecord(ByVal nom As String, Byval prenom As String, ByVal age As Integer)
        Dim Cnx As ADODB.Connection
        Dim Fichier As String, Feuille As String, strSQL As String
     
        Fichier = "C:\archive.xls" 'chemin complet du fichier fermé
        Feuille = "ok" 'Onglet où les données doivent être insérées
     
     
        Set Cnx = New ADODB.Connection
     
        With Cnx
            .Provider = "MSDASQL"
            .ConnectionString = "Driver={Microsoft Excel Driver (*.xls)};" & _
                "DBQ=" & Fichier & "; ReadOnly=False;"
            .Open
        End With
     
        'Les données doivent être indiquées dans le même ordre que les champs dans la base de données.
        strSQL = "INSERT INTO [" & Feuille & "$] " _
            & "VALUES ( '" & nom "', '" & prenom & "', "  & age  & ")"
     
        Cnx.Execute strSQL
     
        Cnx.Close
        Set Cnx = Nothing
    End Sub
    Je suis maintenant perdu, comme Jack. Aidez-moi, braves John Locke. Je vous remercie d'avance ..

  2. #2
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 6
    Par défaut
    Re Bonsoir les forumeurs ! Je mets à jour : finalement j'ai opté pour un truc moins chiant et plus dans mes cordes, à savoir ouvrir le fichier cible, copier/coller les données et le fermer aussitôt.

    Voici mon code pour le moment :

    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 test()
    Dim WbkDest As Workbook, LigDest As Integer, LignDest As Integer
     
    Application.ScreenUpdating = False
     
    Set WbkDest = Workbooks.Open("C:\excel\Gest-Ent.xls")
     
    With WbkDest.Sheets("Ventes")
        LigDest = .Range("A" & Rows.Count).End(xlUp).Row + 1
     
    End With
     
    With WbkDest.Sheets("Ventes")
        LignDest = .Range("A" & Rows.Count).End(xlUp).Row + 1
     
    End With
     
    With ThisWorkbook.Sheets("Clients")
        Range("I6:L6").Select
        Range("I6:L6").Copy
        WbkDest.Sheets("Ventes").Range("A" & LigDest).PasteSpecial Paste:=xlPasteValues
        Application.CutCopyMode = False
    End With
     
    With ThisWorkbook.Sheets("Clients")
        Range("I6:L6").Select
        Range("I6:L6").Copy
        WbkDest.Sheets("Ventes").Range("A" & LignDest).PasteSpecial Paste:=xlPasteValues
        Application.CutCopyMode = False
    End With
     
    WbkDest.Close True
    Set WbkDest = Nothing
     
    Application.ScreenUpdating = True
     
    End Sub
    Mon problème dorénavant est le suivant : la macro va bien coller les valeurs sur la ligne suivant la dernière non-vide.
    En revanche, cela ne colle rien du tout puisque les cellules cibles sont vides alors que la plage I6:M6 est bien remplie sur mon fichier source.

    Auriez-vous une idée ou une piste pour m'aiguiller s'il-vous-plaît ? Merci beaucoup, bonne nuit à vous !

  3. #3
    Membre Expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Par défaut
    Bonjour,

    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
    Option Explicit
    Sub test()
    Dim WbkDest As Workbook
    Dim WsDest As Worksheet, WsSource As Worksheet
    Dim LigDest As Long
     
        Application.ScreenUpdating = False
        Set WsSource = ThisWorkbook.Sheets("Clients")
        Set WbkDest = Workbooks.Open("C:\excel\Gest-Ent.xls")
        Set WsDest = WbkDest.Sheets("Ventes")
        LigDest = WsDest.Range("A" & Rows.Count).End(xlUp).Row + 1
     
        WsSource.Range("I6:L6").Copy
        WsDest.Range("A" & LigDest).PasteSpecial Paste:=xlPasteValues
        Application.CutCopyMode = False
     
        WbkDest.Close True
        Set WsDest = Nothing
        Set WbkDest = Nothing
        Set WsSource = Nothing
        Application.ScreenUpdating = True
     
    End Sub
    Cordialement.

  4. #4
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 6
    Par défaut
    Merci beaucoup gFZT82, ton code marche nikel ! J'aurais dû ajouter le WsSource pour me simplifier la vie, tu gères !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2003] copier une feuille sur un classeur fermé
    Par zangaloni dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 12/01/2012, 20h23
  2. [XL-2010] ecrire dans un classeur fermé depuis un formulaire
    Par letsProg dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 19/10/2011, 12h03
  3. Requête sur un classeur fermé
    Par Avtomav dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 13/08/2009, 18h48
  4. [FAQ VBA Excel] Somme d'une ligne d'un tableau sur un classeur fermé
    Par nox1492 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 08/12/2007, 13h54

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