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

tri et comptage source de données

4 réponses
Avatar
guimou2001
bonjour =E0 tous

il y a quelques temps, avec votre aide, j'ai cr=E9=E9e cette macro qui va
chercher un fichier de donn=E9es, fait la fusion en triant sur 2
crit=E8res, imprime et referme le doc. Mon souci, c'est quand la source
de donn=E9es ne comporte qu'un enregistrement, la macro s'arr=EAte car
SQL ne sait pas trier un seul enregistrement. Mon id=E9e est de demander
un comptage avant le tri : si =3D1 pas de tri, si>1 alors tri.
Si qqun a des id=E9es, elles sont les bienvenues.

Cordialement

Guillaume


Private Sub Document_Open()
Dim doc As String

ActivePrinter =3D "Lexmark C750 Recto Verso on impa14327"
With ActiveDocument.PageSetup
.FirstPageTray =3D wdPrinterUpperBin
.OtherPagesTray =3D wdPrinterUpperBin
End With
With ActiveDocument.MailMerge
.OpenDataSource Name:=3D"\\*******\\9ap01cl1.001", SQLStatement:=3D"SELECT
* FROM `9ap01cl1.001`" & "ORDER BY idscr, idpos"
.Destination =3D wdSendToPrinter
.Execute
End With
Windows(1).Activate
ActiveDocument.Save
ActiveWindow.Close
ActiveWindow.Close
End Sub

4 réponses

Avatar
Anacoluthe
Bonjour !

'' nous a écrit ...
il y a quelques temps, avec votre aide, j'ai créée cette macro qui va
chercher un fichier de données, fait la fusion en triant sur 2
critères, imprime et referme le doc. Mon souci, c'est quand la source
de données ne comporte qu'un enregistrement, la macro s'arrête car
SQL ne sait pas trier un seul enregistrement. Mon idée est de demander
un comptage avant le tri : si =1 pas de tri, si>1 alors tri.
Si qqun a des idées, elles sont les bienvenues.


- Ouvrez votre source sans le tri
- testez si .DataSource.RecordCount est supérieur à 1
- Si oui changez la requête .DataSource.QueryString avec le tri

en reprenant votre code ça donnerait qqch comme :
With ActiveDocument.MailMerge
.OpenDataSource Name:="*******9ap01cl1.001", SQLStatement:="SELECT
* FROM `9ap01cl1.001`"
If .DataSource.RecordCount > 1 Then
.Datasource.QueryString = .DataSource.QueryString & " ORDER BY
idscr, idpos"
End If
.Destination = wdSendToPrinter
.Execute

ça colle ?

Anacoluthe
« Le temps est comme un fleuve, il ne remonte pas à sa source. »
- RIVAROL

Avatar
guimou2001

Bonjour !

'' nous a écrit ...
il y a quelques temps, avec votre aide, j'ai créée cette macro qui va
chercher un fichier de données, fait la fusion en triant sur 2
critères, imprime et referme le doc. Mon souci, c'est quand la source
de données ne comporte qu'un enregistrement, la macro s'arrête car
SQL ne sait pas trier un seul enregistrement. Mon idée est de demander
un comptage avant le tri : si =1 pas de tri, si>1 alors tri.
Si qqun a des idées, elles sont les bienvenues.


- Ouvrez votre source sans le tri
- testez si .DataSource.RecordCount est supérieur à 1
- Si oui changez la requête .DataSource.QueryString avec le tri

en reprenant votre code ça donnerait qqch comme :
With ActiveDocument.MailMerge
.OpenDataSource Name:="*******9ap01cl1.001", SQLStatement:="SELECT
* FROM `9ap01cl1.001`"
If .DataSource.RecordCount > 1 Then
.Datasource.QueryString = .DataSource.QueryString & " ORDER BY
idscr, idpos"
End If
.Destination = wdSendToPrinter
.Execute

ça colle ?

Anacoluthe
« Le temps est comme un fleuve, il ne remonte pas à sa source. »
- RIVAROL



merci de ton aide .
çà aurait pu coller ...mais non
la macro fonctionne si je n 'ai qu'un enregistrement mais çà ne trie
plus si j'en ai plusieurs...

Private Sub Document_Open()
Dim doc As String

ActivePrinter = "Lexmark C750 Recto Verso on impa14327"
With ActiveDocument.PageSetup
.FirstPageTray = wdPrinterUpperBin
.OtherPagesTray = wdPrinterUpperBin
End With
With ActiveDocument.MailMerge
.OpenDataSource Name:="*****9ap03cl2.001"
If .DataSource.RecordCount > 1 Then
.DataSource.QueryString = .DataSource.QueryString & " ORDER BY
idscr, idpos"
End If
.Destination = wdSendToPrinter
.Execute
End With
Windows(1).Activate
ActiveDocument.Save
ActiveWindow.Close
ActiveWindow.Close
End Sub

c'est dommage, j'y ai cru de toutes mes forces pourtant :)


Avatar
Anacoluthe
Bonjour !

'' nous a écrit ...
la macro fonctionne si je n 'ai qu'un enregistrement mais çà ne trie
plus si j'en ai plusieurs...


Vérifiez votre mode d'accès aux données : pour certains (DDE) le tri
n'est pas appliqué depuis Word correctement, le plus souvent
pour des raisons de guillemets aux noms de champs.

Utilisez ODBC et modifiez l'écriture de la requête en remplaçant
& " ORDER BY idscr" par
& " ORDER BY " & """" & "idscr" & """"

c'est fastidieux ces requêtes à guillemets mais ça devrait marcher!

Anacoluthe
« Le temps est comme un fleuve, il ne remonte pas à sa source. »
- RIVAROL

Avatar
guimou2001
salut

j'ai appliqué vos recommandations :
je ne sais pas si il y a une autre méthode mais pour utilisez ODBC,
j'ai coché ds options/général "confirmation des conversions lors de
l'ouverture" mais çà n'a rien changé...Je n'ai pas de boite de
dialogue qui s'ouvre à l'ouverture du document (ce qui apparemment
devrait être le cas selon l'aide de Word) et les tris ne se font
toujours pas ...

cordialement