[RESOLU]Insérer données dans MsSQL depuis Excel

ganjakass

XLDnaute Nouveau
Bonjour
J'arrive très facilement à récupérer le contenu de ma base de données microsoft sur mon fichier Excel.

Cependant il faudrai que je fasse l'opération inverse.
CaD:
Pouvoir écrire, remplacer voir supprimer des écritures dans ma base de données directement depuis Excel.
le but est que les utilisateurs du fichier Excel puissent modifier simplement les données de la base.

J'ai vue qu'il existait plusieurs techniques (ADO oledb, ADO jet4.0, micro Query,etc.)
Malheureusement je n'ai aucune connaissance de ces outils.

Est-ce qqch a déja fait la manip?
Please Help-me
 
Dernière édition:

ganjakass

XLDnaute Nouveau
Re : Insérer données dans MsSQL depuis Excel

Public cN As ADODB.Connection
Function ConnexionBase()
Set cN = New ADODB.Connection
dbPath = path
cN.ConnectionTimeout = 20
cN.ConnectionString = "Provider=SQLOLEDB;Data Source=nomServeur;Initial Catalog=nmBaseDD; User ID=nomUtilisateur;Password=motDePasse;"
cN.Open
End Function
Function FermetureBase()
If Not cN Is Nothing Then
If cN.State = adStateOpen Then cN.Close
Set cN = Nothing
End If
End Function

puis j'appelle la fonction connexion avec un bouton:
Private Sub CommandButton2_Click()
ConnexionBase
End Sub

et la déconnexion:
Private Sub CommandButton3_Click()
FermetureBase
End Sub

Est-ce correcte?
comment tester cela?
D'avance merci
 

poulpor78

XLDnaute Junior
Re : Insérer données dans MsSQL depuis Excel

Bonjour,

Plusieurs remarques :

1/ Je te propose de créer un module (module1) où tu vas mettre les fonctions ConnexionBase et FermetureBase (peut-être est-ce déjà le cas)

2/ Dans le CommandButton2_click(), je pense qu'il faut mettre Module1.ConnexionBase (je pense que le module1.ConnexionBase est important même si je ne suis pas certain). De même dans CommandButton3_click() avec module1.FermetureBase

3/ Le code de connexionBase, en particulier la chaîne de connexion est à revoir. Si tu n'as pas de login/password spécifique pour accéder à la base (enfin, je veux dire que le login / password est celui de ta session), tu peux remplacer ; User ID=nomUtilisateur;Password=motDePasse;" par ;Trusted_Connection=True;"
J'imagine que tu vas remplacer nomServeur et nmBaseDD par leurs vrais noms !

Si ça ne marche toujours pas, essaie ma chaîne de connexion qui est marche chez moi: cN.ConnectionString = "Driver={SQL Server};Server=nomServeur;Database=nmBaseDD;Trusted_Connection=True;"

Enfin, tu peux enlever l'instruction : dbPath = path qui ne fait référence à rien surtout si path n'est pas défini dans ton cas.

Et là, tu testes en cliquant sur le bouton lié à ta connexion. Si ça ne retourne pas d'erreur c'est cool. Temporairement, juste avant l'instruction End Function de connexionBase, tu pourrais ajouter la ligne suivante :

If cN.State = adStateOpen Then Msgbox "connexion réussie !"

Ainsi ,en cas de réussite de connexion, tu auras un message de réussite.

Ne te décourage pas, trouver la bonne chaîne de connexion a toujours été pour moi l'étape la plus difficile, je passe mon temps à en chercher/tester pour finalement en trouver une qui marche.

Poulpor
 

ganjakass

XLDnaute Nouveau
Re : Insérer données dans MsSQL depuis Excel

C'est bon j'ai le message connexion reussite.

J'ai voulu faire pareil avec la déconnexion:
CAD:
if cN.State = adStateClosed then
MsbBox "déconnexion réussite"
end if
Mais cela ne fonctionne pas. Je verrai cela plus tard.

Peux-tu m'aiguiller pour la suite,
Déja essayer de faire une demande de lecture avec la fonction recordSet

Mais surtout j'aimerai par la suite inserer et modifier des lignes dans ma base.

Encore merci pour ton aide.
 
Dernière édition:

poulpor78

XLDnaute Junior
Re : Insérer données dans MsSQL depuis Excel

