Ajout ligne table dans Access

Y compris Power BI, Power Query et toute autre question en lien avec Excel
b
boulezor
Membre habitué
Membre habitué
Messages : 51
Inscrit le : 14 juin 2012
Version d'Excel : 2010

Message par boulezor » 10 février 2016, 10:09

J'ai reussi à corriger la syntaxe :) C'est parfait merci.

Juste un truc, est-ce possible d'afficher un message quand la requête a fonctionner pour prévenir l'utilisateur que c'est ok?
Avatar du membre
pierrep56
Membre impliqué
Membre impliqué
Messages : 1'204
Appréciations reçues : 197
Inscrit le : 18 juin 2014
Version d'Excel : 2016

Message par pierrep56 » 10 février 2016, 11:35

Ok, c'est cool!
Pour le message, on peut ajouter au tout début du code, après les déclarations de variables :
On Error GoTo errhdlr
et tout à la fin un truc genre :
    ' ...
    Cnx.Close
    Set Cnx = Nothing
    Set Rst = Nothing
    msgbox ("Bravo t'es trop fort! :)")
    Exit sub
   
errhdlr:
    msgbox ("C'est la loose! :(" & vbCrLf & Err.Description)
end sub
Ce qui te donne un message de félicitation si ok, et sinon la description de l'erreur
Pierre
b
boulezor
Membre habitué
Membre habitué
Messages : 51
Inscrit le : 14 juin 2012
Version d'Excel : 2010

Message par boulezor » 10 février 2016, 12:14

Magnifique :) une petite dernière chose :oops: J'aimerai pouvoir modifier une colonne en particulier , est ce possible d'envoyer une cellule dans accès et préciser donc la ligne et la colonne?
Avatar du membre
pierrep56
Membre impliqué
Membre impliqué
Messages : 1'204
Appréciations reçues : 197
Inscrit le : 18 juin 2014
Version d'Excel : 2016

Message par pierrep56 » 10 février 2016, 12:49

Ben oui, bien sûr,

par exemple pour modifier le lot et la coloration :
dim upd as string, condition as string

' ...
maTable = "analyse"

upd = "lot=" & activesheet.range("A2").value    ' numérique => sans quote
upd = upd & ",coloration='" & activesheet.range("A6").value & "'"   ' texte=> avec quote

condition = "Id=" &  activesheet.range("A1").value

Requete = "UPDATE  [" & maTable & "] SET " & upd & " WHERE " & condition

Set Rst = Cnx.Execute(Requete)
' ... 
il est impératif ici de connaitre l'ID de l'enregistrement ("la ligne"), ici dans l'exemple j'ai supposé qu'il est en A1
Pierre
b
boulezor
Membre habitué
Membre habitué
Messages : 51
Inscrit le : 14 juin 2012
Version d'Excel : 2010

Message par boulezor » 10 février 2016, 15:32

Merci :) Tout fonctionne :)
b
boulezor
Membre habitué
Membre habitué
Messages : 51
Inscrit le : 14 juin 2012
Version d'Excel : 2010

Message par boulezor » 17 mars 2016, 12:22

Bonjour,

Je reviens vers vous, car je souhaiterai pouvoir mettre à jour tous les champs d'une ligne d'une table, j'ai essayé de modifié la requête qu'on m'avais donné pour l'update d'un champ mais je n'arrive pas à trouver le système pour modifier tous les champs, pouvez-vous m'aider?

Merci.
b
boulezor
Membre habitué
Membre habitué
Messages : 51
Inscrit le : 14 juin 2012
Version d'Excel : 2010

Message par boulezor » 22 mars 2016, 15:36

Quelqu'un serait-il m'aider?

Merci :)
Avatar du membre
pierrep56
Membre impliqué
Membre impliqué
Messages : 1'204
Appréciations reçues : 197
Inscrit le : 18 juin 2014
Version d'Excel : 2016

Message par pierrep56 » 22 mars 2016, 16:30

Ben il suffit de continuer avec le principe indiqué le 10 février en complétant la variable "upd" :

upd= "champs1=" & range_truc
upd=upd & ",champs2=" & range_machin
upd=upd & ",champs3=" & range_bidule
...
avec ou sans quote si texte ou numérique
ou avec # si date => upd=upd & ",datedujour=#" & "03/22/2016" & "#" (en inversant mois et jour car format US)

Pierre
b
boulezor
Membre habitué
Membre habitué
Messages : 51
Inscrit le : 14 juin 2012
Version d'Excel : 2010

Message par boulezor » 15 février 2018, 15:26

Bonjour,

Je déterre post de 2 ans, mais il m'a très bien aide à l'époque :)

