Traitement error '3021'

Résolu
salut tout le monde alors voila dans l'idée je voudrais transposer des données de mon classeur actif dans un tableau qui est dans un classeur fermé pour cela j'utilise le code suivant :
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
Rst.MoveLast
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

seulement d'aprés mon code il n'y a aucun enregistrement, comment puis-je résoudre ce probléme ? svp

6 réponses

  1. Merci à toi f894009, je suis complétement idiot, j'utilise les recordset x.x Library, mais j'avais oublié au préalable d'activer la référence, ça marche en effet superbement bien.

    Encore merci.
    1. Re,

      Pour ADODB, je mets ceci:

      'Microsoft ActiveX Data Objects x.x Library
      'Microsoft ActiveX Data Objects RecordSet x.x Library
      1. est ce qu'il faut un fichier special XL ?, car je vien d'adapter mon code mais Rst(0) me renvoi toujours "", je ne comprends pas pourquoi .
        Je pense qu'il doit y avoir une ref que je n'ai pas encore activé
        1. Re,

          ce code, avec un fichier a moi, marche:

          Sub test()
              Dim Cn As ADODB.Connection
              Dim Cd As ADODB.Command
              Dim Rst As ADODB.Recordset
              
              
              Fichier = "D:\_Docs_Prog_Excel\ADODB_excel\fichier_test.xlsx"
              
              Set Cn = New ADODB.Connection
              Set Cd = New ADODB.Command
              Set Rst = New ADODB.Recordset
              
              With Cn
                  .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
                                      & Fichier & ";Extended Properties=""Excel 12.0;HDR=YES;"""
                  .Open
              End With
          
              Cd.ActiveConnection = Cn
              Cd.CommandText = " SELECT * FROM [Fichier1$A2:D43]"
          
              Rst.Open Cd, , adOpenKeyset, adLockOptimistic
              
              If Rst(0) <> "" Then
                  Range("A2").CopyFromRecordset Rst
              Else
                  MsgBox "no matching data"
              End If
              Cn.Close
          
              Set Cn = Nothing
              Set Cd = Nothing
              Set Rst = Nothing
          End Sub


          Adaptez a votre cas et essayez

          A+
          1. bonjour f894009, et d'abord merci pour ta réponse, j'ai essayer ce que tu as dis en testant comme ceci : if Rst(0) <> "" then
            Rst(0) .value = "blablablab"
            Rst.update
            end if
            cela ne fonctionne pas même en mettant la condition aprés la ligne Rst(0).value ) "blablabalb"
            En fait ce que j'essaye de faire c'est de copier un tableau d'un classeur ouvert vers un classeur fermé qui traitera les données et me sortira un graphe.

            meric de ton aide !
            1. Bonjour,

              ligne: .Provider = "Microsoft.Jet.OLEDB.4.0" ne sert a rien---->a enlever

              ligne: .Movelast a enlever

              Dans votre cas, vous ne pouvez pas tester eof, cela n'est pas tout a fait comme en access.
              Vous devez tester le recordset, ici: Rst(0)<>"" a la place de Rst.EOF
              La ligne: Rst.Update a mettre dessous la ligne Rst(0).Value = "avec bdd tout est possible"

              A+