OVH Cloud OVH Cloud

étiquettes

17 réponses
Avatar
d
Salut,
si je crée une mini bd dans Excel ( adresses, noms, etc..)
y a t il un moyen de tirer des étiquettes directement depuis Excel SVP ?
merci
d@n

7 réponses

1 2
Avatar
michdenis
Bonjour Dan,

Une section très importante pour la suite du projet.

Comme tu veux pouvoir automatiser le transfert de tous tes données vers Acces, Tu devrais déverouiller toutes les cellules sur les
colonnes entières où l'usager doit répondre (Format cellule / onglet protection / verrouillée , et tu décoches l'option. Par la
suite, tu verrouilles ta feuille afin de limiter le nombre de colonnes accessibles au usager. Pour access, le nombre de champs
(colonnes) et leur ordre est très important.

Dans ton modèle, ajoute dans le ThisWorkbook de ton classeur, le code suivant. Il a pour but de créer une "Plage nommée" à la
fermeture du classeur en utilisant la cellule A1 de la feuille comme point de départ et la dernière cellule utilisée que le
répondant utilisera.

Et si tu veux savoir si ce code à fonctionner, Tu fermes le classeur, les procédures créeront la plage nommée,
à la réouverture du classeur, tu peux utiliser cette macro et observe le message, cela devrait corresponde à la plage utilisée dans
ton classeur :
Sub test()
MsgBox Names("RapportAccess").RefersTo
End Sub


'Tout ce qui suit est à copier dans le ThisWorkbook et prend soin de définir dans la procédure cet item:
Set Sh = toto 'à déterminer

Est-ce que ça va jusqu'à maintenant ?

'--------------------------------------
Private Sub Workbook_BeforeClose(Cancel As Boolean)

Dim Sh As Worksheet

'Dans ton projet VBA, les noms des feuilles
'se présentent comme suit :
'Feuil1(Feuil1)

'toto = la section du nom de la feuille qui N'EST
'PAS entre parenthèses. Regarde la propriété "Name"
'de la fenêtre "Propriétés" de la feuille retenue
Set Sh = toto 'à déterminer

With Sh
ThisWorkbook.Names.Add "RapportAccess", Sh.Name & "!" & _
.Range(.Cells(1, 1), .Cells(DerLig(Sh), DerCol(Sh))).Address, False
End With

End Sub

'--------------------------------------
Function DerLig(Sh As Worksheet)
On Error Resume Next
DerLig = Sh.Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
On Error GoTo 0
End Function

'--------------------------------------
Function DerCol(Sh As Worksheet)
On Error Resume Next
DerCol = Sh.Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column
On Error GoTo 0
End Function
'--------------------------------------


Salutations!




"" a écrit dans le message de news: %
Bonjour ,

<salut

Est-ce que chaque feuille de chaque classeur porte le même nom ?

<<oui

Est-ce la même plage de cellules de chaque classeur que tu veux exporter
vers ta base de données Access ? Donne quelques détails sur
son étendue.

<<je vais envoyer une feuille excell chez tous mes correspondants et je ne
vais pas la renommer, elle s'appellera donc normalement "classeurs1.xls" et
il y aura une dizaine de colonnes identiques sur chaque feuille, du style
nom en A, prénom en B, adresse en C, etc.

par contre certains m'enverront des feuilles ne contenant qu'une dizaione de
lignes, par contre d'autres vont encoder plusieurs centaines de noms et
adresses.

Si ta plage de cellule est fixe, et que ton questionnaire n'est pas encore
distribué, donne un nom (insertion / nom / définir_à
cette plage de donnée dans ton modèle, cela va grandement simplifier
l'export des données vers ta base de données.

<<combien de lignes dois-je sélectionner ?..

Est-ce que tous tes fichiers sont dans le même répertoire ?

<<lorsqu'ils m'enverront leurs feuilles, puisqu'elkles s'appelleront toute
classeurs1.xls, je vais devoir les sauver dans un répertoire différent pour
chaque envoyeur.

Selon tes réponses que tu donnera, il sera peut être possible d'utiliser ADO
ou DAO pour faire ce travail

<<ok, je suis impatient de recevoir ta réponse

merci


Salutations!
Avatar
michdenis
Bonjour Dan,

Voici la macro qui te permettra de transférer toutes tes données de chacun des fichiers xls de ton enquête dans une base de données.
Pour ce faire, tu dois t'assurer :

A ) que ta base de données existe et que le chemin est bon.
B ) la table "toto" dans mon exemple doit exister. Pour ce faire, contente toi de définir seulement les noms de champs avec le même
nom des étiquettes de colonnes de ton modèle Excel. (tout au long de ce développement, j'ai supposé que ton tableau dans ton modèle
excel ressemblait à une table d'une base de données. Ligne 1 = les étiquettes de données, par la suite les données.

C ) Pour exécuter cette macro, tu dois ajouter une référence à ton projet :
" Microsoft DAO 3.6 objects Librairy"

En vba, barre des menus / outils / référence / et tu coches celle définie ci-haut.

'-----------------------------------------------
Sub ExporterVersAccess()

Dim bd As DAO.Database, Rst As DAO.Recordset
Dim Repertoire As String, NomFichier As String

'où sont tes fichiers
Repertoire = "c:excel" 'à déterminer
NomFichier = Dir(Repertoire & "*.xls")

