J'ai créé un script VBA qui lit les valeurs d'une feuille et crée une "étiquette" sur une autre feuille.
Cette étiquette est censée être imprimée sur un papier spécial divisé en trois parties.
Depuis que je vis en Suède, nous utilisons le format de papier A4 (297x210 mm). Les étiquettes sont supposées être 99x210 mm.
Cela signifie que chaque valeur doit être imprimée sur la position exacte sur le papier.
Je le fais pour mon entreprise, donc tous les ordinateurs sont exactement les mêmes.
Même modèle, même version de Windows, même version d’Excel.
Ceci est une petite partie du code (ce qui est pertinent pour le positionnement du texte)
For i = 2 To Lastrow
' Location name
Sheets("Etikett").Range("A" & intRad) = Sheets("Bins").Range("A" & i)
With Sheets("Etikett").Range("A" & intRad & ":K" & intRad)
.MergeCells = True
.Font.Color = clr
.Font.Size = 150
.Font.Bold = True
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.BorderAround Weight:=xlThick
.Borders.Color = clr
.Borders(xlEdgeLeft).Weight = xlThick ' this may look odd but is needed
.Borders(xlEdgeRight).Weight = xlThick
End With
'Checknumber
Sheets("Etikett").Range("B" & intRad + 1) = Sheets("Bins").Range("B" & i)
With Sheets("Etikett").Range("B" & intRad + 1 & ":D" & intRad + 1)
.MergeCells = True
.Font.Color = clr
.Font.Size = 100
.NumberFormat = "00"
.Font.Bold = True
.VerticalAlignment = xlCenter
.HorizontalAlignment = xlCenter
End With
' old location
If Sheets("Bins").Range("E" & i) <> "" Then
Sheets("Etikett").Range("K" & intRad + 1) = Sheets("Bins").Range("E" & i)
With Sheets("Etikett").Range("K" & intRad + 1)
.MergeCells = True
.Font.Color = clr
.Font.Size = 8
.Font.Bold = True
.VerticalAlignment = xlBottom
.HorizontalAlignment = xlLeft
End With
End If
' copy already premade barcode or generate barcode if not premade
If Sheets("Bins").Cells(i, 2) < 100 Then
Sheets("0-99").Select
shp = "B" & Right("0" & Sheets("Bins").Cells(i, 2), 2)
Sheets("0-99").Shapes(shp).Select
Else
Sheets("VBA").Select
ThisWorkbook.ActiveSheet.Shapes.SelectAll
Selection.Delete
Code128Generate_v2 30, 0, 40, 2.5, ThisWorkbook.ActiveSheet, Sheets("Bins").Cells(i, 2), 200
ThisWorkbook.ActiveSheet.Shapes.SelectAll
Selection.ShapeRange.Group.Select
End If
'color the barcode
Selection.ShapeRange.Line.ForeColor.RGB = clr
Selection.Copy
Sheets("Etikett").Select
Sheets("Etikett").Range("G" & intRad + 1 & ":J" & intRad + 1).MergeCells = True
' Set rowheights
Sheets("Etikett").Rows(intRad).RowHeight = 135
Sheets("Etikett").Rows(intRad + 1).RowHeight = 115
If Etikettcount Mod 3 = 0 Then ' if it's the last label on paper, no space is needed between this and the next.
Range("G" & intRad + 1).Select
intRad = intRad - 1
Else
Sheets("Etikett").Rows(intRad + 2).RowHeight = 25
Range("G" & intRad + 1).Select
End If
ActiveSheet.Paste ' paste barcode
Etikettcount = Etikettcount + 1
intRad = intRad + 3
End If
Next i
N'oubliez pas que ce n'est pas tout le code, mais qu'il copie le texte et les codes à barres et les place sur la feuille.
Sur mon ordinateur, la sortie est comme prévu:
print output
Sur d’autres ordinateurs, le dernier caractère est légèrement coupé et l’alignement vertical est incorrect.
Comme je l’ai écrit plus tôt, j’ai besoin que l’espace vide entre les étiquettes soit à environ 99 mm du haut, puis à 99 mm entre elles.
J'ai téléchargé le fichier complet si quelqu'un veut le tester ici: http://hoppvader.nu/docs/Streckkod.xlsm
Notez que seul le module3 est utilisé, le module2 l’est si vous choisissez un numéro de contrôle "Checksiffra" autre que 00-99.
Toute aide est appréciée sur la raison pour laquelle cela ne fonctionne que sur mon ordinateur.
La résolution de l’imprimante, la résolution du bureau, la police ou la taille des cellules peuvent avoir une incidence sur la sortie.
Par exemple, lorsque je dessine une forme carrée de 10 cm sur 10 cm sur une nouvelle feuille, le résultat imprimé est un rectangle de 10,5 cm sur 9,5 cm, même si la mise à l'échelle est désactivée dans la mise en page et les options avancées.
Pour obtenir un résultat précis, une solution serait de dessiner le contenu sur une feuille de graphique, car tout dessin sur ce type de feuille est imprimé au format exact fourni en centimètres:
Voici un exemple pour ajouter une feuille de graphique et créer les étiquettes:
Sub DrawLabel()
' add new empty Chart sheet '
Dim ch As Chart
Set ch = ThisWorkbook.Charts.Add()
ch.ChartArea.ClearContents
ch.ChartArea.Format.Fill.Visible = msoFalse
ch.ChartArea.Format.line.Visible = msoFalse
' setup page as A4 with no margin '
ch.PageSetup.PaperSize = xlPaperA4
ch.PageSetup.Orientation = xlPortrait
ch.PageSetup.LeftMargin = 0
ch.PageSetup.TopMargin = 0
ch.PageSetup.RightMargin = 0
ch.PageSetup.BottomMargin = 0
ch.PageSetup.HeaderMargin = 0
ch.PageSetup.FooterMargin = 0
DoEvents ' force update '
' add labels
AddText ch, x:=0.5, y:=0.5, w:=19.9, h:=4.6, Color:=vbRed, Border:=3, Size:=150, Text:="DB136C"
AddText ch, x:=2.5, y:=5.1, w:=5, h:=4, Color:=vbRed, Border:=0, Size:=100, Text:="79"
AddText ch, x:=0.5, y:=10, w:=19.9, h:=4.6, Color:=vbGreen, Border:=3, Size:=150, Text:="DB317A"
AddText ch, x:=2.5, y:=14.6, w:=5, h:=4, Color:=vbGreen, Border:=0, Size:=100, Text:="35"
AddText ch, x:=0.5, y:=19.5, w:=19.9, h:=4.6, Color:=vbBlack, Border:=3, Size:=150, Text:="AA102A"
AddText ch, x:=2.5, y:=24.1, w:=5, h:=4, Color:=vbBlack, Border:=0, Size:=100, Text:="10"
End Sub
Private Sub AddText(self As Chart, x#, y#, w#, h#, Color&, Border#, Size#, Text$)
With self.Shapes.AddTextBox( _
msoTextOrientationHorizontal, _
Application.CentimetersToPoints(x) - 8, _
Application.CentimetersToPoints(y) - 8, _
Application.CentimetersToPoints(w), _
Application.CentimetersToPoints(h))
.line.Weight = Border
.line.ForeColor.RGB = Color
.line.Visible = Border <> 0
.TextFrame.VerticalAlignment = xlVAlignCenter
.TextFrame.HorizontalAlignment = xlHAlignCenter
.TextFrame2.TextRange.Font.Name = "Calibri"
.TextFrame2.TextRange.Font.Size = Size
.TextFrame2.TextRange.Font.Bold = msoTrue
.TextFrame2.TextRange.Font.Fill.ForeColor.RGB = Color
.TextFrame2.TextRange.Text = Text
End With
End Sub
Vérifiez la largeur de la colonne et comparez les largeurs de colonne de votre ordinateur avec les autres si elles sont différentes. Ceci est probablement un problème de version de police:
Assurez-vous d'installer la même version de police sur tous les ordinateurs!
Le problème ici est probablement que Excel détermine la largeur de colonne par la largeur de caractère (voir Description de la façon dont les largeurs de colonne sont déterminées dans Excel ). Donc, si la police change, la largeur de la colonne change.
J'ai eu quelques problèmes de ce type il y a quelque temps, lorsque Microsoft Update a livré un fichier de police incorrect comportant une largeur de caractère différente. Si l’un de ces mauvais fichiers se trouve sur votre ordinateur ou sur l’un des autres, la largeur de la colonne est mal calculée.
Voir également: Pourquoi la largeur de pixel de la colonne Excel est-elle différente sur des machines différentes, mais avec le même système d'exploitation, la même résolution, la même version d'Excel, etc.?
il devrait y avoir une option lorsque vous allez imprimer: "scale to fit" Cela pourrait être dans les options avancées. Sur un mac, je devais cliquer sur "Afficher les détails"
J'avais l'habitude de vba. Et je suis un programmeur informatique. Mais le problème ne semble pas être un problème de code.
ps- vous pourriez probablement trouver un moyen d'activer "l'échelle" par macro . Voici quelques ressources pour rechercher une solution de programmation: https://www.ozgrid.com/forum/forum/help-forums/Excel-general/5968-force-printing-macro-to-fit-page
https://www.experts-exchange.com/questions/28156905/VBA-Print-Code-Print-Area-Fit-on-one-page.html
extrait du lien ci-dessus solution de Patrick Matthews
With Worksheets("name").PageSetup
.Zoom = False
.FitToPagesTall = 1
.FitToPagesWide = 1
End With
En réponse à @Andreas, qu'en est-il de l'extrait de code?
en outre, supprimez le .FitToPagesTall
With Worksheets("name").PageSetup
.Zoom = False
.FitToPagesWide = 1
End With
si tout va bien alors il ne s'alignera pas verticalement mais toujours horizontalement.
Cela ressemble à : utiliser le même fichier sur un autre ordinateur n’est pas votre problème . Le fichier n'est qu'un des nombreux facteurs qui affectent le résultat final imprimé d'un document.
Le pilote d'imprimante Windows peut être une version différente sur chacun des ordinateurs (c'est-à-dire qu'il a été mis à jour sur l'un mais pas sur l'autre)
Les paramètres d’imprimante Windows peuvent être légèrement différents d’un ordinateur à l’autre.
Je sais que vous êtes catégorique sur le fait que les deux ordinateurs sont identiques et que ces paramètres ne peuvent pas être modifiés, mais une telle différence se produit sur des stations de travail apparemment identiques tout le temps . par un nombre quelconque de variables inattendues. (c.-à-d., "Une fois lorsqu'une mise à jour Windows a été poussée sur les deux machines, l'une d'entre elles a été mise hors tension accidentellement et n'a pas récupéré ou installé correctement la mise à jour.")
Il existe une tonne de paramètres d'imprimante enterrés et d'autres variables qui pourraient être la cause potentielle de votre problème, cachés à différents niveaux. (c'est-à-dire, au niveau du système, au niveau du périphérique, au niveau de l'application)
Vous trouverez ci-dessous comment trouver trois ensembles de propriétés susceptibles d’être le contrevenant. Vérifiez les trois emplacements à partir de les deux ordinateurs et comparez les paramètres.
Frappé le Clé Windows, tapez device manger
et Push Enter
Double-cliquez sur Imaging Devices
, cliquez avec le bouton droit de la souris sur l’imprimante souhaitée et choisissez Properties
.
Cliquez sur l'onglet Driver
et notez le Driver Date
et le Driver Version
.
Si elles ne correspondent pas, faites-les correspondre. Si vous n'avez accès à aucune de ces zones ou ne savez pas quelle option modifier, vérifiez auprès de votre I.T. département.
Frappé le Windows Key, tapez printers
et Push Enter
Cliquez avec le bouton droit de la souris sur l’imprimante souhaitée et choisissez Printer Preferences
La disposition de cette fenêtre dépend du fabricant de votre imprimante. Vérifiez toutes les valeurs sur tous les onglets , en recherchant les différences entre les deux paramètres des deux ordinateurs.
Passez à Control Panel
→ Hardware and Sound
→ Devices and Printers
Cliquez avec le bouton droit de la souris sur l’imprimante souhaitée et choisissez Printer Properties
Vérifiez toutes les valeurs sur tous les onglets , en recherchant les différences entre les deux paramètres des deux ordinateurs.
Enfin, imprimez une page de test sur l’imprimante de votre choix à partir des deux ordinateurs et examinez-les de près afin de déceler toute différence (y compris les numéros de version). .