Traitement error '3021'

Résolu
momouiz Messages postés 35 Statut Membre -  
momouiz Messages postés 35 Statut Membre -
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. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Re,

    Pour ADODB, je mets ceci:

    'Microsoft ActiveX Data Objects x.x Library
    'Microsoft ActiveX Data Objects RecordSet x.x Library
    1
  2. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    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+
    0
  3. momouiz Messages postés 35 Statut Membre 3
     
    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 !
    0
  4. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    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+
    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
     
    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é
    0
  7. momouiz Messages postés 35 Statut Membre 3
     
    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.
    0