web-dev-qa-db-fra.com

Comment un même fichier sur deux ordinateurs différents peut-il donner un résultat différent?

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
 enter image description here

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.

15
Andreas

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:

 enter image description here

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
8
Florent B.

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:

  • Vérifiez la police que vous utilisez dans votre feuille. 
  • Vérifiez quelle version de la police est sur votre ordinateur et qui est sur l'autre ordinateur.
  • En outre, vérifiez les versions de police de Calibri et Cambria sur les deux ordinateurs (car il s'agit des paramètres par défaut de Microsoft).

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.?

2
Pᴇʜ

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.

2
Michael Dimmitt

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.

Gestionnaire de périphériques

  • Frappé le Windows KeyClé 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.

  • Répétez ces étapes sur l'autre ordinateur pour comparer la date et la version du pilote.

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.

Paramètres du fabricant de l'imprimante

  • Frappé le Windows KeyWindows 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.

Propriétés de l'imprimante

  • Passez à Control PanelHardware and SoundDevices 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). .

0
ashleedawg