Pour trusted connection, c'est exactement ça. Attention, je ne suis pas expert en base de données.
Quand tu crées un DSN, est-ce que ça marche ?

En tout cas, ca avance bien !

Pour la suite...


Dans un module 2, tu vas créer la procédure suivante (on va tester le select) :

Code:
Sub Montest()

    On Error GoTo Err:

    Dim MonSql As String
    Dim rstcomptes As New ADODB.Recordset
    Dim i As Integer
    Module1.ConnexionBase

    MonSql = "SELECT F_COMPTET.CT_Num FROM F_COMPTET"

    rstcomptes.Open MonSql, DBCon, adOpenDynamic, adLockOptimistic

    rstcomptes.MoveFirst
    i = 1
    While Not rstcomptes.EOF
        ActiveSheet.Cells(i, 1).Value = rstcomptes("CT_Num")
        i = i + 1
        rstcomptes.MoveNext
    Wend

Module1.FermetureBase

Err:
    If Err.Number <> 0 Then
        CONNECTION.FermetureBase

        MsgBox "Erreur : " & Err.Number & Chr(13) & Err.Description
    End If

End Sub

Evidemment, tu vas changer la chaîne SQL : tu vas faire un select tout simple du même style que le mien sur une petite table de quelques lignes. Puis tu vas changer rstcomptes("CT_Num") par rstcomptes("toto") où toto est le nom du champs que tu vas rapatrier sur ta feuille.

Puis, tu vas créer un bouton qui va faire appel à cette procédure : module2.Montest.

Tu lances, si ça marche, tu vas rapatrier en première colonne le contenu de ta table, sur la feuille active. Comme c'est assez lent, le mieux est de choisir un jeu d'enregistrement de moins de 100 lignes pour le test.


Astuces pour aller comprendre le code :

1/ tu peux mettre un point d'arrêt (dans l'éditeur de code c'est en cliquant dans la marge à gauche du code)
2/ Tu peux avancer ligne par ligne en appuyant sur F8. En survolant les variables avec ta souris, l'infobulle donne la valeur des variables.

Quand je ne comprends pas un code, je teste pas à pas pour essayer de comprendre l'impact des instructions.


Poulpor
 

ganjakass

XLDnaute Nouveau
Re : Insérer données dans MsSQL depuis Excel

Re
Quesque ce que tu entendant par tu va changer la chaine SQL.
les champs de ma table sont: id, Heure, NumMachine et EtatMachine.
question:
MonSql = "SELECT F_COMPTET.CT_Num FROM F_COMPTET"
je dois le changer????
 

poulpor78

XLDnaute Junior
Re : Insérer données dans MsSQL depuis Excel

Ben oui, vaut mieux le changer.

Chez moi, j'ai une base contenant une table nommée F_COMPTET où un champ a pour nom CT_Num

peu de chance que ce soit pareil chez toi. J'imagine que tu as des notions de SQL : il faut juste faire un select.

Si tua avais une table clients nommée T_CLIENT et que tu as deux champs nom et prénoms nommés CLI_NOM et CLI_PRENOM, tu pourrais les sélectionner par cette requête :

SELECT CLI_NOM, CLI_PRENOM FROM T_CLIENT


Et quand tu rapatries le champs dans excel, il faut remplacer le CT_NUM de rstcomptes("CT_Num") par le champs que tu auras choisi. (par exemple "CLI_NOM" dans le cas ci-dessus)

Poulpor
 

ganjakass

XLDnaute Nouveau
Re : Insérer données dans MsSQL depuis Excel

Chez toi, ça pourrait faire : "SELECT NumMachine FROM XXX"

où XXX est ta table

Et : rstcomptes("CT_Num") deviendrait rstcomptes("NumMachine")

En espérant qu'il n'y ait pas tropd'enregistrement.

Après, à toi de potasse des sites comme Le SQL de A Z - SGBD, SQL et types de donnes


Poulpor

Coucou
c'est bon le select fonctionne.
Je met comme résolu.
Oui maintenant à moi de potasser mais c'est quand même toi qui à permis de me débloquer et je t'en remerci.
Bon week end et certainement à bientot sur le forum.
 

Discussions similaires

Statistiques des forums

Discussions
312 291
Messages
2 086 852
Membres
103 400
dernier inscrit
MINOU WILL