Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Comment liée un userform avec une table access

4 réponses
Avatar
Gortex
Bonjour,

Bonjour a tous
Dans l' userform 1 j' ai une listview qui colore sus condition les lignes et champ de recherche multicritère matérialiser par la textbox1
et des textbox qui récupéré la ligne sélectionner dans la listview aussi des bouton ajouter,modifier,suprimer
donc voici mon souci je souhait liée l' userform 1 avec une table access a fin de pouvoir traiter un grand volume de donner
si vous avez une solution je vous joint les deux fichier a liée merci d'avance
Cordialement
Fichier Excel
https://www.cjoint.com/c/HDxkYumAidQ
Fichier Access
https://www.cjoint.com/c/HDxkWQbXqxQ

4 réponses

Avatar
Michd
Bonjour,
Voici un EXEMPLE de code. Ne fais pas un copier-coller en pensant que cela
va fonctionner, ça ne marchera pas. Le code est commenté et tu devrais faire
un effort pour comprendre ce qui se passe à chacune des étapes.
Exemple : 'La chaîne de connexion à une base de données Access dans la
procédure utilise un truc qui date d'Excel 2003 et plus ancien. Pour avoir
la bonne chaîne de connexion avec les versions plus récentes d'Office, va à
cette adresse : https://www.connectionstrings.com/access/ et choisis celle
qui correspond à ton environnement.
En fait, tu n'as pas nécessairement à écrire les données d'Access dans une
feuille de calcul. Tu peux utiliser directement une boucle à partir du
recordset pour meubler la listview.
Tu as besoin de charger dans ton classeur Excel, fenêtre VBA - barre de
menus / outils / références / cette bibliothèque : "Microsoft activex data
objects 2.8 library"
'---------------------------------------
Sub GetDataWithADO()
'Ajouter la bibliothèque suivante :
'Microsoft activex data objects 2.8 librairy
Dim A As Long, B As Long, C As Long
Dim cnt As New ADODB.Connection
Dim rst As New ADODB.Recordset
Dim MyRange As Range
Dim Arr()
'détermine la cellule supérieur gauche où
'le recordset va être copié, si tu importes les
'données dans Excel
With Worksheets("Feuil1")
Set MyRange = .Range("g4") 'A définir
End With
'La chaîne de connexion à une base de données Access
cnt.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:Mes Documentsbd2.mdb;"
'Requête déterminant la valeur du recordset
'Edudiant : c'est la table dans Excel
rst.Open "Select * From Etudiant", cnt, adOpenStatic
'pour récupérer le recordset dans une variable Tableau(array)
'plus facilement maniable dans excel. Cela ne s'applique pas
'nécessairement à toi.
ReDim Arr(1 To rst.RecordCount, 1 To rst.Fields.Count)
rst.MoveFirst
Do While Not rst.EOF
For A = 1 To rst.RecordCount 'lignes
For B = 0 To rst.Fields.Count - 1 'colonnes
Arr(A, B + 1) = rst.Fields(B).Value
Next
rst.MoveNext
Next
Loop
'Le tableau contient tous les données du recordset mais
'pas le nom des champs du recordset
'Pour un petit test, pour visualiser toutes les valeurs
'contenues dans le tableau...Attention si tu as un
'grand tableau... ça risque d'être long ...!!!
'à faire seulement sur un petit échantillon.
For A = 1 To UBound(Arr, 1)
For B = 1 To UBound(Arr, 2)
MsgBox Arr(A, B)
Next
Next
'Si tu es intéressé de récupérer directement les noms
'des champs de ton recordset, tu peux utiliser ce
'qui suit :
Do
MyRange.Offset(, C) = rst.Fields(C).Name
C = C + 1
x = x + 1
Loop Until x = rst.Fields.Count
'Cette ligne de code copie tous les enregistrements du recordset
'vers ta plage de cellule définie au début de la procédure.
'Cette ligne n'est pas valide pour une version plus agée qu'excel 2000
'La méthode version 97 fonctionne un peu différemment.
MyRange.Offset(1, 0).CopyFromRecordset rst
'libérer l'espace mémoire des objets utilisés dans la procédure:
Set MyRange = Nothing: Set rst = Nothing
Erase Arr
End Sub
'---------------------------------------
MichD
Avatar
gortex
Le mardi 24 Avril 2018 à 14:55 par Michd :
Bonjour,
Voici un EXEMPLE de code. Ne fais pas un copier-coller en pensant que cela
va fonctionner, ça ne marchera pas. Le code est commenté et tu
devrais faire
un effort pour comprendre ce qui se passe à chacune des étapes.
Exemple : 'La chaîne de connexion à une base de données
Access dans la
procédure utilise un truc qui date d'Excel 2003 et plus ancien. Pour
avoir
la bonne chaîne de connexion avec les versions plus récentes
d'Office, va à
cette adresse : https://www.connectionstrings.com/access/ et choisis celle
qui correspond à ton environnement.
En fait, tu n'as pas nécessairement à écrire les
données d'Access dans une
feuille de calcul. Tu peux utiliser directement une boucle à partir du
recordset pour meubler la listview.
Tu as besoin de charger dans ton classeur Excel, fenêtre VBA - barre de
menus / outils / références / cette bibliothèque :
"Microsoft activex data
objects 2.8 library"
'---------------------------------------
Sub GetDataWithADO()
'Ajouter la bibliothèque suivante :
'Microsoft activex data objects 2.8 librairy
Dim A As Long, B As Long, C As Long
Dim cnt As New ADODB.Connection
Dim rst As New ADODB.Recordset
Dim MyRange As Range
Dim Arr()
'détermine la cellule supérieur gauche où
'le recordset va être copié, si tu importes les
'données dans Excel
With Worksheets("Feuil1")
Set MyRange = .Range("g4") 'A définir
End With
'La chaîne de connexion à une base de données Access
cnt.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:Mes Documentsbd2.mdb;"
'Requête déterminant la valeur du recordset
'Edudiant : c'est la table dans Excel
rst.Open "Select * From Etudiant", cnt, adOpenStatic
'pour récupérer le recordset dans une variable Tableau(array)
'plus facilement maniable dans excel. Cela ne s'applique pas
'nécessairement à toi.
ReDim Arr(1 To rst.RecordCount, 1 To rst.Fields.Count)
rst.MoveFirst
Do While Not rst.EOF
For A = 1 To rst.RecordCount 'lignes
For B = 0 To rst.Fields.Count - 1 'colonnes
Arr(A, B + 1) = rst.Fields(B).Value
Next
rst.MoveNext
Next
Loop
'Le tableau contient tous les données du recordset mais
'pas le nom des champs du recordset
'Pour un petit test, pour visualiser toutes les valeurs
'contenues dans le tableau...Attention si tu as un
'grand tableau... ça risque d'être long ...!!!
'à faire seulement sur un petit échantillon.
For A = 1 To UBound(Arr, 1)
For B = 1 To UBound(Arr, 2)
MsgBox Arr(A, B)
Next
Next
'Si tu es intéressé de récupérer directement les
noms
'des champs de ton recordset, tu peux utiliser ce
'qui suit :
Do
MyRange.Offset(, C) = rst.Fields(C).Name
C = C + 1
x = x + 1
Loop Until x = rst.Fields.Count
'Cette ligne de code copie tous les enregistrements du recordset
'vers ta plage de cellule définie au début de la
procédure.
'Cette ligne n'est pas valide pour une version plus agée qu'excel 2000
'La méthode version 97 fonctionne un peu différemment.
MyRange.Offset(1, 0).CopyFromRecordset rst
'libérer l'espace mémoire des objets utilisés dans la
procédure:
Set MyRange = Nothing: Set rst = Nothing
Erase Arr
End Sub
'---------------------------------------
MichD
Re merci
je patauge
Avatar
gortex
Le mardi 24 Avril 2018 à 00:00 par Gortex :
Bonjour,
Bonjour a tous
Dans l' userform 1 j' ai une listview qui colore sus condition les lignes et
champ de recherche multicritère matérialiser par la textbox1
et des textbox qui récupéré la ligne sélectionner
dans la listview aussi des bouton ajouter,modifier,suprimer
donc voici mon souci je souhait liée l' userform 1 avec une table access
a fin de pouvoir traiter un grand volume de donner
si vous avez une solution je vous joint les deux fichier a liée merci
d'avance
Cordialement
Fichier Excel
https://www.cjoint.com/c/HDxkYumAidQ
Fichier Access
https://www.cjoint.com/c/HDxkWQbXqxQ
Bonjour a tous
je me connecte a une base access avec le bout de code qui fonctionne tres bien
je voudrai proteger mon fichier access avec un mot de passe "PAPA"
donc comment adapter ce code pour que excel se connecte
si vous aviez une solution merci
Cordialement
'connection base
Sub Connecte_base_Access()
Dim rs As Object
Dim Nom_Base, Chemin_Base, SQL ', connstring
Set conn = CreateObject("ADODB.Connection")
Nom_Base = "les-association-table-access.accdb"
Chemin_Base = ThisWorkbook.Path & "" & Nom_Base
'chaine de connexion
connstring = "DRIVER={Microsoft Access Driver (*.mdb, *.accdb)}; DBQ=" & Chemin_Base
'Connexion a la base
conn.Open connstring
End Sub
Avatar
Michd
Bonjour,
Conn.Open Provider=Microsoft.ACE.OLEDB.12.0;Data
Source=C:myFoldermyAccessFile.accdb;
Jet OLEDB:Database Password=MyDbPassword;"
MichD