plantage sur printout

Le
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: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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
michdenis
Le #17753031
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" 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
zappy
Le #17753291
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"
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" 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





michdenis
Le #17753371
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" 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"
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" 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





zappy
Le #17753581
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"
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" 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"
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" 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










zappy
Le #17753721
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"
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" 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"
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" 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










michdenis
Le #17753711
| 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 !
michdenis
Le #17753691
Une dernère suggestion :

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

DoEvents
.PrintOut Copies:=1





"zappy" 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"
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" 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"
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" 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










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

merci, Zappy.
"michdenis"
Une dernère suggestion :

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

DoEvents
.PrintOut Copies:=1





"zappy" 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"
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" 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"
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" 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















Publicité
Poster une réponse
Anonyme