Do While NomFichier <> ""
Set bd = OpenDatabase(NomFichier, False, False, "excel 8.0")
bd.Execute "INSERT INTO toto IN 'C:ExcelComptoir.mdb' SELECT * FROM [RapportAccess]"
NomFichier = Dir()
bd.Close
Loop
Set bd = Nothing
End Sub
'-----------------------------------------------

P.S. Voilà quelque chose d'amusant à tester durant ta fin de semaine.


Salutations!



"" a écrit dans le message de news: %
Bonjour ,

<salut

Est-ce que chaque feuille de chaque classeur porte le même nom ?

<<oui

Est-ce la même plage de cellules de chaque classeur que tu veux exporter
vers ta base de données Access ? Donne quelques détails sur
son étendue.

<<je vais envoyer une feuille excell chez tous mes correspondants et je ne
vais pas la renommer, elle s'appellera donc normalement "classeurs1.xls" et
il y aura une dizaine de colonnes identiques sur chaque feuille, du style
nom en A, prénom en B, adresse en C, etc.

par contre certains m'enverront des feuilles ne contenant qu'une dizaione de
lignes, par contre d'autres vont encoder plusieurs centaines de noms et
adresses.

Si ta plage de cellule est fixe, et que ton questionnaire n'est pas encore
distribué, donne un nom (insertion / nom / définir_à
cette plage de donnée dans ton modèle, cela va grandement simplifier
l'export des données vers ta base de données.

<<combien de lignes dois-je sélectionner ?..

Est-ce que tous tes fichiers sont dans le même répertoire ?

<<lorsqu'ils m'enverront leurs feuilles, puisqu'elkles s'appelleront toute
classeurs1.xls, je vais devoir les sauver dans un répertoire différent pour
chaque envoyeur.

Selon tes réponses que tu donnera, il sera peut être possible d'utiliser ADO
ou DAO pour faire ce travail

<<ok, je suis impatient de recevoir ta réponse

merci


Salutations!
Avatar
d

Salutations!


ok, euh... bon, t'es super gentil, mais ça dépasse beaucoup trop mes

compétences, je suis désolé de t'avoir laisser aller aussi loin dans l'aide,
sorry...
en fait, j'ai importé mes feuilles excell dans access, et il m'a construit
la table tout seul !
mes données se remplissent au fur et à mesure de mes importations, le seul
problème qui me reste ce sont les doublons...
je n'arrive pas à empêcher Access de prendre en compte deux fois les mêmes
personnes...

merci pour tout !



Avatar
michdenis
Tu ouvres ta base de données Acces, / selection objets : requête / nouveau / dans la fenêtre qui s'ouvre, tu sélectionnes /
Assistant requête - trouver les doublons / sélectionne ta table / sélectionne tous les champs que la requête doit tenir compte dans
sa recherche de doublons / Donne un nom à ta rêquête / Afficher les résultats / Terminer ...

Il y a plus compliqué !!!

;-)


Salutations!


"" a écrit dans le message de news: %23r$

Salutations!


ok, euh... bon, t'es super gentil, mais ça dépasse beaucoup trop mes

compétences, je suis désolé de t'avoir laisser aller aussi loin dans l'aide,
sorry...
en fait, j'ai importé mes feuilles excell dans access, et il m'a construit
la table tout seul !
mes données se remplissent au fur et à mesure de mes importations, le seul
problème qui me reste ce sont les doublons...
je n'arrive pas à empêcher Access de prendre en compte deux fois les mêmes
personnes...

merci pour tout !



Avatar
d
sa recherche de doublons / Donne un nom à ta rêquête / Afficher les
résultats / Terminer ...


Il y a plus compliqué !!!

;-)



décidément... même pour un problème ne te concernant pas directement, tu me
trouves encore une solution !..
Chapeau !
j'ai suivis ta marche à suivre et de fait, je retrouve instantanément les
doublons, donc je les ai sélectionnés et éliminé, et en rouvrant la table
ils avaient disparus :-))
c'est juste dommage que je vais devoir faire ça régulièrement, ça aurait été
plus simple qu'Access ne les accepte pas dans sa table plus d'une fois...

Allez, encore un grand merci !
A+


Avatar
michdenis
Bonjour Dan,

Je ne sais pas comment tu procèdes pour entrer toutes tes données dans la même table,

Cependant, dans ta table, en mode création, tu n'as qu'à choisir la combinaison des champs dont tu veux te servir comme critère pour
définir ce qu'est un doublon et utiliser tous ces champs comme "l'unique clé primaire de ta table" . Si tu fais tes entrées par
exemple par requête ajout, Access va te créer tout seul une table d'erreur regroupant tous les doublons et ce sans besoin de ton
intervention ne laissant passer les enregistrements uniques.


Salutations!





"" a écrit dans le message de news: %
sa recherche de doublons / Donne un nom à ta rêquête / Afficher les
résultats / Terminer ...


Il y a plus compliqué !!!

;-)



décidément... même pour un problème ne te concernant pas directement, tu me
trouves encore une solution !..
Chapeau !
j'ai suivis ta marche à suivre et de fait, je retrouve instantanément les
doublons, donc je les ai sélectionnés et éliminé, et en rouvrant la table
ils avaient disparus :-))
c'est juste dommage que je vais devoir faire ça régulièrement, ça aurait été
plus simple qu'Access ne les accepte pas dans sa table plus d'une fois...

Allez, encore un grand merci !
A+


Avatar
d
Il y a plus compliqué !!!

;-)



ok, encore merci pour tout ! ( à tous ;-))


1 2