Depuis juin 2024, les mises à jour de sécurité KB 5039212 (Windows 11) et KB 5039211 (Windows 10) font échouer l’impression sur de nombreuses imprimantes d’étiquettes. Voici les symptômes, les contournements validés et une procédure pas‑à‑pas, avec un module VBA pour l’envoi RAW.
Problème posé
Après installation des mises à jour de sécurité de juin 2024, plusieurs modèles d’imprimantes d’étiquettes (Datamax, Zebra, Murrplastik et autres imprimantes thermiques) cessent d’imprimer lorsqu’elles sont pilotées par le pilote “Generic/Text Only” ou un pilote propriétaire fonctionnant de manière équivalente (envoi direct de commandes texte au port RAW du spouleur).
Symptômes typiques observés :
- Étiquettes blanches (aucun marquage), feuilles vierges ou sortie tronquée.
- Aucun flux d’impression à la sortie de l’application : le job part dans le spouleur puis “disparaît”.
- Erreurs mémoire ou de format dans des macros Access/VBA, plantage d’états Access.
- Réinstallation impossible ou inefficace du pilote Generic/Text Only.
Configurations principalement touchées :
- Windows 10 et Windows 11 à jour de KB 5039211/12 (juin 2024).
- Imprimantes thermiques ou d’étiquettes (ZPL, EPL, DPL…), connectées en USB, série ou réseau (port RAW 9100) et utilisées avec des états Access ou des impressions au format texte pur.
Contexte technique, en bref : ces mises à jour changent le comportement d’anciennes chaînes d’impression “texte seul”. Les impressions qui reposent sur l’envoi direct de commandes (ZPL/EPL/DPL) via le pilote Generic/Text Only sont affectées, alors que des pilotes graphiques modernes ou certains pilotes tiers continuent souvent de fonctionner. La solution durable consiste à installer les mises à jour cumulatives de juillet 2024 (ou ultérieures), ou à piloter l’imprimante en mode RAW sans dépendance au pilote texte.
Contournements et solutions
| Solution | Détails | Avantages | Limites |
|---|---|---|---|
| Désinstaller le KB de juin | wusa /uninstall /kb:5039212 (ou 5039211) puis redémarrage. | Restaure l’impression immédiatement. | La mise à jour se ré‑installe si elle n’est pas masquée. |
| Masquer l’update avec wushowhide.diagcab | Outil Microsoft à lancer après la désinstallation. | Empêche le KB incriminé de revenir. | Machine non protégée tant qu’aucun correctif n’est appliqué. |
| Installer la cumulative de juillet 2024 (ou ultérieure) | Le Patch Tuesday de juillet corrige le bug chez la majorité des utilisateurs. | Corrige le problème et remet le PC à jour côté sécurité. | Exige de lever la pause sur Windows Update. |
Piloter l’imprimante en mode RAW via winspool.drv | Appels API depuis VBA/Access pour envoyer le code Datamax/Zebra directement. | Contourne définitivement le pilote Generic/Text Only. | Développement à prévoir ; moins convivial que les états Access. |
| Méthodes de secours | Désinstallation hors ligne (mode récupération) si Windows refuse la suppression ; usage d’un pilote Seagull/NiceLabel ou d’un serveur d’impression non mis à jour. | Dépanne les cas bloqués. | Solutions temporaires. |
Procédures pas‑à‑pas
Avant de commencer
- Planifier une fenêtre de maintenance et un point de restauration (ou une image/snapshot).
- Recenser les postes et imprimantes concernées : modèles, ports, pilotes, versions Windows.
- Préparer un poste témoin (groupe pilote) pour valider la solution retenue.
Désinstaller la mise à jour de juin
Via l’interface
- Ouvrir Paramètres > Windows Update > Historique des mises à jour > Désinstaller des mises à jour.
- Rechercher KB 5039212 (Windows 11) ou KB 5039211 (Windows 10), cliquer sur Désinstaller.
- Redémarrer le poste.
Via la ligne de commande (administrateur)
wusa /uninstall /kb:5039212 /quiet /norestart
wusa /uninstall /kb:5039211 /quiet /norestart
shutdown /r /t 0
Si la désinstallation échoue, identifier le package exact et le supprimer avec DISM :
dism /online /get-packages | findstr 5039212
dism /online /get-packages | findstr 5039211
dism /online /remove-package /packagename:Package_for_RollupFix~31bf3856ad364e35~amd64~~22621.##.####.####
Remplacez le nom de package par celui renvoyé sur votre machine. Redémarrez ensuite.
Masquer la mise à jour pour éviter le retour
Utiliser l’utilitaire wushowhide.diagcab pour masquer KB 5039211/12 après désinstallation, puis relancer une recherche Windows Update. Sur un parc géré, vous pouvez également appliquer une règle WSUS/Intune pour mettre en pause la qualité mensuelle concernée.
Installer la cumulative de juillet 2024 (ou ultérieure)
La voie officielle consiste à installer les builds publiées en juillet 2024 (et suivantes), qui rétablissent l’impression pour la majorité des cas.
- Lever la pause Windows Update s’il y en a une.
- Forcer une recherche de mises à jour et appliquer les mises à jour cumulatives disponibles.
- Redémarrer et valider l’impression sur l’imprimante d’étiquettes.
Conseil : conservez temporairement le masquage de la qualité de juin pour éviter toute réinstallation accidentelle jusqu’à ce que tous les postes soient passés sur la cumulative de juillet (ou plus récente).
Piloter l’imprimante en mode RAW depuis Access/VBA
Si vos applications dépendent des états Access et du pilote texte générique, une stratégie robuste consiste à envoyer directement les commandes ZPL/EPL/DPL à l’imprimante via l’API winspool.drv. Cette approche contourne totalement le pilote Generic/Text Only et fonctionne quel que soit l’état des mises à jour Windows.
Module VBA prêt à l’emploi (Office 32/64 bits)
Ajoutez un module standard dans votre base Access et collez le code suivant. Il envoie une chaîne ASCII (ZPL/EPL/DPL) au spouleur en datatype RAW.
Option Compare Database
Option Explicit
#If VBA7 Then
Private Declare PtrSafe Function OpenPrinter Lib "winspool.drv" Alias "OpenPrinterA" _
(ByVal pPrinterName As String, phPrinter As LongPtr, ByVal pDefault As LongPtr) As Long
Private Declare PtrSafe Function ClosePrinter Lib "winspool.drv" _
(ByVal hPrinter As LongPtr) As Long
Private Declare PtrSafe Function StartDocPrinter Lib "winspool.drv" Alias "StartDocPrinterA" _
(ByVal hPrinter As LongPtr, ByVal Level As Long, pDocInfo As DOCINFO) As Long
Private Declare PtrSafe Function EndDocPrinter Lib "winspool.drv" _
(ByVal hPrinter As LongPtr) As Long
Private Declare PtrSafe Function StartPagePrinter Lib "winspool.drv" _
(ByVal hPrinter As LongPtr) As Long
Private Declare PtrSafe Function EndPagePrinter Lib "winspool.drv" _
(ByVal hPrinter As LongPtr) As Long
Private Declare PtrSafe Function WritePrinter Lib "winspool.drv" _
(ByVal hPrinter As LongPtr, ByRef pBuf As Byte, ByVal dwCount As Long, _
ByRef dwWritten As Long) As Long
#Else
Private Declare Function OpenPrinter Lib "winspool.drv" Alias "OpenPrinterA" _
(ByVal pPrinterName As String, phPrinter As Long, ByVal pDefault As Long) As Long
Private Declare Function ClosePrinter Lib "winspool.drv" _
(ByVal hPrinter As Long) As Long
Private Declare Function StartDocPrinter Lib "winspool.drv" Alias "StartDocPrinterA" _
(ByVal hPrinter As Long, ByVal Level As Long, pDocInfo As DOCINFO) As Long
Private Declare Function EndDocPrinter Lib "winspool.drv" _
(ByVal hPrinter As Long) As Long
Private Declare Function StartPagePrinter Lib "winspool.drv" _
(ByVal hPrinter As Long) As Long
Private Declare Function EndPagePrinter Lib "winspool.drv" _
(ByVal hPrinter As Long) As Long
Private Declare Function WritePrinter Lib "winspool.drv" _
(ByVal hPrinter As Long, ByRef pBuf As Byte, ByVal dwCount As Long, _
ByRef dwWritten As Long) As Long
#End If
Private Type DOCINFO
pDocName As String
pOutputFile As String
pDatatype As String
End Type
' Envoie un buffer binaire (Byte()) au spouleur en mode RAW
Public Function SendRawBytesToPrinter(ByVal PrinterName As String, ByRef data() As Byte, _
Optional ByVal JobName As String = "RAW job") As Boolean
Dim h As LongPtr, ok As Long, doc As DOCINFO, written As Long
doc.pDocName = JobName
doc.pDatatype = "RAW"
#If VBA7 Then
ok = OpenPrinter(PrinterName, h, 0)
#Else
ok = OpenPrinter(PrinterName, h, 0)
#End If
If ok = 0 Then
SendRawBytesToPrinter = False
Exit Function
End If
If StartDocPrinter(h, 1, doc) = 0 Then GoTo CleanUp
If StartPagePrinter(h) = 0 Then GoTo CleanUp
ok = WritePrinter(h, data(0), UBound(data) - LBound(data) + 1, written)
Call EndPagePrinter(h)
Call EndDocPrinter(h)
CleanUp:
Call ClosePrinter(h)
SendRawBytesToPrinter = (ok <> 0) And (written > 0)
End Function
' Construit le buffer ANSI à partir d'une chaîne VBA et l'envoie
Public Function SendRawStringToPrinter(ByVal PrinterName As String, ByVal CommandText As String, _
Optional ByVal JobName As String = "RAW job") As Boolean
Dim bytes() As Byte, n As Long
bytes = StrConv(CommandText, vbFromUnicode)
n = UBound(bytes) - LBound(bytes) + 1
ReDim Preserve bytes(n) ' Ajout du NUL terminal
bytes(n) = 0
SendRawStringToPrinter = SendRawBytesToPrinter(PrinterName, bytes, JobName)
End Function
' Exemple : envoyer une étiquette ZPL simple
Public Sub Example_Zebra()
Dim zpl As String
zpl = "^XA^FO20,20^ADN,36,20^FDTest ZPL^FS^XZ"
Call SendRawStringToPrinter("ZDesigner GK420d", zpl, "ZPL")
End Sub
' Exemple : envoyer une étiquette DPL (Datamax)
Public Sub Example_Datamax()
Dim dpl As String
dpl = "<STX>L<CR>" & _
"D11<CR>" & _
"191100001000010TEST DPL<CR>" & _
"E<CR>"
dpl = Replace(dpl, "<CR>", Chr$(13)) ' retour chariot
dpl = Replace(dpl, "<STX>", Chr$(2)) ' start of text
Call SendRawStringToPrinter("Datamax-O'Neil", dpl, "DPL")
End Sub
' Sélection d'une imprimante contenant un mot-clé (Zebra, Datamax, etc.)
Public Function FindPrinterLike(ByVal Keyword As String) As String
Dim prt As Printer
For Each prt In Application.Printers
If InStr(1, prt.DeviceName, Keyword, vbTextCompare) > 0 Then
FindPrinterLike = prt.DeviceName
Exit Function
End If
Next
End Function </code></pre>
<p><em>Astuce</em> : pour fiabiliser la production, stockez le nom d’imprimante dans une table de configuration, et validez la présence de l’imprimante au démarrage de l’application Access.</p>
<h4>Exemples d’intégration dans Access</h4>
<ul>
<li>Depuis un bouton de formulaire : construire la commande ZPL/EPL à partir des champs (référence, lot, date, QR/Code128) puis appeler <code>SendRawStringToPrinter</code>.</li>
<li>Depuis un état Access : remplacer l’aperçu par un envoi direct de texte si l’état était initialement conçu pour <em>Generic/Text Only</em>.</li>
</ul>
<h3>Méthodes de secours</h3>
<p>Si la désinstallation échoue en ligne ou que la machine ne démarre pas correctement :</p>
<ul>
<li><strong>Désinstallation hors ligne via l’environnement de récupération</strong> : amorcer en mode Récupération, ouvrir une invite de commandes, identifier la lettre du volume Windows (ex. <code>D:</code>), lister et retirer le package :
<pre><code>dism /image:D:\ /get-packages | findstr 5039212
dism /image:D:\ /remove-package /packagename:Package_for_RollupFix~...
Basculer temporairement via un serveur d’impression non encore patché (si la politique sécurité locale l’autorise) pour rétablir la production, le temps d’appliquer la cumulative de juillet.
Essayer un pilote tiers (ex. famille Seagull/NiceLabel) ou un driver natif récent du fabricant capable d’accepter du RAW, en évitant le Generic/Text Only.
État côté Microsoft
- Le problème a été signalé par les équipes support mi‑juin 2024 et remonté aux développeurs.
- Les mises à jour cumulatives de juillet 2024 pour Windows 10 et 11 rétablissent l’impression pour la majorité des utilisateurs.
- Aucun correctif rétroactif n’a été publié pour les KB de juin ; la voie officielle recommandée est :
- désinstaller/masquer KB 5039211/12 sur les postes impactés ;
- appliquer les builds de juillet 2024 ou ultérieures dès qu’elles apparaissent dans Windows Update.
Bonnes pratiques recommandées
- Valider les Patch Tuesday en pré‑production avec un échantillon représentatif : imprimantes d’étiquettes, TPV, balances, scanners…
- Préparer un plan de retour arrière : scripts
wusaetdism, snapshots, sauvegardes d’image disque. - Documenter une méthode d’impression RAW (via
winspool.drv) dans vos applications Access/VBA afin de limiter la dépendance au moteur d’états. - Surveiller le portail “Release Health” et les canaux éditeurs/fabricants pour appliquer rapidement un éventuel correctif hors bande.
- Sécuriser le cycle de patch : WSUS/Intune, anneaux de déploiement, gel de changement en période critique (inventaires, production).
- Étalonner les paramètres du spouleur : mode RAW, “Imprimer directement sur l’imprimante”, mémoire tampon, police par défaut, codepage.
Checklist de dépannage
- Vérifier que l’imprimante imprime une étiquette de test depuis son panneau (autodiagnostic) et depuis Périphériques et imprimantes.
- S’assurer que le service Spouleur d’impression est démarré :
services.msc. - Tester une commande minimale (ZPL/DPL) envoyée via l’utilitaire de test du fabricant ou via le module VBA fourni.
- Essayer en “Imprimer directement sur l’imprimante” dans les options avancées de l’imprimante.
- Regarder le journal d’événements Microsoft-Windows-PrintService pour des erreurs liées au pilote texte ou au port RAW.
- Réinitialiser la file d’attente (avec prudence) :
net stop spooler del /Q /F "%systemroot%\System32\spool\PRINTERS\*.*" net start spooler - Comparer le comportement avec un pilote alternatif du constructeur ou un pilote tiers reconnu.
FAQ
Pourquoi seules les imprimantes d’étiquettes sont‑elles touchées ?
Parce qu’elles s’appuient souvent sur des commandes texte (ZPL, EPL, DPL) envoyées en RAW via le pilote Generic/Text Only. Toute modification du chemin d’impression “texte seul” les impacte plus fortement que des imprimantes bureautiques pilotées en mode graphique.
Puis‑je rester sur les mises à jour de juin ?
Ce n’est pas conseillé : ces KB corrigent des vulnérabilités. Utilisez le masquage uniquement le temps d’installer la cumulative de juillet ou ultérieure qui rétablit l’impression.
Un pilote Seagull/NiceLabel résout‑il automatiquement le problème ?
Souvent, oui, car ces pilotes gèrent proprement le RAW et les jeux de commandes d’étiquettes, mais validez sur votre modèle et votre flux réel (codes-barres, QR, polices, images).
Pourquoi Access imprime‑t‑il en blanc après la mise à jour ?
Les états conçus pour “Texte seul” peuvent ne plus produire d’output valide une fois la chaîne d’impression modifiée. L’envoi RAW via winspool.drv contourne le problème.
Est‑ce risqué de nettoyer le dossier des jobs du spouleur ?
Oui si des jobs critiques sont en attente. Faites‑le pendant une fenêtre de maintenance et sauvegardez les fichiers si nécessaire.
Tableau récapitulatif des commandes utiles
| Objectif | Commande | Quand l’utiliser |
|---|---|---|
| Désinstaller KB Windows 11 | wusa /uninstall /kb:5039212 /quiet /norestart | Si l’imprimante cesse d’imprimer après juin 2024. |
| Désinstaller KB Windows 10 | wusa /uninstall /kb:5039211 /quiet /norestart | Cas identique sous Windows 10. |
| Lister le package exact | dism /online /get-packages | findstr 503921* | Quand wusa échoue ou ne trouve pas le KB. |
| Supprimer via DISM | dism /online /remove-package /packagename:Package_for_RollupFix~... | Si la désinstallation graphique ou wusa ne passe pas. |
| Redémarrage immédiat | shutdown /r /t 0 | Appliquer les changements du spouleur/KB. |
Modèle de communication interne
“Suite au déploiement des mises à jour Windows de juin 2024, certaines imprimantes d’étiquettes (Zebra/Datamax) peuvent ne plus imprimer. Notre équipe applique la mise à jour cumulative de juillet qui corrige le problème. Si vous êtes impacté, contactez le support ; un contournement temporaire est disponible.”
Récapitulatif opérationnel express
- Imprimante hors service ? Désinstaller KB 5039211/12 et masquer la mise à jour.
- Installer les KB de juillet 2024 ou plus récents dès qu’ils sont proposés.
- Si Access imprime en blanc : envisager l’envoi RAW (
winspool.drv) ou l’essai d’un pilote Seagull. - Mettre en place un pilote/test de patchs pour éviter qu’un incident similaire bloque la production.
Conclusion
Le problème d’impression introduit par KB 5039212/5039211 touche surtout les flux “texte seul” propres aux imprimantes d’étiquettes. Deux voies se complètent : revenir rapidement à un état fonctionnel (désinstallation + masquage du KB de juin) puis appliquer la cumulative de juillet 2024 (ou ultérieure), et sécuriser vos applications en adoptant l’envoi RAW via winspool.drv pour ne plus dépendre d’un pilote générique fragile. Avec un cycle de patch maîtrisé et des tests pilote, votre chaîne d’étiquetage retrouve une disponibilité stable.

