Bonjour,
Le but de mon code est de transcrire les données d'un classeur excel vers un autre classeur.
J'ai 2 problèmes:
1. Je ne réussis pas à la première ligne de ma feuille. À mois d'insérer une ligne en haut de ma feuille et d'y mettre des x. Autrement cela ne passe pas.
2. Si une cellule a plus de 8000 caractères alors le programme plante.
Literallement, szconnect se lira ainsi:
Merci,
François
Le but de mon code est de transcrire les données d'un classeur excel vers un autre classeur.
J'ai 2 problèmes:
1. Je ne réussis pas à la première ligne de ma feuille. À mois d'insérer une ligne en haut de ma feuille et d'y mettre des x. Autrement cela ne passe pas.
2. Si une cellule a plus de 8000 caractères alors le programme plante.
Code:
Public Sub ConsoDatas(NomFichier$, NomFichierDest$, FeuilleSource$, FeuilleCible$)
Dim rsData As ADODB.Recordset
Dim szConnect As String
Dim szSQL As String
Dim Li&, FeuilleDest
'Version de Excel
'"12"= Excel 2007
'"11"= Excel 2003
StrVersion = Application.Version
szConnect = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & NomFichier & ";" & _
"Extended Properties=""Excel 12.0;HDR=YES;IMEX=1"""
' La requête est basée sur le nom de la feuille. Ce nom
' doit se terminer par un $ et doit être entouré de crochets droits.
szSQL = "SELECT * FROM [" & FeuilleSource & "$];"
Set rsData = New ADODB.Recordset
rsData.Open szSQL, szConnect, adOpenForwardOnly, _
adLockReadOnly, adCmdText
'où envoyer les données :
Workbooks("consol.xlsx").Activate
Sheets(FeuilleCible).Select
myrow = ActiveSheet.UsedRange.Rows.Count
Set FeuilleDest = ActiveWorkbook.Sheets(FeuilleCible)
'Quelle est la dernière ligne de la feuille?
Derniereligne = Rows.Count
Li = FeuilleDest.Range("A" & Derniereligne).End(xlUp).Row
'If Li = 2 Then Li = 1 'Je souhaite que la copie se fasse à partir de la première ligne.
'envoi sur la première ligne vide
If Not rsData.EOF Then
FeuilleDest.Range("A" & Li).CopyFromRecordset rsData
Else
'si la source était vide...
MsgBox "Aucun enregistrement renvoyé.", vbCritical
End If
''' On nettoie pour finir...
rsData.Close
Set rsData = Nothing
End Sub
Literallement, szconnect se lira ainsi:
Code:
"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\temp\a.xlsx;Extended Properties="Excel 12.0;HDR=YES;IMEX=1""
szSQL se lira: "SELECT * FROM [Feuil2$];"
FeuilleDest.Range(A1).CopyFromRecordset rsData
Merci,
François
Dernière édition: