Mariage d'Excel et access

Bonjour,

Il est souvent utiles, surtout quand on travail dans une société, de pouvoir travaillé à plusieurs sur les mêmes données.

J'ai créer ce petit cour (Mon premier) => Mariage d'EXCEL et ACCESS

Niveau => Facile

Mon idée, c'est de commencée par une simple base ACCESS (Nom ,Prénom ,age ,téléphone , adresse ect...)

et de créer un Userform dans EXCEL qui l'ira les données de la base.. (afficher, modifier, créer )

Par une simple boucle... avec une petite touche personnel

Plusieurs avantages de travailler avec ACCESS :

1/ Rapidité, quand on as beaucoup de données a traitées.

2/ Plusieurs personnes peuvent travailler en mêmes temps (sur la même base)

3/ On peut travailler a distance

4/ Fiabilité des données

5/ Pas besoin d'avoir ACCESS installé sur tout les postes ! (Seulement pour créer la base)

Une fois qu'on as compris le principe, on ne pourras plus sans passé

Allez on commence :

Ce cour à été réalisé avec la version d'Office 2016.

ps: Les accents sont volontairement mis de coté ainsi que les majuscules.

=> créer sur votre bureau un dossier et nommé le "mariage excel access"

=> créer une base de donnée ACCESS (vide) et nommé la "base repertoire" <= enregistré la dans le même repertoire

Normalement, vous devez avoir une table créé, nommé "table1"

Cliquez sur l'équerre (en haut à gauche) 'Affichage"

Là, il vous demande "d'enregistré sous" , donc nommé la table => "base repertoire"

C'est ici que vous allez créer vos champs

  • Le premier champ à été créez automatiquement =>Nom du champ "N°" et type de donnée "numéro auto" => garder le
  • Je pense que vous avez compris comment insérer le reste des champs !
  • écrire "nom" puis "prenom" type de champs "texte court" et "age" en "numérique"
On va s'arrêté ici, en ce qui concerne la base ACCESS, on y reviendra plus tard

Enregistré et fermé ACCESS

Maintenant on va travailler sur notre programme préféré => EXCEL

Créez un nouveau classeur vierge et cliquez sur enregistrez sous puis sur parcourir => pointer sur le dossier créer et nommé le "repertoire" sans oublié de changer le "Type" en "classeur Excel prenant en charge les macros"

Bon jusqu'ici tout va bien

  • Pour ouvrir l'éditeur VBA faite ALT+F11
  • Dans le menue => insertion => module
  • renommer "module1" en "connexion"
  • entrer le code suivant à la suite de "Option explicit :
Public chem As String
Public Cn As ADODB.Connection
Public Cd As ADODB.Command
Public Rs As ADODB.Recordset

sub connex()

chem = ThisWorkbook.Path & "\" & "base repertoire.accdb"
Set Cn = New ADODB.Connection
Cn.Open "Provider=Microsoft.Ace.OLEDB.12.0; Persist Security Info = False;" & _
    "Data Source=" & chem & ";"
 Set Cd = New ADODB.Command
 Cd.ActiveConnection = Cn
 Set Rs = New ADODB.Recordset

End Sub

-Bon maintenant, il nous manquent quelques chose d'essentiel : activer la référence active X

=>dans menue => outils => références => chercher et cocher la référence :Microsoft ActiveX data objects 2.8 library

un petit test pour voir si tout ce passe bien => touche F8 "Pas à pas détaillé" (S'il y as une erreur, c'est pas bon signe )

Quand vous exécuter le code, rien ne ce passe : C'est normal ...

Fin de la partie 1

Partie 2

=> je passe la deuxième vitesse (Si vous avez des questions n'hésité surtout pas )

  • Création de l'Userform :
  • -créez un USF et ajouter : 4 intitulés / 4 zones de texte (textebox) / et 3 boutons (Créer , Modifier, Fermer)
  • -Renommé les intitulés comme cela : int1 / int2 / int3 / int4
  • -Renommé les textbox comme cela : tx1 / tx2 / tx3 /tx4
  • Les intitulés et les textbox doivent correspondres au nombres de champs de la base ACCESS
  • notre but est de faire une boucle qui vas lire les données ACCESS pour les affichées dans l'USF

Bon maintenant on va mettre le code à l'ouverture de l'USF => Initialize

double cliquez sur l'USF et en haut à droite (ou c'est marquer "click"), vous sélectionnez Initialize

Et recopier ce code :

Dim i As Long
'**
 connex
'**
    Set Rs = Cn.Execute("SELECT * FROM [base repertoire] WHERE N° ") ' Montre les données(select *) et le nom de la table à lire (From...)

    Rs.Find "[N°]=" & 1, , adSearchForward, 1  ' recherche le premier enregistrement

'Ma touche perso ;)
        For i = 0 To 3        
             Me.Controls("int" & i + 1) = Rs(i).Name 'les intitulés
            If IsNull(Rs(i)) Then Me.Controls("tx" & i + 1) = "" Else Me.Controls("tx" & i + 1) = Rs(i) 'les textbox
        Next i

    Rs.Close: Cn.Close: Set Rs = Nothing: Set Cn = Nothing 'ferme la connexion

Bon, avant de tester votre Userform ouvrer la base pour mettre au moins un enregistrement (Nom, Prénom, age),sinon erreur.. (c'est normal !)

Avez vous compris l'astuce ?

=> Si votre base de données contient 50 champs , il est plus facile de modifier la taille de la boucle i que de nommé chacune de ces champs ... (bien sur il faudra r'ajouter les intitulés et les textbox dans l'USF) Enfin tous cela peut ce faire automatiquement (Peut être dans un autre poste...)

Je part du principe que "Tout est possible avec Excel"

Pour le moment nous avons accès qu'a l'enregistrement 1

Le problème : Nous ne connaissons pas d'avance les enregistrements de notre base (nous pouvons mettre des flèches pour allez d'un enregistrement à l'autre, mais pour ma part ce n'est pas très professionnel)

La solution : Faire un autre USF qui montre tous les enregistrements (avec un champ recherche)

===> étape 3

Bonsoir, je vais suivre ce cours avec attention... D'ailleurs :

ps: Les accents sont volontairement mis de coté ainsi que les majuscules.

Vous pouvez ajouter "les fautes de frappes" ! J'avoue, j'avoue, je ne suis pas mieux !

vbMBHB

Bonsoir vbMsgBoxHelpButton

Vous pouvez ajouter "les fautes de frappes" ! J'avoue, j'avoue, je ne suis pas mieux !

Je sais, Je sais , mon orthographe et très loin d'être parfait... Tout comme mon code

Mais l'essentiel c'est que l'on me comprennent et aussi que mes codes fonctionnent

Je posterais l'étape 3 dans la semaine ... et ce n'est que le début

Bonne soirée

Attention à ne pas vous y méprendre... C'était une remarque en toute sympathie... J'ai hâte de voir la suite.

vbMBHB

Attention à ne pas vous y méprendre... C'était une remarque en toute sympathie... J'ai hâte de voir la suite.

vbMBHB

Il n'y as aucun soucie vbMsgBoxHelpButton..

Une petite explication sur le faite de ne pas mettre les accents ni les majuscules:

Je parle surtout des noms des champs de la base access, c'est uniquement pour simplifier et éviter les erreurs.

à la fin du cour, je posterais un exemple concret ...

En faite je n'ai rien préparé, alors je le fait à fur et à mesure

Je vous rassure, le cour ne seras pas trop long..

A plus tard.

Etape 3:

Bonsoir tout le monde..

je passe la 3ém

Créez un deuxième Userform , et mettez une listbox et 5 boutons (Afficher, Modifier, Créer, Sélectionner, Supprimer)

Dans linitialize, on vas mettre le code pour récupérer les données de la base Access.

  Me.ListBox1.ColumnCount = 4
   Me.ListBox1.ColumnWidths = "20;100;100;100"
'***
connex 'connexion a la base
'***
Cd.CommandText = "select N°,nom,prenom,adresse1 FROM [base repertoire]" 'choisis les champs a lire et mettre dans la listbox
Rs.Open Cd, , adOpenDynamic, adLockOptimistic

  Me.ListBox1.List = Application.Transpose(Rs.GetRows)

Rs.Close: Cn.Close: Set Rs = Nothing: Set Cn = Nothing

Le principe c'est de vous montrez, que l'on peut facilement alimenter un Userform à partir d'une base Access.

A partir d'une simple boucle.

Je pense qu'un fichier exemple serais beaucoup plus parlant pour vous

Faite le test en réseau => mettez la base dans le dossier réseau et copier le claseur excel (Attention il faudra changer le code vba du chemin dans la connexion) Quand tout est en place vous pourrez alors vous connectez à plusieurs .

Le cour pointe sur les codes que je trouve les plus important.

Le classeurs démo est plus complet ..Je vous laisse découvrir

Merci de m'avoir suivi jusqu'ici ...

135base-repertoire.rar (17.45 Ko)
133repertoire.xlsm (77.17 Ko)

merci pour cette précieuse aide même si j'ai peur...... de le faire

C'est en forgeant qu'on devient forgeron..

Bon j'admet, mon cour est très mal expliqué.

La prochaine fois je ferais plus simple et plus clair..

Mais je vous encourage à télécharger les deux fichiers démo et à vous familiariser

Bonjour,

Au contraire je trouve que cela est très bien fait.

Merci encore et bonne année

Fredbenoit

Merci Fredbenoit.

Et bonne année aussi à vous et tout le forum

Rechercher des sujets similaires à "mariage access"