Problème de mise en forme sur plusieurs cellules
Bonjour tout le monde,
Je suis une grande débutante en VBA, mais j'aimerais automatiser un maximum de création de documents pour faciliter et réduire la charge de travail dans ma société.
Ma compagnie est japonaise, donc il se peut que des kanjis traînent par-ci par-là. Cependant, c'est pour des documents d'exports principalement en anglais.
Vous devrez vous apercevoir qu'il y a un bouton d'action PI. Il a été créé il y a longtemps par un employé pour que le bon de commande devienne une facture proforma.
De mon côté j'ai réussi à créer un code pour établir une Facture à partir de la facture Proforma. Mais dans ce cas-ci, je bloque pour la mise en forme dans la création de commande auprès de notre usine à partir de la Proforma.
J'ai créé un code (qui vous fera certainement bien rire, mais ça ne fait qu'une semaine que je m'intéresse à VBA donc je n'ai fait que des codes très basiques) qui fonctionne en partie mais il y a problèmes que je n'arrive pas à résoudre vu mon manque de connaissance. J'en appelle donc à vos lumières et votre bienveillance.
Voici le code que j'ai écrit:
Sub Hachioji()
'
' Hachiojiyou Macro
' Turn PI into Hachiojiyou
'
'
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
ActiveSheet.Copy Before:=Sheets(Sheets.Count)
ActiveSheet.Name = "Hqchiojiyou"
ActiveSheet.Range("J5:K5").Value = Format(Now, "YYYY/MM/DD")
ActiveSheet.Range("H26").Value = Texte
ActiveSheet.Range("H26").Value = "Hachiojinominnasama otsukaresamadesu。"
ActiveSheet.Range("H27").Value = Texte
ActiveSheet.Range("H27").Value = "()noshinki o-da- desu。"
ActiveSheet.Range("H28").Value = Texte
ActiveSheet.Range("H28").Value = "konpou wo onegaishimase。"
Range("H26:H29").Select
With Selection.Font
.Name = "Arial"
.Size = 18
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ThemeColor = xlThemeColorLight1
.TintAndShade = 0
.ThemeFont = xlThemeFontNone
End With
Dim rng As Range
On Error Resume Next
Set rng = Application.InputBox(Prompt:="Select a range", Type:=8)
On Error GoTo 0
If Not rng Is Nothing Then
rng.Font.Size = 22
End If
Les differences entre la Proforma et la demande auprès de l'usine se trouvent :
-Dans la section H20:K30 où un texte en japonais doit apparaître. Ca c'est bon normalement.
-Ca se complique pour la mise en forme dans le tableau de commande.
La taille du tableau comprenant les informations relatives à la commande changera toujours.
Dans ce cas-ci, la commande est petite mais elle peut-être de plusieurs pages. Donc j'ai songé à faire apparaître une boîte de dialogue pour indiquer le début et la fin de la section où je voulais faire les modification.
-Les modifications doivent être apportées au niveau des colonnes QTY. ; ITEM DESCRIPTION qui comprends aussi la couleur. Il faut que ces trois éléments soit en police taille 22.
Sauf que j'ai deux problèmes :
Le premier n'est pas très important, les en-têtes se mettent en taille 22 aussi. J'avais songé à chercher un code qui pourrait exclure les cellules où c'est écrit en gras du genre
ElseIf Not rng.Font.Bold Then
rng.Font.Size = 22
Mais ça ne semble pas fonctionner....
L'autre problème plus important, c'est que dans la colonne G Unit Price, il y a une formule et des 0yens aparaissent. Et il faudrait que la case reste vide.
Donc faudrait-il faire un PasteSpecial avec juste les formats ?
Je remercie d'avance quiconque voudra bien prendre un peu de son temps pour m'aider.
Je mets aussi le fichier excel en pièce-jointe en espérant que mes explications soient assez claires.
Bonjour,
Je pense qu'il y a d'autres choses à modifier, mais testez déjà cette version :
Il faut transformer votre zone de commande en tableau structuré (t_Commande) et rebaptiser les titres comme je l'ai fait et mettre la font de la même couleur que le fond.
Merci beaucoup pour votre proposition.
Mais j’ai un grand souci, c’est que le format de la PI ne peut être changé. La PI est renvoyée au client pour acceptation. Il peut y apporter des modifications comme changer les quantités ou faire une annulation. Ensuite la PI sert de base pour la facture (Pour laquelle il y a déjà un code).
Nous gardons chaque version. Dans ce cas-ci, la version B sert de base, mais dans notre classeur nous gardons la version A aussi.
C’est d’ailleurs pour cette raison que je ne peux pas construire un code de type Sheets("PI-B") car ce ne sera pas toujours la version définitive.
Dans ma version, tout est en gris et les bannières sont aussi en gris. Ce n’est pas un document qui sera agréable à lire pour le client et carrément illisible pour notre usine à qui est destiné le fameux « hachijojiyou » car le Japon utilise encore beaucoup le fax pour les communications entre ses usines.
Par contre, dans votre version, tout est bien en couleur sur fond blanc mais tous les prix ont disparus.
J’aimerais bien comprendre la première partie de votre code.
Sub TestHachioji()
Dim I As Integer
For I = Sheets.Count To 1 Step -1
If Sheets(I).Name = "Hqchiojiyou" Then Sheets(I).Delete
Next I
Hachioji
End SubEnsuite, je suppose que c’est pour établir un tableau structuré que vous avez écrit :
Dim ShHqch As Worksheet
Puis
.ListObjects(1).Name = "t_Commande2"
Range("t_Commande2[[QTY]:[Item3]]").Font.Size = 22
Range("t_Commande2[UNIT]").ClearContents
Mais n’est-ce pas ce ClearContents qui efface tous les prix de la colonne Unit ?
Les filtres pourraient être utilisés dans la feuille PI, mais sur la ligne supérieur, la 32.
Il faudrait séparer la partie Item en 3, avec une première partie Item description, une seconde Colour et la troisième vide pour le moment mais qui servira pour le HS code lors de la création du BL pour l’envoi.
Un énorme merci pour votre temps et votre aide. Ca me donne de nouvelles pistes à explorer.
Qu'avez-vous voulu écrire dans cette phrase ?
L'autre problème plus important, c'est que dans la colonne G Unit Price, il y a une formule et des 0yens aparaissent. Et il faudrait que la case reste vide.
Ca n'a pas l'air d'être systématique, je viens d'essayer mon code ce matin sur un autre fichier excel et ça n'apparaît pas.
Je suppose que le Bon de commande (qui est le fichier de base d'où découleront tous les autres documents telles les PI et les factures) ne devait pas être le même.
Bref, dans la colonne G, au niveau du tableau où sont indiqués les Unit Price, au niveau des lignes vides un 0yens apparaît.
Par exemple en G38. Alors qu'il n'y a aucun produit cité, un prix de 0yens apparaît car il y a une formule qui dépend des données dans B et C38 qui ne contiennent rien.
Je mets une image, c'est beaucoup plus parlant
Sub Hachioji()
' Hachiojiyou Macro
' Turn PI into Hachiojiyou
Dim I As Integer
Dim ShHqch As Worksheet
Dim AireQty As Range, AireUnit As Range
On Error GoTo Fin
With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
End With
Sheets("PI-B").Copy Before:=Sheets(Sheets.Count)
Set ShHqch = ActiveSheet
With ShHqch
.Name = "Hqchiojiyou"
.Range("J5:K5").Value = Format(Now, "YYYY/MM/DD")
.Range("H26").Value = "Hachiojinominnasama otsukaresamadesu?"
.Range("H27").Value = "()noshinki o-da- desu?"
.Range("H28").Value = "konpou wo onegaishimase?"
With .Range("H26:H29").Font
.Name = "Arial"
.Size = 18
.ThemeColor = xlThemeColorLight1
.TintAndShade = 0
End With
.ListObjects(1).Name = "t_Commande2"
Set AireQty = Range("t_Commande2[QTY]")
Set AireUnit = Range("t_Commande2[UNIT]")
Range(AireQty, AireQty.Offset(0, 4)).Font.Size = 22
For I = 1 To AireQty.Count
If AireQty(I).Value = "" Then AireUnit(I) = ""
Next I
End With
GoTo Fin
Fin:
With Application
.ScreenUpdating = True
.Calculation = xlCalculationAutomatic
End With
Set ShHqch = Nothing: Set AireQty = Nothing: Set AireUnit = Nothing
End SubBonjour
Désolé de répondre aussi tardivement.
J'ai fait plusieurs essais et rien.... Donc je suppose que vous avez dû travailler sur une base que vous avez restructuré en amont.
De plus, comme je le disais, cette fois la feuille s'appelle PI-B mais ça pourrait tout aussi bien être PI-A, PI-C etc... en fonction du nombre de changements effectués dans la commande. Ce point ne semble pas trop difficile à changer, je suppose qu'avec un Worksheet(1) ou ActiveSheet ça irait.
En tout cas un grand merci pour votre temps et votre aide.
J'ai fait plusieurs essais et rien.... Donc je suppose que vous avez dû travailler sur une base que vous avez restructuré en amont.
Vous ne dites pas sur quoi vous avez fait votre essai. J'ai refait l'essai sur le fichier que je vous ai envoyé et cela fonctionne parfaitement. Vous n'avez sans doute pas pris en compte le tableau structuré dans vos essais.