Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/10/2011, 13h08   #1
Invité de passage
 
Homme
Étudiant
Inscription : octobre 2011
Messages : 4
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : octobre 2011
Messages : 4
Points : 0
Points : 0
Par défaut ecrire dans un classeur fermé depuis un formulaire

Bonjour a tous , je vous expose mon problème : j'ai une application à développer en VBA sous excel et son programme intégré pour le vba

en gros quand l'utilisateur ouvre le classeur excel mon programme apparait et propose un formulaire dans un userform :

http://imageshack.us/photo/my-images...rmulairez.png/

tout fonctionne à un soucis prés et pas des moindres , le but de cette application est d'automatisé l'enregistrement dans les déclarations d'accident de travail (dont le formulaire est une copie ) en gros une fois le formulaire renseigné la personne clique sur enregistré et un classeur excel fermé servant de base de donnée est renseigné , j'ai réussi à établir une connexion entre mes deux classeurs (celui contenant l'application vba et celui fermé ) je peux afficher ce qui est écris dans le classeur fermé pour cela j'utilise le code la :

Code :
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
Sub RequeteClasseurFerme()
    Dim Cn As ADODB.Connection
    Dim Fichier As String
    Dim NomFeuille As String, texte_SQL As String
 
    'Définit le classeur fermé servant de base de données
    Fichier = "C:\Documents and Settings\konce\Bureau\bdd.xlsx"
    'Nom de la feuille dans le classeur fermé
    NomFeuille = "Feuil1"
 
    Set Cn = New ADODB.Connection
 
    '--- Connexion ---
    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
    '-----------------
 
 
    '
    '... la requête ...
    '
    MsgBox ExecuteExcel4Macro("'C:\Documents and Settings\konce\Bureau\[bdd.xlsx]Feuil1'!R1C1")
    MsgBox ExecuteExcel4Macro("'C:\Documents and Settings\konce\Bureau\[bdd.xlsx]Feuil1'!R1C2")
    '--- Fermeture connexion ---
    Cn.Close
    Set Cn = Nothing
 
End Sub
mais je n'arrive pas à écrire dedans par rapport au champ du formulaire , en gros je veux que quand on clique sur enregistré , toutes les données renseignées dans les champs sont enregistrées dans le classeur fermée (préparé pour accueillir les données au préalable )

quelqu'un connaitrait la méthode s'il vous plait ?
letsProg est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2011, 11h03   #2
Invité de passage
 
Homme
Étudiant
Inscription : octobre 2011
Messages : 4
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : octobre 2011
Messages : 4
Points : 0
Points : 0
Par défaut <

re , désolé du double post mais personne n'a posté de reponse et comme j'ai "avancé" un peu je voulais vous montrez un peu plus ce que j'essaye de faire

donc j'ai un peu modifié la fonction qui permet de me connecter au classeur en essayant d'ajouter des valeurs dans le classeur fermé de cette façon :

Code :
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
Sub RequeteClasseurFerme()
    Dim Cn As ADODB.Connection
    Dim Fichier As String
    Dim Feuille As String, strSQL As String
    Dim PrixUnit As Integer
    Dim LeNom As String, lePrenom As String
    Dim LaDate As String
    
    'Définit le classeur fermé servant de base de données
    Fichier = "C:\Documents and Settings\konce\Bureau\bdd.xls"
    'Nom de la feuille dans le classeur fermé
    Feuille = "Feuil1"
    
    LaDate = "test"
    LeNom = "NomTest"
    lePrenom = "PrenomTest"
    PrixUnit = 40
    
    Set Cn = New ADODB.Connection
    
    '--- Connexion ---
    With Cn
        .Provider = "MSDASQL"
        .ConnectionString = "Driver={Microsoft Excel Driver (*.xls)};" & _
            "DBQ=" & Fichier & "; ReadOnly=False;"
        .Open
    End With
    '-----------------
    
    
    '
    '... la requête ...
    '
    
    strSQL = "INSERT INTO [" & Feuille & "$] " _
        & "VALUES (#" & LaDate & "#, " & _
        "'" & LeNom & "', " & _
        "'" & lePrenom & "', " & _
        PrixUnit & ")"
 
    
    Cn.Execute strSQL
    '--- Fermeture connexion ---
    Cn.Close
    Set Cn = Nothing

End Sub
donc je déclare 4 variable et les initialise avec soit une chaine de caractère soit un nombre puis via une requete SQL (trouver sur ce site) et de INSERT INTO j'essaye d'ajouter des valeurs dans le classeur fermé servant de BDD

je fais appel a la fonction via le userform et son bouton qui permet d'enregistré de cette façon :

Code :
1
2
3
4
5
Private Sub record_Click()
 
ThisWorkbook.RequeteClasseurFerme
 
End Sub
et donc quand je lance mon application et appuie sur enregistré j'obtiens une erreur qui est :
Citation:
Erreur d'exécution'-2147217913(8J040e07)': Erreur Automation
et quand je fais debogage pas a pas le programme plante au niveau du Cn.Execute strSQL de la fonction RequeteClasseurFerme si dessus , quelqu'un aurait-il déjà été confronté a ce problème ?

PS : précision par rapport a mon classeur fermé , j'ai juste rempli les deux première lignes des 4 première colonnes en gros j'ai mis 4 nom au 4 première cellule de la première ligne puis 4 valeur au 4 première cellule de la 2eme ligne , je n'ai appliqué aucun format au cellule
letsProg est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h26.


 
 
 
 
Partenaires

Hébergement Web