Merci beaucoup Claude !
À plus tard,
Fabien
Merci beaucoup Claude !
À plus tard,
Fabien
L'explication se trouve ici : http://claudeleloup.developpez.com/t...lic-ploc/#LXII
N.B. J'ai converti ton fichier .XLSX en .XLS pour qu'il soit compatible avec ma version Access2000.
tu devras donc modifier chez toi :
Reviens si des passages ne sont pas clairs pour toi.
Quel travail avec de superbe explication ! Wow ! Merci beaucoup !!
J'aurais besoin d'un petit éclaircissement :
- Sur les 5 commentaires qui sont vierges (lors de l'actualisation des données), 3 s'expliquent par des enregistrements vierges dans la colonne "NumCptClient" (chiffre+lettre) sur la table principale initiale. Mais quelle est la raison pour les comptes ci-dessous (sachant que le "NumCptClient" est le même entre les anciennes données et les données à actualiser) ?
67925 133000249 GC AS FAG
97926 1359 GP DUCA J. M OU MME
- Et, comment as-tu reussi à importer des "chiffres + lettres" dans la colonne "NumCptClient" lors de l'actualisation des données sans avoir de souci d'import ?
PS : Pour le code avec ceci ça devrait fonctionner normalement, non ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2acSpreadsheetTypeExcel12 "\FichierExcel.xlsx"
Encore merci Claude !
Bon week-end
Non regarde l’exemple : la db de départ de l’exemple n’est pas la table que tu as postée : elle ne contient que 11 enregistrements, remarque que j’avais aussi modifié les valeurs du portefeuille.Sur les 5 commentaires qui sont vierges (lors de l'actualisation des données), 3 s'expliquent par des enregistrements vierges dans la colonne "NumCptClient" (chiffre+lettre) sur la table principale initiale. Mais quelle est la raison pour les comptes ci-dessous (sachant que le "NumCptClient" est le même entre les anciennes données et les données à actualiser) ?
Parce que j'ai défini cette colonne en Texte et non pas en Numérique comme tu l'avais fait :Et, comment as-tu réussi à importer des "chiffres + lettres" dans la colonne "NumCptClient" lors de l'actualisation des données sans avoir de souci d'import ?
Sans doute... et n'oublie pas de remplacer le .xls par ton .xlsx.Pour le code avec ceci ça devrait fonctionner normalement, non ?
Merci Claude tout est ok, j'ai réussi à tout reproduire sur ta version d'access.
Mercredi, lorsque je serais à mon bureau, je vais tenter de reproduire ces manip sur ma dernière version d'access.
J'espère que tout marchera aussi bien.
Encore merci
Bonjour Claude,
Je suis en train de travailler sur ma dernière version d'access, j'ai trois questions supplémentaires :
1- Est-ce qu'il faut que je mette "NumCptClient" en clé primaire dans la "table principale" et/ou dans la "table tampon" ?
2- Dans ta requête "MaJ" pour l'actualisation des données, pourquoi ne faut-il pas mettre tous les champs ? (tu n'as mis que 7 champs sur 10, il manque en autre : la clé primaire : "NumCptClient", puis : "LibObjectif" & "Performance").
3- Puis dans la réalisation du bouton & du code qui y est intégré, peux-tu me détailler les étapes pas à pas (je suis coincé à partir de l'image ci-dessous).
Merci beaucoup
Bonjour,
L’important, c’est que NumCptClient soit clé primaire de la table cible : TablePrincipale.Est-ce qu'il faut que je mette "NumCptClient" en clé primaire dans la "table principale" et/ou dans la "table tampon" ?
Dans ton cas, ça ne gênerait pas si NumCptClient était aussi la clé primaire de la table Tampon.
Essaie et tu pourras t’en rendre compte par toi-même. Quand tu as un doute, fais l’expérience, c’est comme cela qu’on apprend !
Réfléchis et reviens dire pourquoi NumCptClient est nécessairement le même dans TablePrincipale et dans Tampon.Dans ta requête "MaJ" pour l'actualisation des données, pourquoi ne faut-il pas mettre tous les champs ? (tu n'as mis que 7 champs sur 10, il manque entre autres : la clé primaire : "NumCptClient", puis : "LibObjectif" & "Performance").
Pour "LibObjectif" & "Performance" : une distraction de ma part : tous les champs susceptibles de changement doivent être mis à jour.
Puis dans la réalisation du bouton & du code qui y est intégré, peux-tu me détailler les étapes pas à pas (je suis coincé à partir de l'image ci-dessous).
Pour "NumCptClient", remarque peu réfléchie de ma part, vu que "NumCptClient" ne change pas et est notre clé primaire.Réfléchis et reviens dire pourquoi NumCptClient est nécessairement le même dans TablePrincipale et dans Tampon.
Pour "LibObjectif" & "Performance" : une distraction de ma part : tous les champs susceptibles de changement doivent être mis à jour.
Super Claude, encore merci pour tes explications détaillées concernant le bouton & le code associé, tout marche !
Je ne sais pas si c'est une erreur uniquement sur ma base access, ou si toi aussi tu l'as. En effet, lorsque j'utilise le bouton et donc le code associé pour faire les manipulations souhaitées, j'ai une erreur d’importation, cf. les deux premières images ci-dessous. Le problème intervient sur les enregistrements du champ "NumCptClient" qui sont composés de chiffres & de lettres.
A noter que ce problème n'intervient pas lorsque j'importe manuellement les données dans la table tampon, car j'indique que le type de donnée de "NumCptClient" est du "texte" (cf. la dernière image ci-dessous).
Bonjour,
et surtout ceci :… vu que "NumCptClient" ne change pas et est notre clé primaire.
[CENTER]
Ça m’a échappé pendant mes tests !Le problème intervient sur les enregistrements du champ "NumCptClient" qui sont composés de chiffres et de lettres.
Le premier enregistrement présenté à l’import doit avoir NumCptClient de type Texte.
Je cherche une solution et te reviens quand j’ai trouvé.
Bien que dans la table Tampon, la colonne NumCptClient soit de type Texte, Access va considérer que les données dans Excel sont Numériques dans toute la colonne si la première donnée est Numérique.
En d’autres mots si la cellule A2 contient un nombre, il y aura problème pour toutes les lignes suivantes où la colonne A contient une lettre. (Ce que tu constates !)
Il faut donc « s’arranger » pour que, dans le 1er enregistrement du fichier Excel le NumCptClient soit de type Texte pour forcer Access à considérer que NumCptClient est de type Texte dans toutes les lignes qui suivent.
Pour forcer, il « suffit » de préfixer d’un simple quote « ' » le contenu de la cellule A2, si celui-ci est un nombre.
J’ai ajouté un peu de code pour le faire automatiquement, voici :
N.B. Puisqu'on pilote Excel au départ de notre db, il faut ajouter une référence au projet.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 Private Sub BtMaJ_Click() Dim xlApp As Excel.Application Dim xlSheet As Excel.Worksheet Dim xlBook As Excel.Workbook 'Assurer que NumCptClient est de format Texte '-------------------------------------------- ' Initialiser les variables Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Open(CurrentProject.Path & "\FichierExcel.xls") Set xlSheet = xlBook.Worksheets("Feuil1") ' Préfixer d'un quote le contenu de la cellule A2 If IsNumeric(xlSheet.Cells(2, 1)) Then xlSheet.Cells(2, 1) = "'" & xlSheet.Cells(2, 1) End If ' Code de fermeture xlBook.Save xlApp.Quit Set xlSheet = Nothing Set xlBook = Nothing Set xlApp = Nothing 'Importation proprement dite '--------------------------- DoCmd.SetWarnings False 'Vidanger Tampon DoCmd.OpenQuery "rVidange" 'Importer Excel dans Tampon DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "Tampon", _ CurrentProject.Path & "\FichierExcel.xls", True 'Ajouter les nouveaux éventuels dans TablePrincipale DoCmd.OpenQuery "rAjoutNouveaux" 'Mettre à jour DoCmd.OpenQuery "rMaJ" DoCmd.SetWarnings True End Sub
- <ALT + F11> pour accéder au code ;
- Outils > Références… =>
et dans la liste qui s’affiche, tu coches ce qui ressemble le plus, chez toi, à la ligne en bleu :
Merci beaucoup Claude, ça marche parfaitement maintenant. Par contre j'ai enlevé ce bout de code pour que tout marche :
Ça n'impacte pas le reste du code non ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Dim xlApp As Excel.Application Dim xlSheet As Excel.Worksheet Dim xlBook As Excel.Workbook
Voici le code qui fonctionne (je ne sais pas pourquoi avec les trois premières lignes on m'indique "erreur de compilation" lors de l’exécution du code).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 Private Sub Commande0_Click() 'Assurer que NumCptClient est de format Texte '-------------------------------------------- ' Initialiser les variables Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Open(CurrentProject.Path & "\1.xlsx") Set xlSheet = xlBook.Worksheets("Feuil1") ' Préfixer d'un quote le contenu de la cellule A2 If IsNumeric(xlSheet.Cells(2, 1)) Then xlSheet.Cells(2, 1) = "'" & xlSheet.Cells(2, 1) End If ' Code de fermeture xlBook.Save xlApp.Quit Set xlSheet = Nothing Set xlBook = Nothing Set xlApp = Nothing 'Importation proprement dite '--------------------------- DoCmd.SetWarnings False 'Vidanger Tampon DoCmd.OpenQuery "rVidange" 'Importer Excel dans Tampon DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12, "Tampon", _ CurrentProject.Path & "\1.xlsx", True 'Ajouter les nouveaux éventuels dans TablePrincipale DoCmd.OpenQuery "rAjoutNouveaux" 'Mettre à jour DoCmd.OpenQuery "rMaJ" DoCmd.SetWarnings True End Sub
Je viens de tester avec le code ci-dessous (première image ci-dessous)
J'ai supprimé :
et
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Dim xlApp As Excel.Application Dim xlSheet As Excel.Worksheet Dim xlBook As Excel.WorkbookJ'ai l'impression que tout à l'air de fonctionner (je pense que je ne dois pas voir où est l'erreur vu que tu sembles perplexe sur la bonne exécution de ce code).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Set xlSheet = Nothing Set xlBook = Nothing Set xlApp = Nothing
Je t'ai aussi inséré, 2ème image ci-dessous, le message d'erreur qui apparaît avec le code en entier.
Vraiment, je tiens à te remercier encore pour tout ton travail, ainsi que pour toutes tes explications me permettant d'avoir pu avancer sur cette db.
Prends l’habitude
- d’ajouter systématiquement l’option Explicit à tous tes modules ;
- de donner des noms significatifs à tes contrôles.
Les instructions que tu as supprimées sont indispensables !
Le signalement de l’erreur vient du fait qu’il te manque une référence :
As-tu ceci :
D'accord, je viens de modifier, je ferais attention à l'avenirPrends l’habitude
- d’ajouter systématiquement l’option Explicit à tous tes modules ;
- de donner des noms significatifs à tes contrôles.
Voici du coup les références cochées (peut-être que mon problème s'explique par ma version access qui est différente de la tienne).
Ce n'est pas la bonne référence ! Regarde l'image dans mon billet N° 34 : tu dois voir « Microsoft Excel » dans le nom !
Oui je viens de le voir, j'étais justement en train de te répondre !
J'avais coché "microsoft word 14.0 Object library" au lieu de "microsoft excel 14.0 Object library" (quel boulet !!).
Mille mercis Claude !!!!
A bientôt,
Bonne journée
Fabien
J'ai un nouveau travail en cours (ma toute dernière étape sur ce projet access), mais je vais tenter d'avancer un peu seul mais je bloque un peu.
Le but de cette dernière étape de travail est d’émettre des commentaires sur chaque client tout en ayant les bonnes informations sur lui (la valeur de son portefeuille, ses performances, etc..).
Mon but est donc d’émettre des commentaires sur chaque client tout en ayant les bonnes informations sur lui (la valeur de son portefeuille, ses performances, etc..). Je tente donc de faire un formulaire rattaché à la table principale et aux données qui changent.
Ce formulaire contient tous les enregistrements de la table principale et avec une liste déroulante pour le champ « Groupements familiaux - comptes individuels » et pour les « NumCptClient ».
La particularité de ce formulaire : il doit prendre en compte que les données de la table principale changent, par conséquent les données issues du formulaire doivent s’actualiser automatiquement.
Si tu es d'accord, j'aimerai bien que tu regardes ma db finale pour que tu me dises ce qu'il y a améliorer/arranger
Je n'ai pas tout compris.
Fais un dessin du formulaire que tu voudrais obtenir et montres-en une saisie d'écran.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager