Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

ADO et methode append

4 réponses
Avatar
pcvsfr
Bonjour,

Voila je modifie via ADO un fichier excel, la requete fonctionne et je
recupére les collections field
ensuite j'affecte une variable aux collections fields de cette facon
externe.Fields("commentaires").Value = commentaire
dans le but de modifier les valeurs

La modification se passe bien sauf que dans certains cas j'ai des
commentaires supérieur a 255 caractéres et il ne le prend pas
j'ai essaye de modifier le type de variable et d'augmenter la taille
possible j'ai utilise le code suivant

Set externe = New ADODB.Recordset
Set externe = New Recordset
externe.Fields.Append "Montant DI", adLongVarChar, 5000

mais les valeurs ne changent pas
Quelqu'un aurait il une idee ?

4 réponses

Avatar
michdenis
Bonjour Pcvsfr,


Ceci permet de recopier un recordset vers une plage
de cellules de ton choix. Permet jusqu'à 32767 caractères
par cellules.

La difficulté, ce n'est pas le recordset avec ADO mais la
recopie vers la feuille de calcul.

'---------------------------------------
Sub ImporterAccessVersExcel()

Dim Tblo As Variant
Dim C As Integer, Requete As String
Dim Conn As New ADODB.Connection
Dim Rst As New ADODB.Recordset
Dim RG As Range, Requete As String
Dim Chemin As String, NomFeuille As String

'Feuille et plage recevant les données du recordset
With Worksheets("Feuil3")
Set RG = Range("A1")
End With

Chemin = "c:"
file = "Ado.xls"
NomFeuille = "Feuil1" 'La feuille source des données
Requete = "SELECT * From [" & NomFeuille & "$]"

Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Chemin & file & ";" & _
"Extended Properties=""Excel 8.0;HDR=YES;"""

Rst.Open Requete, Conn, adOpenStatic, adLockPessimistic

nb = Rst.RecordCount
If nb = 0 Then
MsgBox "Aucun enregistrement trouvé."
Exit Sub
End If

'Copie le nom des champs dans la première ligne
Do
RG.Offset(, C) = Rst.Fields(C).Name
C = C + 1
x = x + 1
Loop Until x = Rst.Fields.Count

Tblo = Rst.GetRows
Set RG = RG.Offset(1).Resize(nb, Rst.Fields.Count)
For A = 0 To UBound(Tblo, 1)
For B = 0 To UBound(Tblo, 2)
RG.Offset(B, A).Value = Tblo(A, B)
Next
Next
Rst.Close: Conn.Close
Set Rst = Nothing: Set Conn = Nothing : Set Rg = Nothing
End Sub
'---------------------------------------


Salutations!






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

Voila je modifie via ADO un fichier excel, la requete fonctionne et je
recupére les collections field
ensuite j'affecte une variable aux collections fields de cette facon
externe.Fields("commentaires").Value = commentaire
dans le but de modifier les valeurs

La modification se passe bien sauf que dans certains cas j'ai des
commentaires supérieur a 255 caractéres et il ne le prend pas
j'ai essaye de modifier le type de variable et d'augmenter la taille
possible j'ai utilise le code suivant

Set externe = New ADODB.Recordset
Set externe = New Recordset
externe.Fields.Append "Montant DI", adLongVarChar, 5000

mais les valeurs ne changent pas
Quelqu'un aurait il une idee ?
Avatar
pcvsfr
merci michdenis de ton aide
mais mon problème n'est pas d'exporter des cellules vers EXCEL, j'essaie de
m'expliquer plus clairement

j'ai un fichier que j'envoie a x personnes, c'est personnes doivent mettre à
jour les informations, ensuite c'est informations sont envoyés sur un autre
fichier excel via ADO.
Mon problème est que j'ai une case commentaires et quelle peut contenir plus
de 255 caractères
or ADO n'en prend que 255

Je cherche donc a pouvoir modifier le type de caratere ou la logueur de la
chaine
D'autres part j'ai repris ton code et il n'exporte pas non plus des chaines
superieures à 255 caractère

Merci de ton aide










Bonjour Pcvsfr,


Ceci permet de recopier un recordset vers une plage
de cellules de ton choix. Permet jusqu'à 32767 caractères
par cellules.

La difficulté, ce n'est pas le recordset avec ADO mais la
recopie vers la feuille de calcul.

'---------------------------------------
Sub ImporterAccessVersExcel()

Dim Tblo As Variant
Dim C As Integer, Requete As String
Dim Conn As New ADODB.Connection
Dim Rst As New ADODB.Recordset
Dim RG As Range, Requete As String
Dim Chemin As String, NomFeuille As String

