XL 2010 Déplacer des lignes entières sous condition d'un tableau vers différents onglets

Djehnsr

XLDnaute Nouveau
Bonjour, je vais tenter d'être le plus clair possible quant à l'exposition de mon problème.

Je gère le pôle logistique d'une entreprise, nous avons entre 35 et 70 commandes à préparer par jour pour nos techniciens.
Notre WMS génère un tableau avec toutes les commandes triées par Techniciens, donc 1 commande = 1 technicien, pour lequel peuvent figurer plusieurs lignes à préparer.
Nous extrayons ce tableau en format Excel et imprimons manuellement chaque commande, donc 1 technicien = 1 impression.
Pour ce faire, nous sélectionnons une commande depuis l'extraction puis imprimons la sélection, opération à répéter pour chaque commande, ce qui peut prendre jusqu'à 20 min.

Dans le but d'optimiser le temps d'impression nécessaire avant la distribution des commandes aux préparateurs, je cherche une solution pour renvoyer rapidement chaque commande vers l'onglet qui lui correspond pour, à terme, imprimer tous les onglets en une fois. J'ai alors pensé à une macro.

Pour se faire j'ai créé une matrice sur Excel avec un onglet par technicien, chacun portant leur nom, noms qui figurent sur le tableau issu de l'extraction originale.
Chacun de ces onglets est mis en forme, mais vide.
Disons que j'ai 30 techniciens, ma matrice aura 30 onglets + 1 qui accueillera le tableau extrait du WMS et dans lequel nous implanterons notre macro.

L'idée serait de redistribuer des lignes entières sous condition vers les onglets souhaités.

Vous trouverez en PJ une sélection modifiée du tableau créé à partir de l'extraction, ce sont ces lignes que nous voulons déplacer.

Je suis arrivé au bout de mes compétences sur Excel face à ce problème, j'ai manifestement besoin d'aide.

Excellois, Excelloises, je vous remercie d'avance !
 

Pièces jointes

  • PREPA CDE EXCEL.xlsx
    11 KB · Affichages: 8
Solution
Hello
corrige la macro d'impression comme ceci
SANS la déclaration de ws comme une feuille...
d'ailleurs.. cette erreur me surprend.. et je ne comprend pas... faudra que je regarde, car si on déclare ws comme étant une feuille, la propriété name n'existe pas.... y a surement un truc... une subtilité qui m'échappe pour l'instant...

VB:
Sub impression()

For Each ws In ActiveWorkbook.Sheets
    If ws.Name <> "Feuil1" And ws.Range("B2") <> "" Then
        ws.PrintOut copies:=1, Collate:=True, IgnorePrintAreas:=False
    End If
Next ws

End Sub

Djehnsr

XLDnaute Nouveau
Après avoir déclenché ta macro et distribué les lignes dans les onglets correspondants, j'ai lancé l'enregistrement d'une macro que j'ai nommé "impression".
J'ai imprimé la feuille active qui correspond au premier onglet du classeur.
J'ai arrêté l'enregistrement.
Voici ce que j'ai:

Sub impression()
'
' impression Macro
'

'
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
IgnorePrintAreas:=False
End Sub



Fichier Excel en PJ

Il me semble évident qu'il reste une étape à compléter avant que ce ne soit opérationnel, mais laquelle, maître Excellois ?
 

Pièces jointes

  • Matrice Explo Prepa TEST MACRO.xlsm
    198.6 KB · Affichages: 3

vgendron

XLDnaute Barbatruc
et voila (pas testé)
VB:
Sub impression()

Dim ws As Sheets

For Each ws In ActiveWorkbook.Sheets
    If ws.Name <> "Feuil1" And ws.Range("B2") <> "" Then
        ws.PrintOut copies:=1, Collate:=True, IgnorePrintAreas:=False
    End If
Next ws

End Sub
 

Djehnsr

XLDnaute Nouveau
et voila (pas testé)
VB:
Sub impression()

Dim ws As Sheets

For Each ws In ActiveWorkbook.Sheets
    If ws.Name <> "Feuil1" And ws.Range("B2") <> "" Then
        ws.PrintOut copies:=1, Collate:=True, IgnorePrintAreas:=False
    End If
Next ws

End Sub
Bonjour,

après test, j'ai le message d'erreur en PJ.
Egalement en PJ, le fichier utilisé pour le test.

PS: La surbrillance en bleu est automatique à l'ouverture du message d'erreur.
 

Pièces jointes

  • Erreur macro impression.png
    Erreur macro impression.png
    18.3 KB · Affichages: 27
  • Matrice Explo Prepa TEST IMPRESSION.xlsm
    28.2 KB · Affichages: 5

vgendron

XLDnaute Barbatruc
Hello
corrige la macro d'impression comme ceci
SANS la déclaration de ws comme une feuille...
d'ailleurs.. cette erreur me surprend.. et je ne comprend pas... faudra que je regarde, car si on déclare ws comme étant une feuille, la propriété name n'existe pas.... y a surement un truc... une subtilité qui m'échappe pour l'instant...

VB:
Sub impression()

For Each ws In ActiveWorkbook.Sheets
    If ws.Name <> "Feuil1" And ws.Range("B2") <> "" Then
        ws.PrintOut copies:=1, Collate:=True, IgnorePrintAreas:=False
    End If
Next ws

End Sub
 

Djehnsr

XLDnaute Nouveau
Hello
corrige la macro d'impression comme ceci
SANS la déclaration de ws comme une feuille...
d'ailleurs.. cette erreur me surprend.. et je ne comprend pas... faudra que je regarde, car si on déclare ws comme étant une feuille, la propriété name n'existe pas.... y a surement un truc... une subtilité qui m'échappe pour l'instant...

VB:
Sub impression()

For Each ws In ActiveWorkbook.Sheets
    If ws.Name <> "Feuil1" And ws.Range("B2") <> "" Then
        ws.PrintOut copies:=1, Collate:=True, IgnorePrintAreas:=False
    End If
Next ws

End Sub

C'est parfait, les deux macros fonctionnent, c'est un gain de temps non négligeable !
Encore merci pour ta patience et ta réactivité.
 

Statistiques des forums

Discussions
311 733
Messages
2 082 019
Membres
101 872
dernier inscrit
Colin T