Je suis entrain de faire un nouveau fichier fonctionnant également avec une BDD acces depuis Excel, je dois comme à l'époque injecter des données dans une table access, je sais le faire pas de soucis mais je tombe sur un hic car c'est la première fois que j'ai le cas. Je dois injecter 60 données différentes dans 60 colonnes d'une tables access, le problème étant que quand je rentre ma ligne avec les différents nom des colonnes access en VBA, à un moment j'ai un retour à ligne obligatoire du codeur VBA qui termine ma ligne avec une apostrophe et continue ma ligne en dessous mais cela me poser un soucis car cela ne fait plus partie de la même variable non? Je peux faire comment? Je vais avoir le même problème avec la variable pour les données à injecter, elle va être trop longue et donc retour à la ligne.

Voici un exemple de la variable en question:
VARIABLE QUE J'AIMERAI :
Entete = "id, contrat, civilite, nom, prenom, societe, adresse, ville, telephone, mail, codeclient, datedelocation, lieudelocation, soltype, aidant, bachelaterale, article1, article2, article3, article4, article5, article6, article7, article8, article9, article10, article11, article12, article13, article14, article15, article16, article17, article18, article19, article20, aprix1, aprix2, aprix3, aprix4, aprix5, aprix6, aprix7, aprix8, aprix9, aprix10, aprix11, aprix12, aprix13, aprix14, aprix15, aprix16, aprix17, aprix18, aprix19, aprix20, prix1, prix2, prix3, prix4, prix5, prix6, prix7, prix8, prix9, prix10, prix11, prix12, prix13, prix14, prix15, prix16, prix17, prix18, prix19, prix20, aremise1, aremise2, aremise3, aremise4, aremise5, aremise6, aremise7, aremise8, aremise9, aremise10, aremise11, aremise12, aremise13, aremise14, aremise15, aremise16, aremise17, aremise18, aremise19, aremise20, remise1, remise2, remise3, remise4, remise5, remise6, remise7, remise8, remise9, remise10, remise11, remise12, remise13 , remise14, remise15, remise16, remise17, remise18, remise19, remise20"
MAIS LE codeur VBA ME LE FRACTIONNE AINSI:
Entete = "id, contrat, civilite, nom, prenom, societe, adresse, ville, telephone, mail, codeclient, datedelocation, lieudelocation, soltype, aidant, bachelaterale, article1, article2, article3, article4, article5, article6, article7, article8, article9, article10, article11, article12, article13, article14, article15, article16, article17, article18, article19, article20, aprix1, aprix2, aprix3, aprix4, aprix5, aprix6, aprix7, aprix8, aprix9, aprix10, aprix11, aprix12, aprix13, aprix14, aprix15, aprix16, aprix17, aprix18, aprix19, aprix20, prix1, prix2, prix3, prix4, prix5, prix6, prix7, prix8, prix9, prix10, prix11, prix12, prix13, prix14, prix15, prix16, prix17, prix18, prix19, prix20, aremise1, aremise2, aremise3, aremise4, aremise5, aremise6, aremise7, aremise8, aremise9, aremise10, aremise11, aremise12, aremise13, aremise14, aremise15, aremise16, aremise17, aremise18, aremise19, aremise20, remise1, remise2, remise3, remise4, remise5, remise6, remise7, remise8, remise9, remise10, remise11, remise12,"
remise13 , remise14, remise15, remise16, remise17, remise18, remise19, remise20"
MERCI :)
Avatar du membre
pierrep56
Membre impliqué
Membre impliqué
Messages : 1'204
Appréciations reçues : 197
Inscrit le : 18 juin 2014
Version d'Excel : 2016

Message par pierrep56 » 15 février 2018, 16:07

Bonjour,

Si ta base existe déjà, ce qui peut être élégant c'est de lire directement l'entête dans la table en question. Ce qui évite une écriture un peu lourde (donc source d'erreur).

Une ch'tite fonction générique:
Function EnteteBDD(BDD As String, Table As String) As String
Dim Cnx As Object, Rst As Object
Dim S As String, i As Long
        
    Set Cnx = CreateObject("ADODB.Connection")
    Cnx.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & BDD
    ' ou bien :
    'Cnx.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & BDD
    ' ou bien :
    'Cnx.Open "DRIVER={Microsoft Access Driver (*.mdb, *.accdb)}; DBQ=" & BDD
    
    Set Rst = CreateObject("ADODB.Recordset")
    Rst.Open "SELECT * FROM " & Table, Cnx, 3

    For i = 0 To Rst.Fields.Count - 1
        S = S & Rst.Fields(i).Name & ", "
    Next i
    EnteteBDD = Left(S, Len(S) - 2)

    Cnx.Close
    Set Cnx = Nothing
    Set Rst = Nothing
End Function


L'appel se fait alors tout simplement:
sub Test
Dim Entete as string

    Entete = EnteteBDD("C:\chemin\Base.accdb", "Table_à_lire") ' A adapter évidemment

    Debug.print entete ' Pour visualiser le résultat
End sub


Trop facile, non?
Répondre
  • Sujets similaires
    Réponses
    Vues
    Dernier message