OVH Cloud OVH Cloud

Ajouter sans supprimer dans Excel

2 réponses
Avatar
Florent
Bonjour,

Cette fois j'ai chang=E9 de m=E9thode, je filtre mes candidats=20
par le num=E9ro dans ma requ=EAte. Et de cette requ=EAte je=20
reprend les donn=E9es pour les copier dans un fichiers=20
Excel. Je traite donc candidat par candidat. Le probl=E8me,=20
et qu'il ne m'ins=E8re pas les donn=E9es mais supprimer la=20
premi=E8re. Or je voudrais qu'il m'ajoute les donn=E9es en =E0=20
partir de A2 sans effacer les donn=E9es qui s'y trouve mais=20
en les d=E9calant =E0 la ligne suivante.

Voici mon code :

Private Sub Exporter_Donn=E9es_Click()

Dim xl As Excel.Application
Dim wbk As Excel.Workbook
Dim db As DAO.Database
Dim rst As DAO.Recordset
Dim qdf As DAO.QueryDef

'V=E9rifier si la requ=EAte existe en for=E7ant sa lecture
On Error Resume Next
Set db =3D CurrentDb
Set qdf =3D db.QueryDefs("REcritureExcel")

If Err.Number <> 0 Then
MsgBox "La requ=EAte n'existe pas.", vbInformation
Else
Set qdf =3D db.QueryDefs("REcritureExcel")
qdf.SQL =3D "SELECT [Candidat].[Etat Civil], [Candidat].
[Nom], [Candidat].[Pr=E9nom], [Candidat].[Adresse],=20
[Candidat].[Code Postal], [Candidat].[Ville], [Candidat].
[Date de Naissance], [Candidat].[Ville de Naissance],=20
[Candidat].[D=E9partement de Naissance], [Candidat].
[nationalit=E9], [Candidature].[Date de signature du=20
contrat], [Candidature].[Date d'entr=E9e en entreprise],=20
[Poste Externe].[Entit=E9], [Poste Externe].[Direction],=20
[Poste Externe].[Site], [Poste Externe].[D=E9partement],=20
[Candidature].[Position], [Candidature].[R=E9mun=E9ration=20
annuelle], [Candidature].[R=E9mun=E9ration mensuelle],=20
[Candidature].[Statut de la Candidature]" & vbCrLf & _
" FROM [Candidat] INNER JOIN ([Poste=20
Externe] INNER JOIN [Candidature] ON [Poste Externe].
[R=E9f=E9rence Poste] =3D [Candidature].[R=E9f=E9rence Poste]) ON=20
[Candidat].[Num=E9ro Candidat] =3D [Candidature].[Num=E9ro=20
Candidat] WHERE [Candidature].[Num=E9ro Candidat]=3D" & Me.
[Candidat_Num=E9ro Candidat] & ";"
End If

DoCmd.RunCommand acCmdRefreshPage

Set qdf =3D Nothing

'Ouvrir la requ=EAte REcritureExcel
Set rst =3D db.OpenRecordset("REcritureExcel")

'D=E9marrer Excel
Set xl =3D New Excel.Application
xl.Visible =3D True

With xl
'Ouvrir un classeur existant
Set wbk =3D .Workbooks.Open("Monfichier.xls")

With wbk.Sheets("Propal")
'Transf=E9rer les enregistrements
.Range("A2").CopyFromRecordset rst
End With
=20
'Fermer le classeur en l'enregistrant
wbk.SaveAs "Monfichier.xls"
wbk.Close
End With

'Quitter et fermer
xl.Quit
Set xl =3D Nothing
rst.Close
Set rst =3D Nothing
Set db =3D Nothing

End Sub

D'avance merci

2 réponses

Avatar
michel
Bonjour Florent
Ici tu ecris toujours en A2
With xl
'Ouvrir un classeur existant
Set wbk = .Workbooks.Open("Monfichier.xls")

With wbk.Sheets("Propal")
'Transférer les enregistrements
.Range("A2").CopyFromRecordset rst
End With
essaie ceci
With xl
'Ouvrir un classeur existant
Set wbk = .Workbooks.Open("Monfichier.xls")

With wbk.Sheets("Propal")
'trouve derniere ligne
fin=.Cells.SpecialCells(xlLastCell).row+1
'Transférer les enregistrements
.Range("A"&fin).CopyFromRecordset rst
End With
HTH
Michel

"Florent" a écrit dans le message de
news: 822c01c3b4f7$68cc7f20$
Bonjour,

Cette fois j'ai changé de méthode, je filtre mes candidats
par le numéro dans ma requête. Et de cette requête je
reprend les données pour les copier dans un fichiers
Excel. Je traite donc candidat par candidat. Le problème,
et qu'il ne m'insère pas les données mais supprimer la
première. Or je voudrais qu'il m'ajoute les données en à
partir de A2 sans effacer les données qui s'y trouve mais
en les décalant à la ligne suivante.

Voici mon code :

Private Sub Exporter_Données_Click()

Dim xl As Excel.Application
Dim wbk As Excel.Workbook
Dim db As DAO.Database
Dim rst As DAO.Recordset
Dim qdf As DAO.QueryDef

'Vérifier si la requête existe en forçant sa lecture
On Error Resume Next
Set db = CurrentDb
Set qdf = db.QueryDefs("REcritureExcel")

