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 :

Recopier des formules dans classeur fermé


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2013
    Messages : 22
    Par défaut Recopier des formules dans classeur fermé
    Bonjour,

    je voudrais savoir si il est possible de copier des formules dans un classeur fermé:

    J'ai au départ une petite base qui contient des données avec des formules, je souhaite ajouter les données de la petite base à la suite dans la base principale . Ces 2 bases ont la même architecture, j'arrive à ajouter des données brutes mais je n'arrive pas à recopier les formules (Les formules sont remplacées par les valeurs brutes) . Est-il possible d'ajouter ces données en tant que formules?
    Voici mon code permettant de recopier les valeurs brutes, je mets aussi en pièce jointe l'architecture de ma base:


    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    Sub export_vers_tdb_oi()
     
    Dim dernlign, dernlignsource As Integer
      Dim Cn, cndest As ADODB.Connection
        Dim Rst, rst2 As ADODB.Recordset
        Dim propriete As Properties
        dim texte_SQL, texte_sql2 As String
        Dim i, j As Integer
     
            Application.DisplayAlerts = False
     
       set Cn = New ADODB.Connection
     
           'On établit la connection avec la base TDB_OI
     
     
       Cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=" & ThisWorkbook.Path & "\" & ThisWorkbook.Name & ";Extended Properties=Excel 8.0;"
        requête SQL
     
       texte_SQL = "Select * from [temp_eotp$]"
     
    Set Rst = New ADODB.Recordset 'Création objet rst( permettant d'interroger la base)
     
        Set Rst = Cn.Execute(texte_SQL, dbOpenForwardOnly, dbReadOnly) 'Exécution requête SQL
     
     
         Set cndest = New ADODB.Connection
         With cndest
            .Provider = "Microsoft.Jet.OLEDB.4.0"
     
                .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
                & chemin_base & ";Extended Properties=""Excel 12.0;HDR=YES;"""
            .Open
        End With
     
     
     
        Set rst2 = New ADODB.Recordset 'Création objet rst( permettant d'interroger la base)
        texte_sql2 = "Select * from [" & onglet_source & "$] "
     
     
       rst2.Open texte_sql2, cndest, adOpenKeyset, adLockOptimistic
     
     
    dernlignsource = Sheets("temp_eotp").Cells(1000000, 1).End(xlUp).Row
    j = 1
     
     
     
     
    Do While Not j > dernlignsource
    On Error Resume Next
      rst2.AddNew
             For i = 0 To rst2.Fields.Count
     
             rst2.Fields(i) = Rst.Fields(i).Value
     
             dernlign = dernlign + 1
             Next i
             j = j + 1
     
     
     
     
     
        Rst.MoveNext
        Loop
     
       rst2.Update
     
     
       Rst.Close 'On détruit l'objet rst
        Set Rst = Nothing
     
       rst2.Close 'On détruit l'objet rst
        Set rst2 = Nothing
     
     
       Cn.Close 'On ferme la connection
        Set Cn = Nothing
    Fichiers attachés Fichiers attachés

  2. #2
    Membre confirmé
    Homme Profil pro
    Architecte matériel
    Inscrit en
    Janvier 2013
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte matériel
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2013
    Messages : 113
    Par défaut
    Salut,

    Est ce que tu pourrais mettre ton code entre balises Pour que cela soit plus lisible

    je voudrais savoir si il est possible de copier des formules dans un classeur fermé:
    Je crois que les 2 classeurs doivent être ouverts.
    Donc tu ouvres tes deux classeurs tu copies ce que tu souhaites puis tu fermes celui dont tu n'as plus besoin.

    Pour copier les formules, je ne sais pas si cela peut correspondre, mais regarde du coté de PasteSpecial

    J'espère que ça te donneras quelques pistes

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2013
    Messages : 22
    Par défaut
    Merci pour cette réponse rapide,

    je vais de suite modifier mon message afin qu'il soit plus visible.

    En fait javais pensé à la méthode pastespecial mais j'aimerais si possible l'éviter car je voudrais laisser le classeur fermé. N'est il pas possible d'appliquer cette méthode aux recordsets?
    Merci

  4. #4
    Membre confirmé
    Homme Profil pro
    Architecte matériel
    Inscrit en
    Janvier 2013
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte matériel
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2013
    Messages : 113
    Par défaut
    je vais de suite modifier mon message afin qu'il soit plus visible.
    Dsl, j'ai sans doute mal donné l'exemple, regarde ce lien par mettre la balise CODE
    Tu devrais enlever tous les ' sinon tout va êtres en commentaire
    http://club.developpez.com/aidenouve...es/Balises.gif

    je voudrais laisser le classeur fermé. N'est il pas possible d'appliquer cette méthode aux recordsets?
    Pour moi tu ne peux pas copier coller des données avec un classeur fermé. Tu dois ouvrir copier/coller fermer.

    Je suis "débutant" en VBA et je ne vois pas ce qu'est recordsets. J'espère que tu auras de l'aide de d'autre membres

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2013
    Messages : 22
    Par défaut
    Ahah merci, je vais quand même chercher un peu encore.

    Les recordsets permettent de considérer Excel comme une base de données Access, en tous cas c'est comme ça que je le vois:
    c'est à dire qu'on va interroger la base de données avec du SQL. On peut aller récupérer des données dans un classeur fermé mais aussi écrire dedans comme on le voit avec mon code. Le fournisseur d'accès change selon la version d'excel. le fournisseur suivant "Provider=Microsoft.ACE.OLEDB.12.0" fonctionne uniquement avec Excel 2007. Mon code permet donc d'aller écrire dans le fichier fermé mais les formules sont traduites en données brutes. J'aimerais pouvoir les récupérer en tant que formule.

  6. #6
    Membre Expert Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Par défaut
    salut à vous, il y a un excellent tuto sur les classeurs fermés sur le site voici le lien:
    http://silkyroad.developpez.com/VBA/ClasseursFermes/

    il me semble qu'il est dit qu'on ne peut pas modifier une cellule qui contient une formule.
    d'ailleurs un recordset contient des données 'brutes', non?? pas des formules...

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2013
    Messages : 22
    Par défaut
    C'est marqué que si aucun paramètre n'est récupéré en effet les données seront des données brutes mais il existe justement peut être un paramètre.

Discussions similaires

  1. Réponses: 10
    Dernier message: 02/02/2012, 16h08
  2. Réponses: 1
    Dernier message: 28/11/2011, 19h48
  3. récuperer des données de classeurs fermés dans un classeur
    Par peygase83 dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 12/02/2009, 00h03
  4. [Formule]Macro pour masquer des formules dans une cellule
    Par Hellx dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/04/2007, 08h21
  5. [VBA-E]recopier des cellules dans un fichier
    Par Lex O'Mil dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 19/04/2007, 21h01

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