Ecrire dans classeur fermé partagé excel 2007

Résolu
zeguedoua Messages postés 2 Date d'inscription   Statut Membre Dernière intervention   -  
pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

J'ai pris cette procédure sur le net :

Sub EcrireFermé()
'
Dim chemin$, NomFich$
Dim classeur As Workbook
Dim base As Range

chemin = "d:\Mondossier\"
NomFich = "FichierFermé.xlsx"
Set classeur = GetObject(chemin & NomFich)
Set base = classeur.Sheets("Essai").Range("H2")
base = "Ecrire dans cellule"
MsgBox base

Workbooks(NomFich).Close False
'
End Sub

Je n'arrive pas à écrire dans la cellule base = Range("H2") du fichier fermé. Le message s'affiche correctement dans MsgBox

Merci pour votre aide et bonne journée

zeguedoua

5 réponses

  1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Bonjour,
    Pour lire et écrire dans un classeur fermé grâce à excel, voir ce tutoriel
    0
  2. zeguedoua Messages postés 2 Date d'inscription   Statut Membre Dernière intervention  
     
    Merci pijaku

    J'ai adapté le code comme suit :

    Sub ExportDonneeDansCelluleClasseurFerme()
        
        Dim Cn As ADODB.Connection
        Dim Cd As ADODB.Command
        Dim Rst As ADODB.Recordset
        Dim Fichier As String
        
        Fichier = "e:\ClasseurFermé.xlsx"
        
        Set Cn = New ADODB.Connection
        '--- Connection ---
        With Cn
            .Provider = "Microsoft.Jet.OLEDB.4.0"
            .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Fichier & ";Extended Properties=""Excel 12.0;HDR=YES;"""
            .Open
        End With
        
        Set Cd = New ADODB.Command
        Cd.ActiveConnection = Cn
        Cd.CommandText = "SELECT * FROM [Liste$D2:D2]"
        
        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


    Mais je n'arrive pas à modifier la cellule D2. Le message "Erreur 3021" BOF ou EOF est égal à True s'affiche. La commande Rst(0).Value = "Donnée test" est sélectionnée au debbogage. Au passage quel est le role des différents variables (en particulier Rst et Rst(0)) ?
    Merci et à bientot

    zeguedoua
    0
  3. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    bonjour

    macro à adapter (XL2000)

    Sub ecrire_cellule_dans_fermé()
    'écrit la valeur de "G2" dans classeur fermé
    
    Dim source As Object
    Dim externe As Object
    Dim fichier As String, onglet As String, nom_plage As String, texte_SQL As String
    
    
    onglet = "ecrire" 'à adapter
    ' ouvre la  connexion avec la database "source" dans le classeur excel fermé
    fichier = ActiveWorkbook.Path & "\fermé_ado.xls" ' à adapter
    Set source = CreateObject("ADODB.Connection")
    source.Open "Provider = Microsoft.Jet.OLEDB.4.0;" & _
                    "data source=" & fichier & ";" & _
                    "extended properties=""Excel 8.0;HDR=No;"";"
                    
    nom_plage = "B2:B2" 'à adapter
    ' requete SQL de la cellule de destination; "nom_plage" est une "vraie-fausse base _
    de données": une étiquette,une ligne
    texte_SQL = "SELECT * FROM [" & onglet & "$" & nom_plage & "]"
    Set externe = CreateObject("ADODB.Recordset")
    externe.Open texte_SQL, source, adOpenKeyset, adLockOptimistic
        'externe.MoveFirst
        externe(0).Value = Range("G2").Value 'a adapter
        externe.Update
     
     externe.Close
     source.Close
     Set externe = Nothing
     Set source = Nothing
     
    MsgBox "opération terminée"
    End Sub
    
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      salut,
      Merci Michel_m
      A+
      0
    2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      ci joint un vieil exemple (2004) d'initialisation à l'utilisation de liaison dans fichiers fermés (excel-access)
      https://www.cjoint.com/?3IxpbqSPaPc
      0
    3. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Merci.
      J'y jetterais un oeil... quand j'aurais 5 minutes.
      A+
      0
    4. zeguedoua
       
      Bonsoir michel

      Merci pour la procédure qui marche très bien sous excel 2003. Mais dès que je passe à excel 2007, <<la ligne externe(0).Value = Range("G2")>> n'est pas reconnue et un bug se produit. J'ai téléchargé les fichiers joints qui marchent impec sous 2003. Je débute en connexion adodb, alors je n'hésiterai pas à poser souvent des questions.
      Merci et A+

      zeguedoua
      0
    5. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      Bonjour

      je viens d'essayer c'est OK mais, à ma grande surprise avec XL2007, il faut quand m^me cocher la référence (menu outils-références de VBE) microsoft activeX Data object 2.0
      ce "cochage" n'est pas nécessaire avec les versions XL<2007

      mystère et boule de gomme...
      0
  4. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Bonjour tous,
    Ce que tu veux faire n'est pas possible mais rien ne t'empêche d'ouvrir le classeur, de le mettre invisible et de travailler dessus ?
    A+
    0
    1. zeguedoua
       
      Merci lermite222
      Je posterai un message concernant un autre sujet. L'on m'a conseillé access, Je le trouve un peu compliqué pour moi. Mais je vais m'y mettre et exporter vers excel dont les tableaux ont un meilleur design.
      A+
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. momouiz Messages postés 35 Statut Membre 3
     
    salut tout le monde je me retrouve encore avec une run-time error '3021' avec ce code ci :
    Sub spider_graph()
    Dim Cn As ADODB.Connection
    Dim Cd As ADODB.Command
    Dim Rst As ADODB.Recordset
    Dim fichier As String

    fichier = "C:\Documents and Settings\mslimani060313\Desktop\Tests\Radar spider graph de risque.xlsx"
    Set Cn = New ADODB.Connection
    With Cn
    .Provider = "Microsoft.Jet.OLEDB.4.0"
    .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
    & fichier & ";Extended Properties=""Excel 12.0;HDR=YES;"""
    .Open
    End With

    Set Cd = New ADODB.Command
    Cd.ActiveConnection = Cn
    Cd.CommandText = " SELECT * FROM [Spider Graph $F43:F43]"

    Set Rst = New ADODB.Recordset

    Rst.Open Cd, , adOpenKeyset, adLockOptimistic
    If Rst.EOF Then
    MsgBox "matching data"
    Rst(0).Value = "avec bdd tout est possible"
    Else
    MsgBox "no matching data"
    End If
    Rst.Update
    Cn.Close

    Set Cn = Nothing
    Set Cd = Nothing
    Set Rst = Nothing

    End Sub

    Private Sub spider_graph_2()

    'écrit la valeur de "G2" dans classeur fermé

    Dim source As Object
    Dim externe As Object
    Dim fichier As String, onglet As String, nom_plage As String, texte_SQL As String

    onglet = "Spider Graph " 'à adapter
    ' ouvre la connexion avec la database "source" dans le classeur excel fermé
    fichier = "C:\Documents and Settings\mslimani060313\Desktop\Tests\Radar spider graph de risque.xlsx" ' à adapter
    Set source = CreateObject("ADODB.Connection")
    With source
    .Provider = "Microsoft.Jet.OLEDB.4.0"
    .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
    & fichier & ";Extended Properties=""Excel 12.0;HDR=YES;"""
    .Open
    End With
    'source.Open "Provider = Microsoft.Jet.OLEDB.4.0;" & _
    ' "data source=" & fichier & ";" & _
    ' "extended properties=""Excel 12.0;HDR=No;"";"

    nom_plage = "B2:B2" 'à adapter
    ' requete SQL de la cellule de destination; "nom_plage" est une "vraie-fausse base _
    de données": une étiquette,une ligne
    texte_SQL = "SELECT * FROM [" & onglet & "$" & nom_plage & "]"
    Set externe = CreateObject("ADODB.Recordset")
    externe.Open texte_SQL, source, adOpenKeyset, adLockOptimistic
    'externe.MoveFirst
    externe(0).Value = Range("G2").Value 'a adapter
    externe.Update

    externe.Close
    source.Close
    Set externe = Nothing
    Set source = Nothing

    MsgBox "opération terminée"
    End Sub

    quelqu'un pour m'aider s'il vous plait ?
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Bonjour,
      Pour que ta demande soit traitée dans les meilleures conditions, je te recommande d'ouvrir un nouveau sujet.
      0