Problèmes et questions
Bonjour tout le monde,
Je me permets de demander votre aide à ce forum qui à une très bonne réputation. Voila je suis actuellement étudiant en alternance en informatique et j'aurai quelques questions concernant le vba et les fichiers excel.
Mes problèmes :
Voila bientôt tous le système informatique va etre changé et je suis en train de tester les différentes macros car on va passer de word 2003 à word 2010 mais je rencontre quelques soucis.
Dans un soucis d'être un maximum efficasse j'ai créé mon propre fichier excel avec mes macros pour pouvoir la tester sous 2010 mais je rencontre des problèmes dans le code lui même, je m'explique : j'ai une base de donnée Access 2003 et j'aimerai faire quelques test dessus, j'arrive bien à selectionner(SELECT) les données de ma base de donnée mais cependant je n'arrive pas à faire de l'insertion avec INSERT j'ai toujours la même erreur.
Voici une partie de mon code :
Sub Bouton1_QuandClic()
Dim Connexion As New ADODB.Connection
Dim Rs As New ADODB.Recordset
Dim CheminBase As String
Dim CompteChamps As Long
Dim ReqeteNbLigne As String
Dim Requete As String
Dim i, NombreLibreTable As Integer
Dim NomTable As String
Dim VariableNom, VariablePrenom, VariableAge As String
' Création du chemin où chercher la base de données
CheminBase = ThisWorkbook.Path & "\" & "\base_de_donnees\base_de_test.mdb"
' Nom de la table principale
NomTable = "Personne"
Cells(8, 36).CurrentRegion.Clear
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''' NOM ''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'Récupération des valeurs des différentes cel
VariableNom = Range("B2").Value
VariablePrenom = Range("C2").Value
VariableAge = Range("D2").Value
Connexion.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & CheminBase & ";"
Requete = "INSERT INTO" &NomTable& "(Personne_nom)&_
"(Personne_nom)"&_
" VALUES("&VariableNom&")"&_
ReqeteNbLigne = "SELECT COUNT(Personne_nom) FROM Personne"
With Rs
.CursorLocation = adUseClient
.Open ReqeteNbLigne, Connexion, adOpenDynamic, adLockOptimistic
End With
NombreLibreTable = Rs(0).Value
If NombreLibreTable < CalculerNombreLigneRemplis("D") Then
Range("D2:D65536").Value = ""
End If
Set Rs = Nothing
End Sub
Public Function CalculerNombreLigneRemplis(ByVal LettreColonne As String) As Integer
Dim nbcells As Integer
If LettreColonne = "D" Then
nbcells = Application.WorksheetFunction.CountA(Range("D2:D65536"))
End If
If LettreColonne = "E" Then
nbcells = Application.WorksheetFunction.CountA(Range("E2:E65536"))
End If
If LettreColonne = "F" Then
nbcells = Application.WorksheetFunction.CountA(Range("F2:F65536"))
End If
CalculerNombreLigneRemplis = nbcells
End Function
L'erreur ce passe sur cette ligne : Requete = "INSERT INTO" &NomTable& "(Personne_nom)&_
Le message affiché : Erreur de compilation: Erreur de syntaxe.
Encore merci à tout ceux qui vont m'aider et je vous souhaites une très bonne journée.
bonjour,
Ne faut -il pas un espace en le & et NomTable
& NomTable &
Bonjour merci de votre réponse, je viens d'essayer mais le problème persiste.
La meme chose ici peut etre
&VariableNom& remplacer par & VariableNom &
et je crois que dans cette instruction il y a 1 \ en trop
CheminBase = ThisWorkbook.Path & "\" & "\base_de_donnees\base_de_test.mdb"
J'ai déjà fait des select et tout marche bien il n'y a pas eut de soucis particulier mais c'est uniquement en faisant des insert que je n'y arriv pas.
J'ai même tenté ceci mais ça ne fonctionne pas mieux :
Requete = "INSERT INTO "
Requete = Requete + NomTable
Requete = Requete + "(Personne_nom,Personne_prenom,Personne_age)"
Requete = Requete + "VALUES("
Requete = Requete + VariableNom
Requete = Requete + VariablePrenom
Requete = Requete + VariableAge
Requete = Requete + ")"
ReqeteNbLigne = "SELECT COUNT(Personne_nom) FROM Personne"
With Rs
.CursorLocation = adUseClient
.Open Requete, Connexion, adOpenDynamic, adLockOptimistic
End With
Set Rs = Nothing
Il me met comme erreur :
erreur de syntaxe dans l'instruction INSERT INTO pourtant j'ai vérifié et tout est bon.
EDIT je viens de vérifier via un espion que la chaine final vaut : "INSERT INTO Personne(Personne_nom,Personne_prenom,Personne_age)VALUES()"
Elle n'a pas prit mes trois variables. Je ne comprends plus rien.
je ne me rappel plus la syntaxe SQL, mais il ne manque pas 1 ; à la fin de l'instruction???
ah ben non je viens de vérifier
J'ai trouvé le problème justement à l'instant. Si ça peut aider on ne sait jamais, je rechercher les lignes vides et donc je rentrais des valeurs nulles mais le soucis est que maintenant il me dit ceci :
Aucune valeur données pour un ou plusieurs des paramètres requis.
Voici la requête que j'envois :
INSERT INTO Personne(Personne_nom,Personne_prenom,Personne_age) VALUES(Neil,Jack,55);
(J'ai mit un ; mais sans j'ai exactement le même soucis)
J'ai trouvé la solution ce n'était que des bétises,voici le code de solution si ça peut aider :
Requete = "INSERT INTO "
Requete = Requete + NomTable
Requete = Requete + "(Personne_nom,Personne_prenom,Personne_age)"
Requete = Requete + " VALUES("
Requete = Requete + """"
Requete = Requete + VariableNomTemp
Requete = Requete + """"
Requete = Requete + ","
Requete = Requete + """"
Requete = Requete + VariablePrenomTemp
Requete = Requete + """"
Requete = Requete + ","
Requete = Requete + """"
Requete = Requete + VariableAgeTemp
Requete = Requete + """"
Requete = Requete + ");"
Mais j'ai un autre soucis lorsque je veux joindre mes quelques tables :
Requete = "SELECT Voiture_nom "
Requete = Requete + "FROM "
Requete = Requete + NomTable
Requete = Requete + " LEFT JOIN Lien "
Requete = Requete + "ON Personne.Personne_id = Lien.Lien_personne "
Requete = Requete + "LEFT JOIN Voiture "
Requete = Requete + "ON Voiture.Voiture_id = Lien.Lien_voiture "
Requete = Requete + "WHERE Personne.Personne_id = 1;"
Il me met :
Erreur de syntaxe (Opérateur absent) dans l'expression :
Personne.Personne_id = Lien.Lien_personne LEFT JOIN Voiture ON Voiture.Voiture_id = Lien.Lien_voiture WHERE Personne.Personne_id = 1;"