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. 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+
    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. 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. 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,

            Pour ADODB, je mets ceci:

            'Microsoft ActiveX Data Objects x.x Library
            'Microsoft ActiveX Data Objects RecordSet x.x Library
            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.