If Err.Number <> 0 Then
MsgBox "La requête n'existe pas.", vbInformation
Else
Set qdf = db.QueryDefs("REcritureExcel")
qdf.SQL = "SELECT [Candidat].[Etat Civil], [Candidat].
[Nom], [Candidat].[Prénom], [Candidat].[Adresse],
[Candidat].[Code Postal], [Candidat].[Ville], [Candidat].
[Date de Naissance], [Candidat].[Ville de Naissance],
[Candidat].[Département de Naissance], [Candidat].
[nationalité], [Candidature].[Date de signature du
contrat], [Candidature].[Date d'entrée en entreprise],
[Poste Externe].[Entité], [Poste Externe].[Direction],
[Poste Externe].[Site], [Poste Externe].[Département],
[Candidature].[Position], [Candidature].[Rémunération
annuelle], [Candidature].[Rémunération mensuelle],
[Candidature].[Statut de la Candidature]" & vbCrLf & _
" FROM [Candidat] INNER JOIN ([Poste
Externe] INNER JOIN [Candidature] ON [Poste Externe].
[Référence Poste] = [Candidature].[Référence Poste]) ON
[Candidat].[Numéro Candidat] = [Candidature].[Numéro
Candidat] WHERE [Candidature].[Numéro Candidat]=" & Me.
[Candidat_Numéro Candidat] & ";"
End If

DoCmd.RunCommand acCmdRefreshPage

Set qdf = Nothing

'Ouvrir la requête REcritureExcel
Set rst = db.OpenRecordset("REcritureExcel")

'Démarrer Excel
Set xl = New Excel.Application
xl.Visible = True

With xl
'Ouvrir un classeur existant
Set wbk = .Workbooks.Open("Monfichier.xls")

With wbk.Sheets("Propal")
'Transférer les enregistrements
.Range("A2").CopyFromRecordset rst
End With

'Fermer le classeur en l'enregistrant
wbk.SaveAs "Monfichier.xls"
wbk.Close
End With

'Quitter et fermer
xl.Quit
Set xl = Nothing
rst.Close
Set rst = Nothing
Set db = Nothing

End Sub

D'avance merci
Avatar
Florent
Merci c'est cool ça marche

Sinon si j'ecrivais tout le temps en A2, c'est parce que
je souhaitais qu'il m'insère la ligne en début de feuille.
Avant il décalé automatiquement les enregistrements



-----Message d'origine-----
Bonjour Florent
Ici tu ecris toujours en A2
With xl
'Ouvrir un classeur existant
Set wbk = .Workbooks.Open("Monfichier.xls")

With wbk.Sheets("Propal")
'Transférer les enregistrements
.Range("A2").CopyFromRecordset rst
End With
essaie ceci
With xl
'Ouvrir un classeur existant
Set wbk = .Workbooks.Open("Monfichier.xls")

With wbk.Sheets("Propal")
'trouve derniere ligne
fin=.Cells.SpecialCells(xlLastCell).row+1
'Transférer les enregistrements
.Range("A"&fin).CopyFromRecordset rst
End With
HTH
Michel

"Florent" a écrit
dans le message de

news: 822c01c3b4f7$68cc7f20$
Bonjour,

Cette fois j'ai changé de méthode, je filtre mes candidats
par le numéro dans ma requête. Et de cette requête je
reprend les données pour les copier dans un fichiers
Excel. Je traite donc candidat par candidat. Le problème,
et qu'il ne m'insère pas les données mais supprimer la
première. Or je voudrais qu'il m'ajoute les données en à
partir de A2 sans effacer les données qui s'y trouve mais
en les décalant à la ligne suivante.

Voici mon code :

Private Sub Exporter_Données_Click()

Dim xl As Excel.Application
Dim wbk As Excel.Workbook
Dim db As DAO.Database
Dim rst As DAO.Recordset
Dim qdf As DAO.QueryDef

'Vérifier si la requête existe en forçant sa lecture
On Error Resume Next
Set db = CurrentDb
Set qdf = db.QueryDefs("REcritureExcel")

If Err.Number <> 0 Then
MsgBox "La requête n'existe pas.", vbInformation
Else
Set qdf = db.QueryDefs("REcritureExcel")
qdf.SQL = "SELECT [Candidat].[Etat Civil], [Candidat].
[Nom], [Candidat].[Prénom], [Candidat].[Adresse],
[Candidat].[Code Postal], [Candidat].[Ville], [Candidat].
[Date de Naissance], [Candidat].[Ville de Naissance],
[Candidat].[Département de Naissance], [Candidat].
[nationalité], [Candidature].[Date de signature du
contrat], [Candidature].[Date d'entrée en entreprise],
[Poste Externe].[Entité], [Poste Externe].[Direction],
[Poste Externe].[Site], [Poste Externe].[Département],
[Candidature].[Position], [Candidature].[Rémunération
annuelle], [Candidature].[Rémunération mensuelle],
[Candidature].[Statut de la Candidature]" & vbCrLf & _
" FROM [Candidat] INNER JOIN ([Poste
Externe] INNER JOIN [Candidature] ON [Poste Externe].
[Référence Poste] = [Candidature].[Référence Poste]) ON
[Candidat].[Numéro Candidat] = [Candidature].[Numéro
Candidat] WHERE [Candidature].[Numéro Candidat]=" & Me.
[Candidat_Numéro Candidat] & ";"
End If

DoCmd.RunCommand acCmdRefreshPage

Set qdf = Nothing

'Ouvrir la requête REcritureExcel
Set rst = db.OpenRecordset("REcritureExcel")

'Démarrer Excel
Set xl = New Excel.Application
xl.Visible = True

With xl
'Ouvrir un classeur existant
Set wbk = .Workbooks.Open("Monfichier.xls")

With wbk.Sheets("Propal")
'Transférer les enregistrements
.Range("A2").CopyFromRecordset rst
End With

'Fermer le classeur en l'enregistrant
wbk.SaveAs "Monfichier.xls"
wbk.Close
End With

'Quitter et fermer
xl.Quit
Set xl = Nothing
rst.Close
Set rst = Nothing
Set db = Nothing

End Sub

D'avance merci


.