Où alors essay
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 If DCount("*","[test]","[nomVille] LIKE " & chr(34) & oWSht.Cells(i, 9) & "*" & chr(34))=0 Then
Où alors essay
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 If DCount("*","[test]","[nomVille] LIKE " & chr(34) & oWSht.Cells(i, 9) & "*" & chr(34))=0 Then
C'était bien le problème : j'ai supprimé les apostrophes dans mon tableau Excel et ça ne met plus l'erreur. Le problème c'est que la ligne vérifie si tout le contenu de la cellule existe déjà dans la table. Du coup, ça ne résout pas mon problème des "Perpignan Cassanyes", "Perpignan Saint-Charles", "Perpignan Joffre" etc... En fait ce qu'on a fait c'est rajouter une ligne qui empèche les doublons
Pour mon problème, il faudrait qu'il ne vérifie que si le premier mot de la cellule existe déjà dans la table de destination, et non pas tout le contenu de la cellule. Donc en fait tous les caractères jusqu'à un espace.
Là ça se corse
En tout cas chapeau bas pour résoudre aussi vite les erreurs !
Effectivement, quand j'enlève l'option "Indexé - Sans doublons" du champ [NomVille], ça produit le même résultat grâce à la condition qu'on a rajouté. En fait, le programme que tu as fait copie les champs spécifiés d'une table Excel vers les champs spécifiés de la table d'une base de données Access en évitant les doublons !
Félicitations
Mais, pour mon problème (voir mon message précédent) ?
Oulà ! Autre gros problème : Comme le programme arrête d'importer lorsqu'il recontre une case vide, il y a une partie des données qui ne sont pas importées
Parce qu'en fait, j'ai parfois entre 1 et 5 cases vides dans la colonne mais il y a des informations en-dessous, et elles ne sont pas prises en compte, du coup ...
En fait, il faudrait que le programme tolère genre jusqu'à 10 cases vides avant d'arrêter l'importation
J'espère ne pas trop t'importuner avec tous mes problèmes ...
En tout cas, merci de laide que tu m'a déjà apportée
J'ai essayé de rajouter une condition dans la ligne du "Tant que" pour qu'il accepte de continuer à importer même s'il rencontre 2 lignes vides, mais apparemment, ça ne marche pas (d'après les tests que j'ai fait) :
Edit : En fait c'est tout con, je sais pas pourquoi j'y ai pas pensé avant : il suffit de définir une plage à importer. Par exemple, on sait qu'il commence à la ligne 11, on peut pas lui dire de s'arrêter à la ligne 600 par exemple (en laissant une bonne marge pour les ajouts à venir).
Code : Sélectionner tout - Visualiser dans une fenêtre à part While oWSht.Range("I" & i).Value <> "" And oWSht.Range("I" & i + 1).Value <> ""
Par contre, j'avoue que je sais pas trop comment faire
à la place de
tu met
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 While oWSht.Range("I" & i).Value <> ""
pas si compliquer que ca
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 While i<600
puis pour éviter tes doublon faut que t'utilise
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 If DCount("*","[test]","[nomVille] LIKE " & chr(34) & left(oWSht.Cells(i, 9),instr(oWSht.Cells(i, 9))-1) & "*" & chr(34))=0 Then
Ok, merci des infos, je teste ça lundi, et je te tiens au courant
Salut ! Alors j'ai une erreur dans la dernière ligne que tu m'as donné : "Attendu : séparateur de liste". Voir screen joint ci-dessous.
D'autre part, en dehors de l'erreur sur la ligne du "If", j'ai le message "Wend sans While", alors qu'il y a bien un While dans le 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 Private Sub Commande1_Click() Dim oApp As Excel.Application Dim oWkb As Excel.Workbook Dim oWSht As Excel.Worksheet Set oApp = CreateObject("excel.application") Set oWkb = oApp.Workbooks.Open("C:\Interventions\création.xls") Set oWSht = oWkb.Worksheets("Tableau réseau BPS") 'premier ligne ou tu commence ton import i = 11 'pour éviter les messages lors de l'ajout des enregistrements DoCmd.SetWarnings False 'tant qu'on n'est pas arrivés à la ligne 600 While i < 600 cSQL = "insert into [test] ( [NomVille], [CPVille], [CodeDepartement#]) values (" & Chr(34) & oWSht.Cells(i, 9) & Chr(34) & ", " & Chr(34) & oWSht.Cells(i, 11) & Chr(34) & ", " & Chr(34) & Left(oWSht.Cells(i, 11), 2) & Chr(34) & ")" 'condition de remplissage de la table If DCount("*", "[test]", "[nomVille] LIKE '" & oWSht.Cells(i, 9) & "*'") = 0 Then 'exécute la requète DoCmd.RunSQL cSQL 'sinon, on passe à la ligne suivante Else i = i + 1 Wend DoCmd.SetWarnings True End Sub
en effet il maquait un argument dans ma fonction. je l'ai pas testé mais je pense que maintenat ca doit etre bon
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 If DCount("*","[test]","[nomVille] LIKE " & chr(34) & left(oWSht.Cells(i, 9),instr(oWSht.Cells(i, 9)," ")-1) & "*" & chr(34))=0 Then
effectivement il manque un "End If" juste avant ton wendD'autre part, en dehors de l'erreur sur la ligne du "If", j'ai le message "Wend sans While", alors qu'il y a bien un While dans le 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 Commande1_Click() Dim oApp As Excel.Application Dim oWkb As Excel.Workbook Dim oWSht As Excel.Worksheet Set oApp = CreateObject("excel.application") Set oWkb = oApp.Workbooks.Open("C:\Interventions\création.xls") Set oWSht = oWkb.Worksheets("Tableau réseau BPS") 'premier ligne ou tu commence ton import i = 11 'pour éviter les messages lors de l'ajout des enregistrements DoCmd.SetWarnings False 'tant qu'on n'est pas arrivés à la ligne 600 While i < 600 'condition de remplissage de la table If DCount("*","[test]","[nomVille] LIKE " & chr(34) & left(oWSht.Cells(i, 9),instr(oWSht.Cells(i, 9)," ")-1) & "*" & chr(34))=0 Then cSQL = "insert into [test] ( [NomVille], [CPVille], [CodeDepartement#]) values (" & Chr(34) & oWSht.Cells(i, 9) & Chr(34) & ", " & Chr(34) & oWSht.Cells(i, 11) & Chr(34) & ", " & Chr(34) & Left(oWSht.Cells(i, 11), 2) & Chr(34) & ")" 'exécute la requète DoCmd.RunSQL cSQL 'le esle est inutile car on doit passer à la ligne suivante même si on éxecute la requete 'Else end if i = i + 1 Wend DoCmd.SetWarnings True End Sub
Je profite du sujet pour une question sur les formats de date : Ca va poser problème si j'essaie d'importer un truc excel du genre 06-06-06 dans un champs date d'access?
merci
Bouah ! Comment j'ai pû oublier ça ! Honte sur moiEnvoyé par totofe
Sinon, j'ai (encore) une erreur sur la ligne :
Voir pièce jointe
Code : Sélectionner tout - Visualiser dans une fenêtre à part If DCount("*", "[test]", "[nomVille] LIKE " & Chr(34) & Left(oWSht.Cells(i, 9), InStr(oWSht.Cells(i, 9), " ") - 1) & "*" & Chr(34)) = 0 Then
je suis pas sure faut que tu test. mais je pense que sa devrait fonctionner. sinon je pense que la fonction format() pourait t'aiderEnvoyé par Hydex
dsl voit pas d'ou elle provient l'erreur .Envoyé par azertix
J'ai essayé et apparemment ça ne pose pas de problèmes.Envoyé par Hydex
Sinon pour ton format date sur Excel, ça ne serait pas avec des "/" à la place des "-" ? Parce que j'ai regardé tous les formats date sur Excel, et je n'ai pas vu avec des tirets sauf par exemple : "mars-03".
En tout cas, j'ai testé avec le format 03/03/03 sur Excel et le format 03/03/2003 avec Access, et ça n'a pas posé de problèmes.
Après tout ce sont deux logiciels de la suite Microsoft, donc ils sont censés être compatibles et pouvoir permettre des importations/exportations facilement.
Ensuite à toi de choisir le format date approprié et dans Excel et dans Access.
Essaye de prendre des formats les plus proches possibles
Voir pièce jointe
Tu as vu mon screen ?Envoyé par totofe
essay avec ca mais je pense pas que ca devrais résoudre ton probleme
Code : Sélectionner tout - Visualiser dans une fenêtre à part If DCount("*", "[test]", "[nomVille] LIKE '" & Left(oWSht.Cells(i, 9), InStr(oWSht.Cells(i, 9), " ") - 1) & "*'") = 0 Then
Non, hélas j'ai toujours la même erreur
essay de voir se que te retourne la fonction instr() et regarde si elle te renvoi bien la position du premier " ".
essaye de voir d'ou provient ton erreur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 msgbox InStr(oWSht.Cells(i, 9), " ")
Bah, tant pis, je trouve pas.
Mais ne t'inquiète pas c'est déjà bien ce que fait le programme
Je te remercie pour toute l'aide que tu m'as apporté, et encore chapeau pour la résolution des problèmes
Azertix
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