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

plantage sur printout

8 réponses
Avatar
zappy
Bonjour à tous,

Je rencontre le problème suivant :
Lors d'une boucle for each, j'insère des données dans une feuille ("imp"),
lance une impression de ladite feuille, efface ces données, puis on passe au
suivant de la boucle. En éxécution normale, la macro plante sur PrintOut,
tandis qu'en mode pas à pas (F8), cela fonctionne (en éxécution normale, si
je remplace PrintOut par un msgbox, cela fonctionne aussi).

Avez-vous une idée du pb ? ci-dessous le bout de code...

merci d'avance et bonne journée,
Zappy.


sub tata()
'déclarations et instructions précédentes...

Workbooks.Open Filename:="C:\listeMagasinstoto\liste_magasins.xls"
Application.Wait Now + TimeValue("0:00:05")

nummag = 5
For DEP = 0 To 99
If tabldepartement(DEP, 0) <> "" Then
For Each mag In
Workbooks("liste_magasins.xls").Sheets(1).Range("d3:d311")
If Left(mag, 2) = Left(tabldepartement(DEP, 0), 2) Then
Workbooks("liste_magasins.xls").Sheets("Imp").Range("a" &
nummag) = mag.Offset(0, -2)
Workbooks("liste_magasins.xls").Sheets("Imp").Range("b" &
nummag) = mag.Offset(0, -1)
Workbooks("liste_magasins.xls").Sheets("Imp").Range("c" &
nummag) = mag
Workbooks("liste_magasins.xls").Sheets("Imp").Range("d" &
nummag) = mag.Offset(0, 1)
Workbooks("liste_magasins.xls").Sheets("Imp").Range("e" &
nummag) = mag.Offset(0, 2)
nummag = nummag + 1
End If
Next mag

Workbooks("liste_magasins.xls").Sheets("Imp").Range("a5:e" &
nummag - 1).Borders.LineStyle = xlContinuous
Columns("A:A").ColumnWidth = 60
Columns("B:B").ColumnWidth = 42.71
Columns("C:C").ColumnWidth = 8.57
Columns("D:D").ColumnWidth = 13.57
Workbooks("liste_magasins.xls").Sheets("Imp").Range("a" & nummag +
1) = "Vous pouvez aussi les retrouver sur le site www.toto.fr"
Application.Wait Now + TimeValue("0:00:03")
Workbooks("liste_magasins.xls").Sheets("Imp").PrintOut Copies:=1
Application.Wait Now + TimeValue("0:00:03")
MsgBox DEP
Workbooks("liste_magasins.xls").Sheets("Imp").Range("a5:e" & nummag
+ 1).Delete
Application.Wait Now + TimeValue("0:00:03")

nummag = 5
End If
Next DEP
Application.StatusBar = "Terminé. inscrire le nombre de colis"
End Sub

8 réponses

Avatar
michdenis
Essaie ceci :

J'ai juste réécrit ton code... ça me semble visuellement
plus facile à lire ! (pas tester)

'--------------------------------------------------
Sub test()

Dim Wk As Workbook, NumMag As Integer
Dim Rg As Range, Dep As Integer, Mag As Range

Set Wk = Workbooks.Open(Filename:= _
"C:listeMagasinstotoliste_magasins.xls")

'Remplace l'index "1")par le nom de la feuille
Set Rg = Wk.Worksheets(1).Range("d3:d311")

NumMag = 5
For Dep = 0 To 99
If tabldepartement(Dep, 0) <> "" Then
With Wk.Worksheets("Imp")
For Each Mag In Rg
If UCase(Left(Mag, 2)) = _
UCase(Left(tabldepartement(Dep, 0), 2)) Then
.Range("a" & NumMag) = Mag.Offset(0, -2)
.Range("b" & NumMag) = Mag.Offset(0, -1)
.Range("c" & NumMag) = Mag
.Range("d" & NumMag) = Mag.Offset(0, 1)
.Range("e" & NumMag) = Mag.Offset(0, 2)
NumMag = NumMag + 1
End If
Next
.Range("a5:e" & NumMag - 1).Borders.LineStyle = xlContinuous
.Columns("A:A").ColumnWidth = 60
.Columns("B:B").ColumnWidth = 42.71
.Columns("C:C").ColumnWidth = 8.57
.Columns("D:D").ColumnWidth = 13.57
.Range("a" & NumMag + 1) = "Vous pouvez aussi les retrouver " & _
"sur le site www.toto.fr"
.PrintOut Copies:=1
.Range("a5:e" & NumMag + 1).Delete
NumMag = 5
End If
MsgBox Dep
Next Dep
Application.StatusBar = "Terminé. inscrire le nombre de colis"
End Sub
'--------------------------------------------------





"zappy" a écrit dans le message de news:
O07H$
Bonjour à tous,

Je rencontre le problème suivant :
Lors d'une boucle for each, j'insère des données dans une feuille ("imp"),
lance une impression de ladite feuille, efface ces données, puis on passe au
suivant de la boucle. En éxécution normale, la macro plante sur PrintOut,
tandis qu'en mode pas à pas (F8), cela fonctionne (en éxécution normale, si
je remplace PrintOut par un msgbox, cela fonctionne aussi).

Avez-vous une idée du pb ? ci-dessous le bout de code...

merci d'avance et bonne journée,
Zappy.


sub tata()
'déclarations et instructions précédentes...

Workbooks.Open Filename:="C:listeMagasinstotoliste_magasins.xls"
Application.Wait Now + TimeValue("0:00:05")

nummag = 5
For DEP = 0 To 99
If tabldepartement(DEP, 0) <> "" Then
For Each mag In
Workbooks("liste_magasins.xls").Sheets(1).Range("d3:d311")
If Left(mag, 2) = Left(tabldepartement(DEP, 0), 2) Then
Workbooks("liste_magasins.xls").Sheets("Imp").Range("a" &
nummag) = mag.Offset(0, -2)
Workbooks("liste_magasins.xls").Sheets("Imp").Range("b" &
nummag) = mag.Offset(0, -1)
Workbooks("liste_magasins.xls").Sheets("Imp").Range("c" &
nummag) = mag
Workbooks("liste_magasins.xls").Sheets("Imp").Range("d" &
nummag) = mag.Offset(0, 1)
Workbooks("liste_magasins.xls").Sheets("Imp").Range("e" &
nummag) = mag.Offset(0, 2)
nummag = nummag + 1
End If
Next mag

Workbooks("liste_magasins.xls").Sheets("Imp").Range("a5:e" &
nummag - 1).Borders.LineStyle = xlContinuous
Columns("A:A").ColumnWidth = 60
Columns("B:B").ColumnWidth = 42.71
Columns("C:C").ColumnWidth = 8.57
Columns("D:D").ColumnWidth = 13.57
Workbooks("liste_magasins.xls").Sheets("Imp").Range("a" & nummag +
1) = "Vous pouvez aussi les retrouver sur le site www.toto.fr"
Application.Wait Now + TimeValue("0:00:03")
Workbooks("liste_magasins.xls").Sheets("Imp").PrintOut Copies:=1
Application.Wait Now + TimeValue("0:00:03")
MsgBox DEP
Workbooks("liste_magasins.xls").Sheets("Imp").Range("a5:e" & nummag
+ 1).Delete
Application.Wait Now + TimeValue("0:00:03")

nummag = 5
End If
Next DEP
Application.StatusBar = "Terminé. inscrire le nombre de colis"
End Sub
Avatar
zappy
Bonjour et merci,

C'est sympa pour la réécriture (j'omets toujours de déclarer, entre autres)
mais bon rien ne change. Non seulement la macro plante, mais "excel
rencontre un pb ..." (quel que soit le style...)

Je me demande si ça vient pas du choix de l'imprimante, mais alors pourquoi
ça fonctionnerait en mode pas à pas ? je vais regarder cela ...

merci

Zappy

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

Essaie ceci :

J'ai juste réécrit ton code... ça me semble visuellement
plus facile à lire ! (pas tester)

'--------------------------------------------------
Sub test()

Dim Wk As Workbook, NumMag As Integer
Dim Rg As Range, Dep As Integer, Mag As Range

Set Wk = Workbooks.Open(Filename:= _
"C:listeMagasinstotoliste_magasins.xls")

'Remplace l'index "1")par le nom de la feuille
Set Rg = Wk.Worksheets(1).Range("d3:d311")

NumMag = 5
For Dep = 0 To 99
If tabldepartement(Dep, 0) <> "" Then
With Wk.Worksheets("Imp")
For Each Mag In Rg
If UCase(Left(Mag, 2)) = _
UCase(Left(tabldepartement(Dep, 0), 2)) Then
.Range("a" & NumMag) = Mag.Offset(0, -2)
.Range("b" & NumMag) = Mag.Offset(0, -1)
.Range("c" & NumMag) = Mag
.Range("d" & NumMag) = Mag.Offset(0, 1)
.Range("e" & NumMag) = Mag.Offset(0, 2)
NumMag = NumMag + 1
End If
Next
.Range("a5:e" & NumMag - 1).Borders.LineStyle = xlContinuous
.Columns("A:A").ColumnWidth = 60
.Columns("B:B").ColumnWidth = 42.71
.Columns("C:C").ColumnWidth = 8.57
.Columns("D:D").ColumnWidth = 13.57
.Range("a" & NumMag + 1) = "Vous pouvez aussi les retrouver " & _
"sur le site www.toto.fr"
.PrintOut Copies:=1
.Range("a5:e" & NumMag + 1).Delete
NumMag = 5
End If
MsgBox Dep
Next Dep
Application.StatusBar = "Terminé. inscrire le nombre de colis"
End Sub
'--------------------------------------------------





"zappy" a écrit dans le message de news:
O07H$
Bonjour à tous,

Je rencontre le problème suivant :
Lors d'une boucle for each, j'insère des données dans une feuille ("imp"),
lance une impression de ladite feuille, efface ces données, puis on passe
au
suivant de la boucle. En éxécution normale, la macro plante sur PrintOut,
tandis qu'en mode pas à pas (F8), cela fonctionne (en éxécution normale,
si
je remplace PrintOut par un msgbox, cela fonctionne aussi).

Avez-vous une idée du pb ? ci-dessous le bout de code...

merci d'avance et bonne journée,
Zappy.


sub tata()
'déclarations et instructions précédentes...

Workbooks.Open Filename:="C:listeMagasinstotoliste_magasins.xls"
Application.Wait Now + TimeValue("0:00:05")

nummag = 5
For DEP = 0 To 99
If tabldepartement(DEP, 0) <> "" Then
For Each mag In
Workbooks("liste_magasins.xls").Sheets(1).Range("d3:d311")
If Left(mag, 2) = Left(tabldepartement(DEP, 0), 2) Then
Workbooks("liste_magasins.xls").Sheets("Imp").Range("a" &
nummag) = mag.Offset(0, -2)
Workbooks("liste_magasins.xls").Sheets("Imp").Range("b" &
nummag) = mag.Offset(0, -1)
Workbooks("liste_magasins.xls").Sheets("Imp").Range("c" &
nummag) = mag
Workbooks("liste_magasins.xls").Sheets("Imp").Range("d" &
nummag) = mag.Offset(0, 1)
Workbooks("liste_magasins.xls").Sheets("Imp").Range("e" &
nummag) = mag.Offset(0, 2)
nummag = nummag + 1
End If
Next mag

Workbooks("liste_magasins.xls").Sheets("Imp").Range("a5:e" &
nummag - 1).Borders.LineStyle = xlContinuous
Columns("A:A").ColumnWidth = 60
Columns("B:B").ColumnWidth = 42.71
Columns("C:C").ColumnWidth = 8.57
Columns("D:D").ColumnWidth = 13.57
Workbooks("liste_magasins.xls").Sheets("Imp").Range("a" & nummag +
1) = "Vous pouvez aussi les retrouver sur le site www.toto.fr"
Application.Wait Now + TimeValue("0:00:03")
Workbooks("liste_magasins.xls").Sheets("Imp").PrintOut Copies:=1
Application.Wait Now + TimeValue("0:00:03")
MsgBox DEP
Workbooks("liste_magasins.xls").Sheets("Imp").Range("a5:e" & nummag
+ 1).Delete
Application.Wait Now + TimeValue("0:00:03")

nummag = 5
End If
Next DEP
Application.StatusBar = "Terminé. inscrire le nombre de colis"
End Sub





Avatar
michdenis
Remplace .PrintOut Copies:=1 par .PrintPreview
est-ce que cela boucle sans problème ?

Sur chaque écran, as-tu les données que tu désires imprimer ?




"zappy" a écrit dans le message de news:
usC1I$
Bonjour et merci,

C'est sympa pour la réécriture (j'omets toujours de déclarer, entre autres)
mais bon rien ne change. Non seulement la macro plante, mais "excel
rencontre un pb ..." (quel que soit le style...)

Je me demande si ça vient pas du choix de l'imprimante, mais alors pourquoi
ça fonctionnerait en mode pas à pas ? je vais regarder cela ...

merci

Zappy

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

Essaie ceci :

J'ai juste réécrit ton code... ça me semble visuellement
plus facile à lire ! (pas tester)

'--------------------------------------------------
Sub test()

Dim Wk As Workbook, NumMag As Integer
Dim Rg As Range, Dep As Integer, Mag As Range

Set Wk = Workbooks.Open(Filename:= _
"C:listeMagasinstotoliste_magasins.xls")

'Remplace l'index "1")par le nom de la feuille
Set Rg = Wk.Worksheets(1).Range("d3:d311")

NumMag = 5
For Dep = 0 To 99
If tabldepartement(Dep, 0) <> "" Then
With Wk.Worksheets("Imp")
For Each Mag In Rg
If UCase(Left(Mag, 2)) = _
UCase(Left(tabldepartement(Dep, 0), 2)) Then
.Range("a" & NumMag) = Mag.Offset(0, -2)
.Range("b" & NumMag) = Mag.Offset(0, -1)
.Range("c" & NumMag) = Mag
.Range("d" & NumMag) = Mag.Offset(0, 1)
.Range("e" & NumMag) = Mag.Offset(0, 2)
NumMag = NumMag + 1
End If
Next
.Range("a5:e" & NumMag - 1).Borders.LineStyle = xlContinuous
.Columns("A:A").ColumnWidth = 60
.Columns("B:B").ColumnWidth = 42.71
.Columns("C:C").ColumnWidth = 8.57
.Columns("D:D").ColumnWidth = 13.57
.Range("a" & NumMag + 1) = "Vous pouvez aussi les retrouver " & _
"sur le site www.toto.fr"
.PrintOut Copies:=1
.Range("a5:e" & NumMag + 1).Delete
NumMag = 5
End If
MsgBox Dep
Next Dep
Application.StatusBar = "Terminé. inscrire le nombre de colis"
End Sub
'--------------------------------------------------





"zappy" a écrit dans le message de news:
O07H$
Bonjour à tous,

Je rencontre le problème suivant :
Lors d'une boucle for each, j'insère des données dans une feuille ("imp"),
lance une impression de ladite feuille, efface ces données, puis on passe
au
suivant de la boucle. En éxécution normale, la macro plante sur PrintOut,
tandis qu'en mode pas à pas (F8), cela fonctionne (en éxécution normale,
si
je remplace PrintOut par un msgbox, cela fonctionne aussi).

Avez-vous une idée du pb ? ci-dessous le bout de code...

merci d'avance et bonne journée,
Zappy.


sub tata()
'déclarations et instructions précédentes...

Workbooks.Open Filename:="C:listeMagasinstotoliste_magasins.xls"
Application.Wait Now + TimeValue("0:00:05")

nummag = 5
For DEP = 0 To 99
If tabldepartement(DEP, 0) <> "" Then
For Each mag In
Workbooks("liste_magasins.xls").Sheets(1).Range("d3:d311")
If Left(mag, 2) = Left(tabldepartement(DEP, 0), 2) Then
Workbooks("liste_magasins.xls").Sheets("Imp").Range("a" &
nummag) = mag.Offset(0, -2)
Workbooks("liste_magasins.xls").Sheets("Imp").Range("b" &
nummag) = mag.Offset(0, -1)
Workbooks("liste_magasins.xls").Sheets("Imp").Range("c" &
nummag) = mag
Workbooks("liste_magasins.xls").Sheets("Imp").Range("d" &
nummag) = mag.Offset(0, 1)
Workbooks("liste_magasins.xls").Sheets("Imp").Range("e" &
nummag) = mag.Offset(0, 2)
nummag = nummag + 1
End If
Next mag

Workbooks("liste_magasins.xls").Sheets("Imp").Range("a5:e" &
nummag - 1).Borders.LineStyle = xlContinuous
Columns("A:A").ColumnWidth = 60
Columns("B:B").ColumnWidth = 42.71
Columns("C:C").ColumnWidth = 8.57
Columns("D:D").ColumnWidth = 13.57
Workbooks("liste_magasins.xls").Sheets("Imp").Range("a" & nummag +
1) = "Vous pouvez aussi les retrouver sur le site www.toto.fr"
Application.Wait Now + TimeValue("0:00:03")
Workbooks("liste_magasins.xls").Sheets("Imp").PrintOut Copies:=1
Application.Wait Now + TimeValue("0:00:03")
MsgBox DEP
Workbooks("liste_magasins.xls").Sheets("Imp").Range("a5:e" & nummag
+ 1).Delete
Application.Wait Now + TimeValue("0:00:03")

nummag = 5
End If
Next DEP
Application.StatusBar = "Terminé. inscrire le nombre de colis"
End Sub





Avatar
zappy
Merci Denis. Bonne idée.
Alors avec .printpreview ça plante aussi, mais fermant le preview, et juste
avant le plantage, une boite de dialogue "ouvrir"(type GetOpenFilename)
s'affiche...., une instruction qui n'est pas dans la boucle, mais bien plus
haut, au début de cette macro ( "Fichierclient =
Application.GetOpenFilename("LE FICHIER CLIENT (*.txt),*.txt")")....bizarre.

zappy


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

Remplace .PrintOut Copies:=1 par .PrintPreview
est-ce que cela boucle sans problème ?

Sur chaque écran, as-tu les données que tu désires imprimer ?




"zappy" a écrit dans le message de news:
usC1I$
Bonjour et merci,

C'est sympa pour la réécriture (j'omets toujours de déclarer, entre
autres)
mais bon rien ne change. Non seulement la macro plante, mais "excel
rencontre un pb ..." (quel que soit le style...)

Je me demande si ça vient pas du choix de l'imprimante, mais alors
pourquoi
ça fonctionnerait en mode pas à pas ? je vais regarder cela ...

merci

Zappy

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

Essaie ceci :

J'ai juste réécrit ton code... ça me semble visuellement
plus facile à lire ! (pas tester)

'--------------------------------------------------
Sub test()

Dim Wk As Workbook, NumMag As Integer
Dim Rg As Range, Dep As Integer, Mag As Range

Set Wk = Workbooks.Open(Filename:= _
"C:listeMagasinstotoliste_magasins.xls")

'Remplace l'index "1")par le nom de la feuille
Set Rg = Wk.Worksheets(1).Range("d3:d311")

NumMag = 5
For Dep = 0 To 99
If tabldepartement(Dep, 0) <> "" Then
With Wk.Worksheets("Imp")
For Each Mag In Rg
If UCase(Left(Mag, 2)) = _
UCase(Left(tabldepartement(Dep, 0), 2)) Then
.Range("a" & NumMag) = Mag.Offset(0, -2)
.Range("b" & NumMag) = Mag.Offset(0, -1)
.Range("c" & NumMag) = Mag
.Range("d" & NumMag) = Mag.Offset(0, 1)
.Range("e" & NumMag) = Mag.Offset(0, 2)
NumMag = NumMag + 1
End If
Next
.Range("a5:e" & NumMag - 1).Borders.LineStyle = xlContinuous
.Columns("A:A").ColumnWidth = 60
.Columns("B:B").ColumnWidth = 42.71
.Columns("C:C").ColumnWidth = 8.57
.Columns("D:D").ColumnWidth = 13.57
.Range("a" & NumMag + 1) = "Vous pouvez aussi les retrouver " & _
"sur le site www.toto.fr"
.PrintOut Copies:=1
.Range("a5:e" & NumMag + 1).Delete
NumMag = 5
End If
MsgBox Dep
Next Dep
Application.StatusBar = "Terminé. inscrire le nombre de colis"
End Sub
'--------------------------------------------------





"zappy" a écrit dans le message de news:
O07H$
Bonjour à tous,

Je rencontre le problème suivant :
Lors d'une boucle for each, j'insère des données dans une feuille
("imp"),
lance une impression de ladite feuille, efface ces données, puis on passe
au
suivant de la boucle. En éxécution normale, la macro plante sur PrintOut,
tandis qu'en mode pas à pas (F8), cela fonctionne (en éxécution normale,
si
je remplace PrintOut par un msgbox, cela fonctionne aussi).

Avez-vous une idée du pb ? ci-dessous le bout de code...

merci d'avance et bonne journée,
Zappy.


sub tata()
'déclarations et instructions précédentes...

Workbooks.Open Filename:="C:listeMagasinstotoliste_magasins.xls"
Application.Wait Now + TimeValue("0:00:05")

nummag = 5
For DEP = 0 To 99
If tabldepartement(DEP, 0) <> "" Then
For Each mag In
Workbooks("liste_magasins.xls").Sheets(1).Range("d3:d311")
If Left(mag, 2) = Left(tabldepartement(DEP, 0), 2) Then
Workbooks("liste_magasins.xls").Sheets("Imp").Range("a" &
nummag) = mag.Offset(0, -2)
Workbooks("liste_magasins.xls").Sheets("Imp").Range("b" &
nummag) = mag.Offset(0, -1)
Workbooks("liste_magasins.xls").Sheets("Imp").Range("c" &
nummag) = mag
Workbooks("liste_magasins.xls").Sheets("Imp").Range("d" &
nummag) = mag.Offset(0, 1)
Workbooks("liste_magasins.xls").Sheets("Imp").Range("e" &
nummag) = mag.Offset(0, 2)
nummag = nummag + 1
End If
Next mag

Workbooks("liste_magasins.xls").Sheets("Imp").Range("a5:e" &
nummag - 1).Borders.LineStyle = xlContinuous
Columns("A:A").ColumnWidth = 60
Columns("B:B").ColumnWidth = 42.71
Columns("C:C").ColumnWidth = 8.57
Columns("D:D").ColumnWidth = 13.57
Workbooks("liste_magasins.xls").Sheets("Imp").Range("a" & nummag +
1) = "Vous pouvez aussi les retrouver sur le site www.toto.fr"
Application.Wait Now + TimeValue("0:00:03")
Workbooks("liste_magasins.xls").Sheets("Imp").PrintOut Copies:=1
Application.Wait Now + TimeValue("0:00:03")
MsgBox DEP
Workbooks("liste_magasins.xls").Sheets("Imp").Range("a5:e" &
nummag
+ 1).Delete
Application.Wait Now + TimeValue("0:00:03")

nummag = 5
End If
Next DEP
Application.StatusBar = "Terminé. inscrire le nombre de colis"
End Sub










Avatar
zappy
j'ai oublié de répondre à la 2e question :

Sur chaque écran, as-tu les données que tu désires imprimer ?



oui.

(je rappelle qu'en execution pas à pas, tout marche à merveille, les
données s'insèrent, les colonnes se règlent à la bonne largeur, la page
s'imprime, les données s'effacent puis on recommence et ça boucle sans pb.)

merci,
zappy.

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

Remplace .PrintOut Copies:=1 par .PrintPreview
est-ce que cela boucle sans problème ?

Sur chaque écran, as-tu les données que tu désires imprimer ?




"zappy" a écrit dans le message de news:
usC1I$
Bonjour et merci,

C'est sympa pour la réécriture (j'omets toujours de déclarer, entre
autres)
mais bon rien ne change. Non seulement la macro plante, mais "excel
rencontre un pb ..." (quel que soit le style...)

Je me demande si ça vient pas du choix de l'imprimante, mais alors
pourquoi
ça fonctionnerait en mode pas à pas ? je vais regarder cela ...

merci

Zappy

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

Essaie ceci :

J'ai juste réécrit ton code... ça me semble visuellement
plus facile à lire ! (pas tester)

'--------------------------------------------------
Sub test()

Dim Wk As Workbook, NumMag As Integer
Dim Rg As Range, Dep As Integer, Mag As Range

Set Wk = Workbooks.Open(Filename:= _
"C:listeMagasinstotoliste_magasins.xls")

'Remplace l'index "1")par le nom de la feuille
Set Rg = Wk.Worksheets(1).Range("d3:d311")

NumMag = 5
For Dep = 0 To 99
If tabldepartement(Dep, 0) <> "" Then
With Wk.Worksheets("Imp")
For Each Mag In Rg
If UCase(Left(Mag, 2)) = _
UCase(Left(tabldepartement(Dep, 0), 2)) Then
.Range("a" & NumMag) = Mag.Offset(0, -2)
.Range("b" & NumMag) = Mag.Offset(0, -1)
.Range("c" & NumMag) = Mag
.Range("d" & NumMag) = Mag.Offset(0, 1)
.Range("e" & NumMag) = Mag.Offset(0, 2)
NumMag = NumMag + 1
End If
Next
.Range("a5:e" & NumMag - 1).Borders.LineStyle = xlContinuous
.Columns("A:A").ColumnWidth = 60
.Columns("B:B").ColumnWidth = 42.71
.Columns("C:C").ColumnWidth = 8.57
.Columns("D:D").ColumnWidth = 13.57
.Range("a" & NumMag + 1) = "Vous pouvez aussi les retrouver " & _
"sur le site www.toto.fr"
.PrintOut Copies:=1
.Range("a5:e" & NumMag + 1).Delete
NumMag = 5
End If
MsgBox Dep
Next Dep
Application.StatusBar = "Terminé. inscrire le nombre de colis"
End Sub
'--------------------------------------------------





"zappy" a écrit dans le message de news:
O07H$
Bonjour à tous,

Je rencontre le problème suivant :
Lors d'une boucle for each, j'insère des données dans une feuille
("imp"),
lance une impression de ladite feuille, efface ces données, puis on passe
au
suivant de la boucle. En éxécution normale, la macro plante sur PrintOut,
tandis qu'en mode pas à pas (F8), cela fonctionne (en éxécution normale,
si
je remplace PrintOut par un msgbox, cela fonctionne aussi).

Avez-vous une idée du pb ? ci-dessous le bout de code...

merci d'avance et bonne journée,
Zappy.


sub tata()
'déclarations et instructions précédentes...

Workbooks.Open Filename:="C:listeMagasinstotoliste_magasins.xls"
Application.Wait Now + TimeValue("0:00:05")

nummag = 5
For DEP = 0 To 99
If tabldepartement(DEP, 0) <> "" Then
For Each mag In
Workbooks("liste_magasins.xls").Sheets(1).Range("d3:d311")
If Left(mag, 2) = Left(tabldepartement(DEP, 0), 2) Then
Workbooks("liste_magasins.xls").Sheets("Imp").Range("a" &
nummag) = mag.Offset(0, -2)
Workbooks("liste_magasins.xls").Sheets("Imp").Range("b" &
nummag) = mag.Offset(0, -1)
Workbooks("liste_magasins.xls").Sheets("Imp").Range("c" &
nummag) = mag
Workbooks("liste_magasins.xls").Sheets("Imp").Range("d" &
nummag) = mag.Offset(0, 1)
Workbooks("liste_magasins.xls").Sheets("Imp").Range("e" &
nummag) = mag.Offset(0, 2)
nummag = nummag + 1
End If
Next mag

Workbooks("liste_magasins.xls").Sheets("Imp").Range("a5:e" &
nummag - 1).Borders.LineStyle = xlContinuous
Columns("A:A").ColumnWidth = 60
Columns("B:B").ColumnWidth = 42.71
Columns("C:C").ColumnWidth = 8.57
Columns("D:D").ColumnWidth = 13.57
Workbooks("liste_magasins.xls").Sheets("Imp").Range("a" & nummag +
1) = "Vous pouvez aussi les retrouver sur le site www.toto.fr"
Application.Wait Now + TimeValue("0:00:03")
Workbooks("liste_magasins.xls").Sheets("Imp").PrintOut Copies:=1
Application.Wait Now + TimeValue("0:00:03")
MsgBox DEP
Workbooks("liste_magasins.xls").Sheets("Imp").Range("a5:e" &
nummag
+ 1).Delete
Application.Wait Now + TimeValue("0:00:03")

nummag = 5
End If
Next DEP
Application.StatusBar = "Terminé. inscrire le nombre de colis"
End Sub










Avatar
michdenis
| une instruction qui n'est pas dans la boucle, mais bien plus
| haut, au début de cette macro ( "Fichierclient | Application.GetOpenFilename("LE FICHIER CLIENT
(*.txt),*.txt")")....bizarre.

Le plus bizarre, dans le code que je t'ai soumis, il n'est nullement
question
de cette ligne de code... Serait-ce que tu as une autre procédure que
celle soumise dans ce fil ?

Dans la ligne de commande suivante, as-tu pris le temps de remplacer
le "1" (index de worksheets) par le véritable nom (onglet) de la feuille ?
Set Rg = Wk.Worksheets(1).Range("d3:d311")

Es-tu certain que tu as des données à imprimer sur ladite feuille.
excel n'imprime pas les feuilles vierges !
Avatar
michdenis
Une dernère suggestion :

Insère la ligne de commande suivante "DoEvents" avant ".PrintOut..."

DoEvents
.PrintOut Copies:=1





"zappy" a écrit dans le message de news:
up$
j'ai oublié de répondre à la 2e question :

Sur chaque écran, as-tu les données que tu désires imprimer ?



oui.

(je rappelle qu'en execution pas à pas, tout marche à merveille, les
données s'insèrent, les colonnes se règlent à la bonne largeur, la page
s'imprime, les données s'effacent puis on recommence et ça boucle sans pb.)

merci,
zappy.

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

Remplace .PrintOut Copies:=1 par .PrintPreview
est-ce que cela boucle sans problème ?

Sur chaque écran, as-tu les données que tu désires imprimer ?




"zappy" a écrit dans le message de news:
usC1I$
Bonjour et merci,

C'est sympa pour la réécriture (j'omets toujours de déclarer, entre
autres)
mais bon rien ne change. Non seulement la macro plante, mais "excel
rencontre un pb ..." (quel que soit le style...)

Je me demande si ça vient pas du choix de l'imprimante, mais alors
pourquoi
ça fonctionnerait en mode pas à pas ? je vais regarder cela ...

merci

Zappy

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

Essaie ceci :

J'ai juste réécrit ton code... ça me semble visuellement
plus facile à lire ! (pas tester)

'--------------------------------------------------
Sub test()

Dim Wk As Workbook, NumMag As Integer
Dim Rg As Range, Dep As Integer, Mag As Range

Set Wk = Workbooks.Open(Filename:= _
"C:listeMagasinstotoliste_magasins.xls")

'Remplace l'index "1")par le nom de la feuille
Set Rg = Wk.Worksheets(1).Range("d3:d311")

NumMag = 5
For Dep = 0 To 99
If tabldepartement(Dep, 0) <> "" Then
With Wk.Worksheets("Imp")
For Each Mag In Rg
If UCase(Left(Mag, 2)) = _
UCase(Left(tabldepartement(Dep, 0), 2)) Then
.Range("a" & NumMag) = Mag.Offset(0, -2)
.Range("b" & NumMag) = Mag.Offset(0, -1)
.Range("c" & NumMag) = Mag
.Range("d" & NumMag) = Mag.Offset(0, 1)
.Range("e" & NumMag) = Mag.Offset(0, 2)
NumMag = NumMag + 1
End If
Next
.Range("a5:e" & NumMag - 1).Borders.LineStyle = xlContinuous
.Columns("A:A").ColumnWidth = 60
.Columns("B:B").ColumnWidth = 42.71
.Columns("C:C").ColumnWidth = 8.57
.Columns("D:D").ColumnWidth = 13.57
.Range("a" & NumMag + 1) = "Vous pouvez aussi les retrouver " & _
"sur le site www.toto.fr"
.PrintOut Copies:=1
.Range("a5:e" & NumMag + 1).Delete
NumMag = 5
End If
MsgBox Dep
Next Dep
Application.StatusBar = "Terminé. inscrire le nombre de colis"
End Sub
'--------------------------------------------------





"zappy" a écrit dans le message de news:
O07H$
Bonjour à tous,

Je rencontre le problème suivant :
Lors d'une boucle for each, j'insère des données dans une feuille
("imp"),
lance une impression de ladite feuille, efface ces données, puis on passe
au
suivant de la boucle. En éxécution normale, la macro plante sur PrintOut,
tandis qu'en mode pas à pas (F8), cela fonctionne (en éxécution normale,
si
je remplace PrintOut par un msgbox, cela fonctionne aussi).

Avez-vous une idée du pb ? ci-dessous le bout de code...

merci d'avance et bonne journée,
Zappy.


sub tata()
'déclarations et instructions précédentes...

Workbooks.Open Filename:="C:listeMagasinstotoliste_magasins.xls"
Application.Wait Now + TimeValue("0:00:05")

nummag = 5
For DEP = 0 To 99
If tabldepartement(DEP, 0) <> "" Then
For Each mag In
Workbooks("liste_magasins.xls").Sheets(1).Range("d3:d311")
If Left(mag, 2) = Left(tabldepartement(DEP, 0), 2) Then
Workbooks("liste_magasins.xls").Sheets("Imp").Range("a" &
nummag) = mag.Offset(0, -2)
Workbooks("liste_magasins.xls").Sheets("Imp").Range("b" &
nummag) = mag.Offset(0, -1)
Workbooks("liste_magasins.xls").Sheets("Imp").Range("c" &
nummag) = mag
Workbooks("liste_magasins.xls").Sheets("Imp").Range("d" &
nummag) = mag.Offset(0, 1)
Workbooks("liste_magasins.xls").Sheets("Imp").Range("e" &
nummag) = mag.Offset(0, 2)
nummag = nummag + 1
End If
Next mag

Workbooks("liste_magasins.xls").Sheets("Imp").Range("a5:e" &
nummag - 1).Borders.LineStyle = xlContinuous
Columns("A:A").ColumnWidth = 60
Columns("B:B").ColumnWidth = 42.71
Columns("C:C").ColumnWidth = 8.57
Columns("D:D").ColumnWidth = 13.57
Workbooks("liste_magasins.xls").Sheets("Imp").Range("a" & nummag +
1) = "Vous pouvez aussi les retrouver sur le site www.toto.fr"
Application.Wait Now + TimeValue("0:00:03")
Workbooks("liste_magasins.xls").Sheets("Imp").PrintOut Copies:=1
Application.Wait Now + TimeValue("0:00:03")
MsgBox DEP
Workbooks("liste_magasins.xls").Sheets("Imp").Range("a5:e" &
nummag
+ 1).Delete
Application.Wait Now + TimeValue("0:00:03")

nummag = 5
End If
Next DEP
Application.StatusBar = "Terminé. inscrire le nombre de colis"
End Sub










Avatar
zappy
Merciiii beaucoup. 9a marche avec doevents.
Il va falloir que je penche sur doevents...

merci, Zappy.
"michdenis" a écrit dans le message de news:

Une dernère suggestion :

Insère la ligne de commande suivante "DoEvents" avant ".PrintOut..."

DoEvents
.PrintOut Copies:=1





"zappy" a écrit dans le message de news:
up$
j'ai oublié de répondre à la 2e question :

Sur chaque écran, as-tu les données que tu désires imprimer ?



oui.

(je rappelle qu'en execution pas à pas, tout marche à merveille, les
données s'insèrent, les colonnes se règlent à la bonne largeur, la page
s'imprime, les données s'effacent puis on recommence et ça boucle sans
pb.)

merci,
zappy.

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

Remplace .PrintOut Copies:=1 par .PrintPreview
est-ce que cela boucle sans problème ?

Sur chaque écran, as-tu les données que tu désires imprimer ?




"zappy" a écrit dans le message de news:
usC1I$
Bonjour et merci,

C'est sympa pour la réécriture (j'omets toujours de déclarer, entre
autres)
mais bon rien ne change. Non seulement la macro plante, mais "excel
rencontre un pb ..." (quel que soit le style...)

Je me demande si ça vient pas du choix de l'imprimante, mais alors
pourquoi
ça fonctionnerait en mode pas à pas ? je vais regarder cela ...

merci

Zappy

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

Essaie ceci :

J'ai juste réécrit ton code... ça me semble visuellement
plus facile à lire ! (pas tester)

'--------------------------------------------------
Sub test()

Dim Wk As Workbook, NumMag As Integer
Dim Rg As Range, Dep As Integer, Mag As Range

Set Wk = Workbooks.Open(Filename:= _
"C:listeMagasinstotoliste_magasins.xls")

'Remplace l'index "1")par le nom de la feuille
Set Rg = Wk.Worksheets(1).Range("d3:d311")

NumMag = 5
For Dep = 0 To 99
If tabldepartement(Dep, 0) <> "" Then
With Wk.Worksheets("Imp")
For Each Mag In Rg
If UCase(Left(Mag, 2)) = _
UCase(Left(tabldepartement(Dep, 0), 2)) Then
.Range("a" & NumMag) = Mag.Offset(0, -2)
.Range("b" & NumMag) = Mag.Offset(0, -1)
.Range("c" & NumMag) = Mag
.Range("d" & NumMag) = Mag.Offset(0, 1)
.Range("e" & NumMag) = Mag.Offset(0, 2)
NumMag = NumMag + 1
End If
Next
.Range("a5:e" & NumMag - 1).Borders.LineStyle = xlContinuous
.Columns("A:A").ColumnWidth = 60
.Columns("B:B").ColumnWidth = 42.71
.Columns("C:C").ColumnWidth = 8.57
.Columns("D:D").ColumnWidth = 13.57
.Range("a" & NumMag + 1) = "Vous pouvez aussi les retrouver " & _
"sur le site www.toto.fr"
.PrintOut Copies:=1
.Range("a5:e" & NumMag + 1).Delete
NumMag = 5
End If
MsgBox Dep
Next Dep
Application.StatusBar = "Terminé. inscrire le nombre de colis"
End Sub
'--------------------------------------------------





"zappy" a écrit dans le message de news:
O07H$
Bonjour à tous,

Je rencontre le problème suivant :
Lors d'une boucle for each, j'insère des données dans une feuille
("imp"),
lance une impression de ladite feuille, efface ces données, puis on
passe
au
suivant de la boucle. En éxécution normale, la macro plante sur
PrintOut,
tandis qu'en mode pas à pas (F8), cela fonctionne (en éxécution normale,
si
je remplace PrintOut par un msgbox, cela fonctionne aussi).

Avez-vous une idée du pb ? ci-dessous le bout de code...

merci d'avance et bonne journée,
Zappy.


sub tata()
'déclarations et instructions précédentes...

Workbooks.Open Filename:="C:listeMagasinstotoliste_magasins.xls"
Application.Wait Now + TimeValue("0:00:05")

nummag = 5
For DEP = 0 To 99
If tabldepartement(DEP, 0) <> "" Then
For Each mag In
Workbooks("liste_magasins.xls").Sheets(1).Range("d3:d311")
If Left(mag, 2) = Left(tabldepartement(DEP, 0), 2) Then
Workbooks("liste_magasins.xls").Sheets("Imp").Range("a" &
nummag) = mag.Offset(0, -2)
Workbooks("liste_magasins.xls").Sheets("Imp").Range("b" &
nummag) = mag.Offset(0, -1)
Workbooks("liste_magasins.xls").Sheets("Imp").Range("c" &
nummag) = mag
Workbooks("liste_magasins.xls").Sheets("Imp").Range("d" &
nummag) = mag.Offset(0, 1)
Workbooks("liste_magasins.xls").Sheets("Imp").Range("e" &
nummag) = mag.Offset(0, 2)
nummag = nummag + 1
End If
Next mag

Workbooks("liste_magasins.xls").Sheets("Imp").Range("a5:e" &
nummag - 1).Borders.LineStyle = xlContinuous
Columns("A:A").ColumnWidth = 60
Columns("B:B").ColumnWidth = 42.71
Columns("C:C").ColumnWidth = 8.57
Columns("D:D").ColumnWidth = 13.57
Workbooks("liste_magasins.xls").Sheets("Imp").Range("a" & nummag
+
1) = "Vous pouvez aussi les retrouver sur le site www.toto.fr"
Application.Wait Now + TimeValue("0:00:03")
Workbooks("liste_magasins.xls").Sheets("Imp").PrintOut Copies:=1
Application.Wait Now + TimeValue("0:00:03")
MsgBox DEP
Workbooks("liste_magasins.xls").Sheets("Imp").Range("a5:e" &
nummag
+ 1).Delete
Application.Wait Now + TimeValue("0:00:03")

nummag = 5
End If
Next DEP
Application.StatusBar = "Terminé. inscrire le nombre de colis"
End Sub