'Feuille et plage recevant les données du recordset
With Worksheets("Feuil3")
Set RG = Range("A1")
End With

Chemin = "c:"
file = "Ado.xls"
NomFeuille = "Feuil1" 'La feuille source des données
Requete = "SELECT * From [" & NomFeuille & "$]"

Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Chemin & file & ";" & _
"Extended Properties=""Excel 8.0;HDR=YES;"""

Rst.Open Requete, Conn, adOpenStatic, adLockPessimistic

nb = Rst.RecordCount
If nb = 0 Then
MsgBox "Aucun enregistrement trouvé."
Exit Sub
End If

'Copie le nom des champs dans la première ligne
Do
RG.Offset(, C) = Rst.Fields(C).Name
C = C + 1
x = x + 1
Loop Until x = Rst.Fields.Count

Tblo = Rst.GetRows
Set RG = RG.Offset(1).Resize(nb, Rst.Fields.Count)
For A = 0 To UBound(Tblo, 1)
For B = 0 To UBound(Tblo, 2)
RG.Offset(B, A).Value = Tblo(A, B)
Next
Next
Rst.Close: Conn.Close
Set Rst = Nothing: Set Conn = Nothing : Set Rg = Nothing
End Sub
'---------------------------------------


Salutations!






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

Voila je modifie via ADO un fichier excel, la requete fonctionne et je
recupére les collections field
ensuite j'affecte une variable aux collections fields de cette facon
externe.Fields("commentaires").Value = commentaire
dans le but de modifier les valeurs

La modification se passe bien sauf que dans certains cas j'ai des
commentaires supérieur a 255 caractéres et il ne le prend pas
j'ai essaye de modifier le type de variable et d'augmenter la taille
possible j'ai utilise le code suivant

Set externe = New ADODB.Recordset
Set externe = New Recordset
externe.Fields.Append "Montant DI", adLongVarChar, 5000

mais les valeurs ne changent pas
Quelqu'un aurait il une idee ?





Avatar
pcvsfr
Quelques indications supplementaires

En fait je met des valeurs a jour par la methode value de l'objet fields
j'utilise cette methodue car je ne connais pas la cellule de destination de
la modification

et je pense que ca doit etre la methode valu qui n'aime pas plus de 255
caractéres

Apres verif ton code recopie bien plus de 255 caractères dsl pour cette
mauvaise info




merci michdenis de ton aide
mais mon problème n'est pas d'exporter des cellules vers EXCEL, j'essaie de
m'expliquer plus clairement

j'ai un fichier que j'envoie a x personnes, c'est personnes doivent mettre à
jour les informations, ensuite c'est informations sont envoyés sur un autre
fichier excel via ADO.
Mon problème est que j'ai une case commentaires et quelle peut contenir plus
de 255 caractères
or ADO n'en prend que 255

Je cherche donc a pouvoir modifier le type de caratere ou la logueur de la
chaine
D'autres part j'ai repris ton code et il n'exporte pas non plus des chaines
superieures à 255 caractère

Merci de ton aide










Bonjour Pcvsfr,


Ceci permet de recopier un recordset vers une plage
de cellules de ton choix. Permet jusqu'à 32767 caractères
par cellules.

La difficulté, ce n'est pas le recordset avec ADO mais la
recopie vers la feuille de calcul.

'---------------------------------------
Sub ImporterAccessVersExcel()

Dim Tblo As Variant
Dim C As Integer, Requete As String
Dim Conn As New ADODB.Connection
Dim Rst As New ADODB.Recordset
Dim RG As Range, Requete As String
Dim Chemin As String, NomFeuille As String

'Feuille et plage recevant les données du recordset
With Worksheets("Feuil3")
Set RG = Range("A1")
End With

Chemin = "c:"
file = "Ado.xls"
NomFeuille = "Feuil1" 'La feuille source des données
Requete = "SELECT * From [" & NomFeuille & "$]"

Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Chemin & file & ";" & _
"Extended Properties=""Excel 8.0;HDR=YES;"""

Rst.Open Requete, Conn, adOpenStatic, adLockPessimistic

nb = Rst.RecordCount
If nb = 0 Then
MsgBox "Aucun enregistrement trouvé."
Exit Sub
End If

'Copie le nom des champs dans la première ligne
Do
RG.Offset(, C) = Rst.Fields(C).Name
C = C + 1
x = x + 1
Loop Until x = Rst.Fields.Count

Tblo = Rst.GetRows
Set RG = RG.Offset(1).Resize(nb, Rst.Fields.Count)
For A = 0 To UBound(Tblo, 1)
For B = 0 To UBound(Tblo, 2)
RG.Offset(B, A).Value = Tblo(A, B)
Next
Next
Rst.Close: Conn.Close
Set Rst = Nothing: Set Conn = Nothing : Set Rg = Nothing
End Sub
'---------------------------------------


Salutations!






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

Voila je modifie via ADO un fichier excel, la requete fonctionne et je
recupére les collections field
ensuite j'affecte une variable aux collections fields de cette facon
externe.Fields("commentaires").Value = commentaire
dans le but de modifier les valeurs

La modification se passe bien sauf que dans certains cas j'ai des
commentaires supérieur a 255 caractéres et il ne le prend pas
j'ai essaye de modifier le type de variable et d'augmenter la taille
possible j'ai utilise le code suivant

Set externe = New ADODB.Recordset
Set externe = New Recordset
externe.Fields.Append "Montant DI", adLongVarChar, 5000

mais les valeurs ne changent pas
Quelqu'un aurait il une idee ?







Avatar
michdenis
Un fichier exemple qui exporte des données de la feuil1
vers la feuil3 et utilisant ADO

http://cjoint.com/?cvsf5b6NcY


Salutations!



"pcvsfr" a écrit dans le message de news:
Quelques indications supplementaires

En fait je met des valeurs a jour par la methode value de l'objet fields
j'utilise cette methodue car je ne connais pas la cellule de destination de
la modification

et je pense que ca doit etre la methode valu qui n'aime pas plus de 255
caractéres

Apres verif ton code recopie bien plus de 255 caractères dsl pour cette
mauvaise info




merci michdenis de ton aide
mais mon problème n'est pas d'exporter des cellules vers EXCEL, j'essaie de
m'expliquer plus clairement

j'ai un fichier que j'envoie a x personnes, c'est personnes doivent mettre à
jour les informations, ensuite c'est informations sont envoyés sur un autre
fichier excel via ADO.
Mon problème est que j'ai une case commentaires et quelle peut contenir plus
de 255 caractères
or ADO n'en prend que 255

Je cherche donc a pouvoir modifier le type de caratere ou la logueur de la
chaine
D'autres part j'ai repris ton code et il n'exporte pas non plus des chaines
superieures à 255 caractère

Merci de ton aide










Bonjour Pcvsfr,


Ceci permet de recopier un recordset vers une plage
de cellules de ton choix. Permet jusqu'à 32767 caractères
par cellules.

La difficulté, ce n'est pas le recordset avec ADO mais la
recopie vers la feuille de calcul.

'---------------------------------------
Sub ImporterAccessVersExcel()

Dim Tblo As Variant
Dim C As Integer, Requete As String
Dim Conn As New ADODB.Connection
Dim Rst As New ADODB.Recordset
Dim RG As Range, Requete As String
Dim Chemin As String, NomFeuille As String

'Feuille et plage recevant les données du recordset
With Worksheets("Feuil3")
Set RG = Range("A1")
End With

Chemin = "c:"
file = "Ado.xls"
NomFeuille = "Feuil1" 'La feuille source des données
Requete = "SELECT * From [" & NomFeuille & "$]"

Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Chemin & file & ";" & _
"Extended Properties=""Excel 8.0;HDR=YES;"""

Rst.Open Requete, Conn, adOpenStatic, adLockPessimistic

nb = Rst.RecordCount
If nb = 0 Then
MsgBox "Aucun enregistrement trouvé."
Exit Sub
End If

'Copie le nom des champs dans la première ligne
Do
RG.Offset(, C) = Rst.Fields(C).Name
C = C + 1
x = x + 1
Loop Until x = Rst.Fields.Count

Tblo = Rst.GetRows
Set RG = RG.Offset(1).Resize(nb, Rst.Fields.Count)
For A = 0 To UBound(Tblo, 1)
For B = 0 To UBound(Tblo, 2)
RG.Offset(B, A).Value = Tblo(A, B)
Next
Next
Rst.Close: Conn.Close
Set Rst = Nothing: Set Conn = Nothing : Set Rg = Nothing
End Sub
'---------------------------------------


Salutations!






"pcvsfr" a écrit dans le message de news:

Bonjour,

Voila je modifie via ADO un fichier excel, la requete fonctionne et je
recupére les collections field
ensuite j'affecte une variable aux collections fields de cette facon
externe.Fields("commentaires").Value = commentaire
dans le but de modifier les valeurs

La modification se passe bien sauf que dans certains cas j'ai des
commentaires supérieur a 255 caractéres et il ne le prend pas
j'ai essaye de modifier le type de variable et d'augmenter la taille
possible j'ai utilise le code suivant

Set externe = New ADODB.Recordset
Set externe = New Recordset
externe.Fields.Append "Montant DI", adLongVarChar, 5000

mais les valeurs ne changent pas
Quelqu'un aurait il une idee ?