Bonjour,
Voici une fa on de faire en utilisant ADO (Activex Data Object)
Tu dois ajouter au projet VBA du fichier Excel, la r f rence
suivante : Microsoft Activex Data objects XX library
Sous Excel 2013 XX est 6.1 , Excel 2003 = ?
Aux fins de l'exemple, j'ai suppos que j'avais un
tableau de donn es en Feuil1 et que je voulais comparer
chacune des lignes de ce tableau la table d j existante
dans Access.
Pour ce qui est des conditions de mon exemple, si les 3
premiers champs sont identiques, alors on proc de automatiquement
la mise jour de la valeur du champ 4 de la table acc s
Dans le cas contraire, on ajoute cet enregistrement la table.
toi d'adapter :
N.B. Je ne suis pas un adapte d'Access, si ton tableau de donner est
tr s grand, Il y a peut- tre de gurus d'Access qui connaisse une fa on
d' crire des requ tes plus performantes...
'---------------------------------------------------
Sub Requ teAvecADO_Feuille_test()
'Requiert la biblioth que suivante :
'barre des menus / outils / r f rence :
'"Microsoft Activex Data objects 2.8 library"
Dim Conn As ADODB.Connection, Rst As New ADODB.Recordset
Dim Requete As String, C As Range
Dim File As String, Rg As Range
With Worksheets("Feuil1") 'Nom Feuille adapter
'Ligne 1 tant les tiquettes de colonnes
Set Rg = .Range("A2:B" & .Range("A65536").End(xlUp).Row)
End With
'Chemin & Fichier sur lequel se fera la requ te :
File = "D:Comptoir.mdb"
Set Conn = New ADODB.Connection
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & File & " "
For Each C In Rg
'La requ te qui sera ex cut e.
Requete = "SELECT * From Employ s Where [N employ ]=" & C.Val ue & "" &
_
" And Nom Like '" & C.Offset(, 1).Value & "'" & _
" And Pr nom Like '" & C.Offset(, 2).Value & "'"
'Ex cution de la requ te
Rst.Open Requete, Conn, adOpenDynamic, adLockOptimistic
'S'il y a au moins un enregistrement r pondant au crit re
If Rst.EOF = False Then
'On remplace coup s r la valeur du champ 4
Rst(3).Value = C.Offset(, 3).Value
Else
'si l'enregistrement n'est pas trouv alors on l'ajoute
With Rst
.AddNew
'Dans mon exemple, rst(0) est la cl primaire de l a table
'Elle ne peut pas contenir de doublon, il faut tr ouver un
'moyen d'ajouter une valeur selon la table que l' on a
'sans que ce soit un doublon pour viter les messa ges
'd'erreur et du refus d'access d'ajouter le nouve l
'enregitrement
Rst(0) = 20 '<<==== Cl primaire
Rst(1) = C.Offset(, 1)
Rst(2) = C.Offset(, 2)
Rst(3) = C.Offset(, 3)
'On peut y inclure autant de champs que l'on d si res...
End With
End If
'Mise jour de l'enregistrement
Rst.Update
'ferme l'enregistrement
Rst.Close
'on passe la ligne suivante dans le tableau Excel
Next
'Ferme la connexion Access
Conn.Close
'Vide l'espace m moire occup par les objets
Set Rst = Nothing: Set Conn = Nothing
Set Rg = Nothing: Set C = Nothing
End Sub
'---------------------------------------------
MichD
---------------------------------------------------------------
"Lunettes_Bleues" a crit dans le message de groupe de discussion :
Bonjour,
En ann e 1
J'ai plusieurs fichiers Excel, provenant d'organismes diff rents, mais av ec
une stucture des donn es strictement similaire d'un fichier l'autre.
J'ai une base de donn es Access, avec une table, qui a la m me structure que
les plages de donn es des fichiers Excel.
Pour assembler les donn es des diverses sources, j'int gre chaque fichier
Excel une macro d'exportation vers la table Access. Il s'agit d'ins rer d es
donn es nouvelles (INSERT)
Jusque l tout va bien.
En ann e 2
Je re ois les fichiers Excel des m mes organismes.
J'ai de nouvelles donn es, mais aussi des donn es de l'ann e 1 pour
lesquelles certains montants peuvent avoir chang par rapport l'ann e 1
(M me ligne que ann e 1 avec un l ment mettre jour).
C'est pour ces mises jour que j'ai besoin d'un coup de main expert.
Il faut que j'exporte les nouvelles lignes et que je mettre jour le champ
"montant" de certaines lignes qui existaient en ann e 1.
Je pr cise que pour identifier les lignes existantes il faut balayer troi s
champs (trois crit res).
J'ai vu des solutions ici et l sur des forums mais je n'arrive pas les
adapter.
Je suis sur Office 2003.
Je remercie les personnes qui pourraient m'aider.
Bien vous toutes et tous.
Bonjour,
Voici une fa on de faire en utilisant ADO (Activex Data Object)
Tu dois ajouter au projet VBA du fichier Excel, la r f rence
suivante : Microsoft Activex Data objects XX library
Sous Excel 2013 XX est 6.1 , Excel 2003 = ?
Aux fins de l'exemple, j'ai suppos que j'avais un
tableau de donn es en Feuil1 et que je voulais comparer
chacune des lignes de ce tableau la table d j existante
dans Access.
Pour ce qui est des conditions de mon exemple, si les 3
premiers champs sont identiques, alors on proc de automatiquement
la mise jour de la valeur du champ 4 de la table acc s
Dans le cas contraire, on ajoute cet enregistrement la table.
toi d'adapter :
N.B. Je ne suis pas un adapte d'Access, si ton tableau de donner est
tr s grand, Il y a peut- tre de gurus d'Access qui connaisse une fa on
d' crire des requ tes plus performantes...
'---------------------------------------------------
Sub Requ teAvecADO_Feuille_test()
'Requiert la biblioth que suivante :
'barre des menus / outils / r f rence :
'"Microsoft Activex Data objects 2.8 library"
Dim Conn As ADODB.Connection, Rst As New ADODB.Recordset
Dim Requete As String, C As Range
Dim File As String, Rg As Range
With Worksheets("Feuil1") 'Nom Feuille adapter
'Ligne 1 tant les tiquettes de colonnes
Set Rg = .Range("A2:B" & .Range("A65536").End(xlUp).Row)
End With
'Chemin & Fichier sur lequel se fera la requ te :
File = "D:Comptoir.mdb"
Set Conn = New ADODB.Connection
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & File & " "
For Each C In Rg
'La requ te qui sera ex cut e.
Requete = "SELECT * From Employ s Where [N employ ]=" & C.Val ue & "" &
_
" And Nom Like '" & C.Offset(, 1).Value & "'" & _
" And Pr nom Like '" & C.Offset(, 2).Value & "'"
'Ex cution de la requ te
Rst.Open Requete, Conn, adOpenDynamic, adLockOptimistic
'S'il y a au moins un enregistrement r pondant au crit re
If Rst.EOF = False Then
'On remplace coup s r la valeur du champ 4
Rst(3).Value = C.Offset(, 3).Value
Else
'si l'enregistrement n'est pas trouv alors on l'ajoute
With Rst
.AddNew
'Dans mon exemple, rst(0) est la cl primaire de l a table
'Elle ne peut pas contenir de doublon, il faut tr ouver un
'moyen d'ajouter une valeur selon la table que l' on a
'sans que ce soit un doublon pour viter les messa ges
'd'erreur et du refus d'access d'ajouter le nouve l
'enregitrement
Rst(0) = 20 '<<==== Cl primaire
Rst(1) = C.Offset(, 1)
Rst(2) = C.Offset(, 2)
Rst(3) = C.Offset(, 3)
'On peut y inclure autant de champs que l'on d si res...
End With
End If
'Mise jour de l'enregistrement
Rst.Update
'ferme l'enregistrement
Rst.Close
'on passe la ligne suivante dans le tableau Excel
Next
'Ferme la connexion Access
Conn.Close
'Vide l'espace m moire occup par les objets
Set Rst = Nothing: Set Conn = Nothing
Set Rg = Nothing: Set C = Nothing
End Sub
'---------------------------------------------
MichD
---------------------------------------------------------------
"Lunettes_Bleues" a crit dans le message de groupe de discussion :
08885b24-a38e-4623-aa43-0a34e321e4d3@googlegroups.com...
Bonjour,
En ann e 1
J'ai plusieurs fichiers Excel, provenant d'organismes diff rents, mais av ec
une stucture des donn es strictement similaire d'un fichier l'autre.
J'ai une base de donn es Access, avec une table, qui a la m me structure que
les plages de donn es des fichiers Excel.
Pour assembler les donn es des diverses sources, j'int gre chaque fichier
Excel une macro d'exportation vers la table Access. Il s'agit d'ins rer d es
donn es nouvelles (INSERT)
Jusque l tout va bien.
En ann e 2
Je re ois les fichiers Excel des m mes organismes.
J'ai de nouvelles donn es, mais aussi des donn es de l'ann e 1 pour
lesquelles certains montants peuvent avoir chang par rapport l'ann e 1
(M me ligne que ann e 1 avec un l ment mettre jour).
C'est pour ces mises jour que j'ai besoin d'un coup de main expert.
Il faut que j'exporte les nouvelles lignes et que je mettre jour le champ
"montant" de certaines lignes qui existaient en ann e 1.
Je pr cise que pour identifier les lignes existantes il faut balayer troi s
champs (trois crit res).
J'ai vu des solutions ici et l sur des forums mais je n'arrive pas les
adapter.
Je suis sur Office 2003.
Je remercie les personnes qui pourraient m'aider.
Bien vous toutes et tous.
Bonjour,
Voici une fa on de faire en utilisant ADO (Activex Data Object)
Tu dois ajouter au projet VBA du fichier Excel, la r f rence
suivante : Microsoft Activex Data objects XX library
Sous Excel 2013 XX est 6.1 , Excel 2003 = ?
Aux fins de l'exemple, j'ai suppos que j'avais un
tableau de donn es en Feuil1 et que je voulais comparer
chacune des lignes de ce tableau la table d j existante
dans Access.
Pour ce qui est des conditions de mon exemple, si les 3
premiers champs sont identiques, alors on proc de automatiquement
la mise jour de la valeur du champ 4 de la table acc s
Dans le cas contraire, on ajoute cet enregistrement la table.
toi d'adapter :
N.B. Je ne suis pas un adapte d'Access, si ton tableau de donner est
tr s grand, Il y a peut- tre de gurus d'Access qui connaisse une fa on
d' crire des requ tes plus performantes...
'---------------------------------------------------
Sub Requ teAvecADO_Feuille_test()
'Requiert la biblioth que suivante :
'barre des menus / outils / r f rence :
'"Microsoft Activex Data objects 2.8 library"
Dim Conn As ADODB.Connection, Rst As New ADODB.Recordset
Dim Requete As String, C As Range
Dim File As String, Rg As Range
With Worksheets("Feuil1") 'Nom Feuille adapter
'Ligne 1 tant les tiquettes de colonnes
Set Rg = .Range("A2:B" & .Range("A65536").End(xlUp).Row)
End With
'Chemin & Fichier sur lequel se fera la requ te :
File = "D:Comptoir.mdb"
Set Conn = New ADODB.Connection
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & File & " "
For Each C In Rg
'La requ te qui sera ex cut e.
Requete = "SELECT * From Employ s Where [N employ ]=" & C.Val ue & "" &
_
" And Nom Like '" & C.Offset(, 1).Value & "'" & _
" And Pr nom Like '" & C.Offset(, 2).Value & "'"
'Ex cution de la requ te
Rst.Open Requete, Conn, adOpenDynamic, adLockOptimistic
'S'il y a au moins un enregistrement r pondant au crit re
If Rst.EOF = False Then
'On remplace coup s r la valeur du champ 4
Rst(3).Value = C.Offset(, 3).Value
Else
'si l'enregistrement n'est pas trouv alors on l'ajoute
With Rst
.AddNew
'Dans mon exemple, rst(0) est la cl primaire de l a table
'Elle ne peut pas contenir de doublon, il faut tr ouver un
'moyen d'ajouter une valeur selon la table que l' on a
'sans que ce soit un doublon pour viter les messa ges
'd'erreur et du refus d'access d'ajouter le nouve l
'enregitrement
Rst(0) = 20 '<<==== Cl primaire
Rst(1) = C.Offset(, 1)
Rst(2) = C.Offset(, 2)
Rst(3) = C.Offset(, 3)
'On peut y inclure autant de champs que l'on d si res...
End With
End If
'Mise jour de l'enregistrement
Rst.Update
'ferme l'enregistrement
Rst.Close
'on passe la ligne suivante dans le tableau Excel
Next
'Ferme la connexion Access
Conn.Close
'Vide l'espace m moire occup par les objets
Set Rst = Nothing: Set Conn = Nothing
Set Rg = Nothing: Set C = Nothing
End Sub
'---------------------------------------------
MichD
---------------------------------------------------------------
"Lunettes_Bleues" a crit dans le message de groupe de discussion :
Bonjour,
En ann e 1
J'ai plusieurs fichiers Excel, provenant d'organismes diff rents, mais av ec
une stucture des donn es strictement similaire d'un fichier l'autre.
J'ai une base de donn es Access, avec une table, qui a la m me structure que
les plages de donn es des fichiers Excel.
Pour assembler les donn es des diverses sources, j'int gre chaque fichier
Excel une macro d'exportation vers la table Access. Il s'agit d'ins rer d es
donn es nouvelles (INSERT)
Jusque l tout va bien.
En ann e 2
Je re ois les fichiers Excel des m mes organismes.
J'ai de nouvelles donn es, mais aussi des donn es de l'ann e 1 pour
lesquelles certains montants peuvent avoir chang par rapport l'ann e 1
(M me ligne que ann e 1 avec un l ment mettre jour).
C'est pour ces mises jour que j'ai besoin d'un coup de main expert.
Il faut que j'exporte les nouvelles lignes et que je mettre jour le champ
"montant" de certaines lignes qui existaient en ann e 1.
Je pr cise que pour identifier les lignes existantes il faut balayer troi s
champs (trois crit res).
J'ai vu des solutions ici et l sur des forums mais je n'arrive pas les
adapter.
Je suis sur Office 2003.
Je remercie les personnes qui pourraient m'aider.
Bien vous toutes et tous.
| Requete = "SELECT * From Tbl_Depense_OC Where Concatener like'" &
**** sur cette ligne, il te manque un espace apr s "Like"
Si dans ta table Access tu as UN champ unique "Concatener"
qui correspond au contenu des 3 colonnes de la ligne de la
feuille de donn es Excel, fais comme ceci en tenant compte
de ce tu as mis entre la valeur de chacune des colonnes
de la feuille d'Excel dans ta table Access.
Exemple : Si dans la ligne B1:B3, il y a Toto Toto1 Toto2
Dans le champ "Concatener" de ta base Access, il y a-t-il
un espace? Une virgule? O un retour la ligne entre la valeur
des "toto"?
Tu dois reproduire exactement la syntaxe du champ que
tu as mis dans ta table Access. Dans mon exemple, j'ai utilis
le "VBCRLF" mais cela pourrait tre un espace ou une virgule
entre guillemets.
Mon Champ = "'" & C.Value & vbCrLf & _
C.Offset(, 1).Value & vbCrLf & _
C.Offset(, 2).Value & "'"
Requete = "SELECT * From Tbl_Depense_OC Where Concatener like MonCha mp
Difficile d'aller plus loin que cela sans avoir les outils sous les yeux!
MichD
---------------------------------------------------------------
| Requete = "SELECT * From Tbl_Depense_OC Where Concatener like'" &
**** sur cette ligne, il te manque un espace apr s "Like"
Si dans ta table Access tu as UN champ unique "Concatener"
qui correspond au contenu des 3 colonnes de la ligne de la
feuille de donn es Excel, fais comme ceci en tenant compte
de ce tu as mis entre la valeur de chacune des colonnes
de la feuille d'Excel dans ta table Access.
Exemple : Si dans la ligne B1:B3, il y a Toto Toto1 Toto2
Dans le champ "Concatener" de ta base Access, il y a-t-il
un espace? Une virgule? O un retour la ligne entre la valeur
des "toto"?
Tu dois reproduire exactement la syntaxe du champ que
tu as mis dans ta table Access. Dans mon exemple, j'ai utilis
le "VBCRLF" mais cela pourrait tre un espace ou une virgule
entre guillemets.
Mon Champ = "'" & C.Value & vbCrLf & _
C.Offset(, 1).Value & vbCrLf & _
C.Offset(, 2).Value & "'"
Requete = "SELECT * From Tbl_Depense_OC Where Concatener like MonCha mp
Difficile d'aller plus loin que cela sans avoir les outils sous les yeux!
MichD
---------------------------------------------------------------
| Requete = "SELECT * From Tbl_Depense_OC Where Concatener like'" &
**** sur cette ligne, il te manque un espace apr s "Like"
Si dans ta table Access tu as UN champ unique "Concatener"
qui correspond au contenu des 3 colonnes de la ligne de la
feuille de donn es Excel, fais comme ceci en tenant compte
de ce tu as mis entre la valeur de chacune des colonnes
de la feuille d'Excel dans ta table Access.
Exemple : Si dans la ligne B1:B3, il y a Toto Toto1 Toto2
Dans le champ "Concatener" de ta base Access, il y a-t-il
un espace? Une virgule? O un retour la ligne entre la valeur
des "toto"?
Tu dois reproduire exactement la syntaxe du champ que
tu as mis dans ta table Access. Dans mon exemple, j'ai utilis
le "VBCRLF" mais cela pourrait tre un espace ou une virgule
entre guillemets.
Mon Champ = "'" & C.Value & vbCrLf & _
C.Offset(, 1).Value & vbCrLf & _
C.Offset(, 2).Value & "'"
Requete = "SELECT * From Tbl_Depense_OC Where Concatener like MonCha mp
Difficile d'aller plus loin que cela sans avoir les outils sous les yeux!
MichD
---------------------------------------------------------------
On 18 fév, 16:20, "MichD" wrote: > | Requete = "SELECT * From Tbl_Depense_OC Where Concatener like'" & > > **** sur ce tte ligne, il te manque un espace apr s "Like" > > Si dans ta table Access tu as UN champ unique "Concatener" > qui correspond au contenu des 3 colonn es de la ligne de la > feuille de donn es Excel, fais comme ceci en tenant compte > de ce tu as mis entre la valeur de chacune des colonnes > de la fe uille d'Excel dans ta table Access. > > Exemple : Si dans la ligne B1:B3 , il y a Toto Toto1 Toto2 > Dans le champ "Concatener" de ta base Access, i l y a-t-il > un espace? Une virgule? O un retour la ligne entre la valeur > des "toto"? > > Tu dois reproduire exactement la syntaxe du champ que > tu as mis dans ta table Access. Dans mon exemple, j'ai utilis > le "VBCRLF" m ais cela pourrait tre un espace ou une virgule > entre guillemets. > > Mon Champ = "'" & C.Value & vbCrLf & _ > C.Offset(, 1).Value & vbC rLf & _ > C.Offset(, 2).Value & "'" > > Requete = "SELECT * Fr om Tbl_Depense_OC Where Concatener like MonChamp > > Difficile d'aller p lus loin que cela sans avoir les outils sous les yeux! > > MichD > -------- ------------------------------------------------------- Bonjour, Je te reme rcie pour ces précisions et pour la rapidité de ta réponse. Dès que je peux m'y remettre, je te tiens au courant. Bonne journée à toi.
On 18 fév, 16:20, "MichD" <michde...@hotmail.com> wrote: > | Requete = "SELECT * From Tbl_Depense_OC Where Concatener like'" & > > **** sur ce tte ligne, il te manque un espace apr s "Like" > > Si dans ta table Access tu as UN champ unique "Concatener" > qui correspond au contenu des 3 colonn es de la ligne de la > feuille de donn es Excel, fais comme ceci en tenant compte > de ce tu as mis entre la valeur de chacune des colonnes > de la fe uille d'Excel dans ta table Access. > > Exemple : Si dans la ligne B1:B3 , il y a Toto Toto1 Toto2 > Dans le champ "Concatener" de ta base Access, i l y a-t-il > un espace? Une virgule? O un retour la ligne entre la valeur > des "toto"? > > Tu dois reproduire exactement la syntaxe du champ que > tu as mis dans ta table Access. Dans mon exemple, j'ai utilis > le "VBCRLF" m ais cela pourrait tre un espace ou une virgule > entre guillemets. > > Mon Champ = "'" & C.Value & vbCrLf & _ > C.Offset(, 1).Value & vbC rLf & _ > C.Offset(, 2).Value & "'" > > Requete = "SELECT * Fr om Tbl_Depense_OC Where Concatener like MonChamp > > Difficile d'aller p lus loin que cela sans avoir les outils sous les yeux! > > MichD > -------- ------------------------------------------------------- Bonjour, Je te reme rcie pour ces précisions et pour la rapidité de ta réponse. Dès que je peux m'y remettre, je te tiens au courant. Bonne journée à toi.
On 18 fév, 16:20, "MichD" wrote: > | Requete = "SELECT * From Tbl_Depense_OC Where Concatener like'" & > > **** sur ce tte ligne, il te manque un espace apr s "Like" > > Si dans ta table Access tu as UN champ unique "Concatener" > qui correspond au contenu des 3 colonn es de la ligne de la > feuille de donn es Excel, fais comme ceci en tenant compte > de ce tu as mis entre la valeur de chacune des colonnes > de la fe uille d'Excel dans ta table Access. > > Exemple : Si dans la ligne B1:B3 , il y a Toto Toto1 Toto2 > Dans le champ "Concatener" de ta base Access, i l y a-t-il > un espace? Une virgule? O un retour la ligne entre la valeur > des "toto"? > > Tu dois reproduire exactement la syntaxe du champ que > tu as mis dans ta table Access. Dans mon exemple, j'ai utilis > le "VBCRLF" m ais cela pourrait tre un espace ou une virgule > entre guillemets. > > Mon Champ = "'" & C.Value & vbCrLf & _ > C.Offset(, 1).Value & vbC rLf & _ > C.Offset(, 2).Value & "'" > > Requete = "SELECT * Fr om Tbl_Depense_OC Where Concatener like MonChamp > > Difficile d'aller p lus loin que cela sans avoir les outils sous les yeux! > > MichD > -------- ------------------------------------------------------- Bonjour, Je te reme rcie pour ces précisions et pour la rapidité de ta réponse. Dès que je peux m'y remettre, je te tiens au courant. Bonne journée à toi.