Code renvoi à la ligne sous VBA Excel
Résolu
lecrol
Messages postés
224
Date d'inscription
Statut
Membre
Dernière intervention
-
arianinou -
arianinou -
Bonjour,
J'édite sous VBA Excel des étiquettes; Pour chaque étiquette, j'ai toujours 2 lignes ou presque, selon la longueur du libellé que j'imprime et du code produit qui vient juste après.
Je voudrais pouvoir "forcer" le renvoi à la ligne, de façon qu'il se fasse toujours au même endroit de ma chaine de caractères. Mais je ne sais pas quel code il faut placer pour cela dans ma chaîne de caractères.
Qui connait la soluce de ce problème ?
Un grand merci d'avance.
Roland
Exemple: je veux imprimer sur mon étiquette "produit machin chose B02465"
Mais je veux obtenir le tout sur deux lignes
"produit machin chose"
"B02465"
Bien sûr, ma ligne excel est pamétrée "renvoyer à la ligne automatiquement"
J'édite sous VBA Excel des étiquettes; Pour chaque étiquette, j'ai toujours 2 lignes ou presque, selon la longueur du libellé que j'imprime et du code produit qui vient juste après.
Je voudrais pouvoir "forcer" le renvoi à la ligne, de façon qu'il se fasse toujours au même endroit de ma chaine de caractères. Mais je ne sais pas quel code il faut placer pour cela dans ma chaîne de caractères.
Qui connait la soluce de ce problème ?
Un grand merci d'avance.
Roland
Exemple: je veux imprimer sur mon étiquette "produit machin chose B02465"
Mais je veux obtenir le tout sur deux lignes
"produit machin chose"
"B02465"
Bien sûr, ma ligne excel est pamétrée "renvoyer à la ligne automatiquement"
15 réponses
-
Salut,
exemple si en A2 tu veux écrire coucou sur une ligne et qui es ce sur l'autre
[A2] = "coucou" & vbCrLf & "qui es ce"
-
Un gros merci les cheffos spécialistes.
Mais ma demande était trop "pinailleuse". Je voulais en effet changer de police mais dans la même chaine de caractères envoyés depuis VBA dans une cellule Excel (cellule étiquette).
Je voulais écrire mon étiquette de cette façon
Libellé du produit
Prix
Avec le Chr(10), je sais placer mon prix en 2e ligne de la même cellule
Et là, emmerdeur que je suis, je voulais que mon prix s'imprime en gras et en police 12 dans chaque cellule-étiquette, sur cette 2e ligne "forcée" par un :
range("cellule").value = "libelle du produit" & chr(10) & prix
Mais je reconnais que c'est un luxe de présentaion et que ça n'a rien d'indispensable
Pour l'instant, je me bats avec un formulaire et un sous formulaire access, pour saisir ensuite ces mêmes étiquettes codes barres
Merci encore à vous, les chefs
Roland-
Re le forum
Pour mettre le texte de la deuxième ligne en gras et caractère 18Sub Etiquette() Dim Prix As Currency Dim Libelle As String Libelle = "Boite de conserve" Prix = 10.56 With Range("A1") .Value = Libelle & Chr(10) & Prix With .Characters(Start:=Len(Libelle) + 2).Font .Size = 18 .Bold = True End With End With End Sub
Mytå
modification : Erreur lors de la recopie du code
-
-
Merci les deux chefs !
J'ai essayé le chr(10) et ça marche génial
Si j'ose abuser, sauriez-vous si l'on peut aussi "forcer" la taille ou la police des caractères ainsi imprimés? toujours sous VBA of course.
C'est la question à "2000 héros" (Lol)
Amicalement
Roland -
Re,
non n'exagérons ccm, je ne suis pas spécialiste, bidouilleur seulement mais merci quand même.
Quelques explications sur les retours lignes
vbCr équivalent à Chr(13) Caractère de saut de paragraphe
vbLf équivalent à Chr(10) Caractère de saut de ligne
Combinaison des caractères de retour chariot et de saut de ligne
vbCrLf équivalent à Chr(13) + Chr(10)
Si on regroupe les données, en A on a des infos du type "produit machin chose B02465"
crée un bouton avec la boite contrôle, si c'est le premier colle ce code dans les propriétés feuille (clic droit sur l'onglet de feuille/Visualiser le code)
le retour ligne se fera 2 caractères avant la valeur numérique BO2465
Private Sub CommandButton1_Click()
Dim Debut As Byte
Dim Cell As Range
For Each Cell In Range("A1:A" & Range("A65536").End(xlUp).Row)
Debut = InStr(1, Cell, " B")
If Not Debut = 0 Then
Cell = Left(Cell, Debut) & vbLf & Right(Cell, Len(Cell) - Debut) ' la valeur de remplacement est dans la cellule E1( à adapter)
Cell.Font.Size = 18
End If
Next Cell
End Sub
si tu as besoin d'un petit montage fais signe -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Salut le forum
Tu peux toujours jouer sur le Zoom de la pageWith ActiveSheet.PageSetup .Zoom = 200 End With ActiveWindow.SelectedSheets.PrintOut
Mytå
--
Merci de donner suite à votre question, nous ne sommes pas des robots...
L'urgent est fait, l'impossible est en cours et pour les miracles; prévoir un délai.
Versions installées [MsProject 2003(FR), Excel 2003-2007(FR)] -
Re,
Il n'est pas difficile de faire des retours lignes, mettre des parties de valeur en gras ou en couleur etc ...
Le plus difficile est de comprendre la demande surtout lorsque les informations nous arrivent fragmentées et de façon changeante.
Pour ma part, ce que je ne comprends pas c'est cette dernière info
range("cellule").value = "libelle du produit" & chr(10) & prix
Bien différente de la demande initiale
"produit machin chose B02465"
Peut on avoir de façon claire le détail de la demande, par cette dernière phrase j'en déduis que le libellé est dans une colonne le prix dans une autre et que l'on concaténise tout cela dans une cellule sur deux lignes sur cette 2e ligne "forcée" par un
La aussi que faut il comprendre par "forcée" -
re a tous
bon, pour repondre au post 7 de lecol il ne reste plus qu'a partir à la pêche dans les codes de Mike-31 et de Myta
et par exemple
.Value = Libelle & Chr(10) & Prix With .Characters(Start:=Len(Libelle) + 2).Font .Size = 12 .Bold = True End With
appliqué à chaque cellule etiquette devrait faire l'affaire
bonne journée -
Pour ma part, ce que je ne comprends pas c'est cette dernière info
range("cellule").value = "libelle du produit" & chr(10) & prix
Bien différente de la demande initiale
"produit machin chose B02465"
Mike-31, merci de ta réponse
La ligne :
range("cellule").value = "libelle du produit" & chr(10) & prix c'est mon écriture VBA pour remplir ma cellule Excel
Sa différence avec la ligne du post précédent, c'est que ici, dans ce second exemple, le prix est au lieu du code produit
Il s'agit, tout simplement, d'un seul et même texte ( une chaîne de caractètres) que j'envoie depsui VBA sur une eeule cellume Excel
Je veux que le texte se place sur 2 lignes de cette même cellule, ceci par l'option "renvoi automatique à la ligne" d'Excel
Et ça, je l'obtiens très bien avec le Chr(10) que je place dans ma chaîne de caractères, sous VBA
C'est ça que j'appelle "forcer" le renvoi à la ligne
Merci encore
Roland -
Mille excuses, Mike 31.
Pardonne-moi mais j'ai complètement oublié de mettre en résolu ma question !
En fait mon renvoi à la ligne se règle tout à fait par ce CHR(10).
Quant à mettre deux polices différentes pour une même chaine de caractères imprimée dans une seule et même cellule Excel, chaîne de caractères envoyée sous VBA, je me dis que c'est sans doute abusé ou exagéré. Et du coup, j'y renonce pour le moment
Sur ce site, grâce à vous, je trouve déjà tellement de coups de mains super précieux que je ne veux pas abuser.
Il faut dire que, en ce moment, je suis en plein développement pour ma fille. Avec Access et VBA j'ai plusieurs bouts de programmes sur le feu. Alors, je tempère mes demandes..
Amicalement
Roland-
Triple naze que je suis !! J'oublie de dire que j'ai testé, à part, la soluce proposée par Myta. Et que ça me semble bien marcher 5 sur 5. Simplement, je ne l'ai pas encore intégrée dans mon logiciel étiquettes codes barres ( pour l'instant...)
Amitié à Myta, Ccm81, Mike-31 et les autres Bravo et merci à tous
Et ne craignez rien.... je reviendrai ( Lol ) !
Roland
-
-
Re,
exemple por tester le colonne A de A1 à la dernière cellule en A non vide
si les cellules ne sont pas vide elles se mettent en gras (Bold = True
) et en police 18
Sub test()
Dim c As Range
For Each c In Range("A1:A" & Range("A65536").End(xlUp).Row)
If c <> "" Then
With c.Font
.Bold = True
.Size = 18
End With
End If
Next c
End Sub
-
re
je ne sais pas si on peut agir uniquement sur la taille en sortie, j'essaierai quelque chose de ce genre, en supposant que les données à imprimer proviennent d'une feuille,
- changer la taille
- imprimer
- revenir a la taille initale
Private Sub CommandButton1_Click() Dim s As Long s = Range("A2").Font.Size Range("A2").Font.Size = 2 * s 'par exemple MsgBox ("on imprime") ' tu lances ton code d'impression Range("a2").Font.Size = s End Sub
mais le specialiste qu'est Mike-31 doit certainement avoir mieux
bonne suite -
Re,
La demande est pertinente, et pour le fun en supposant que les données sont en colonne A formatées suivant la demande initiale, (référence et prix) exemple produit machin chose 2465,30 ce code permet de modifier les données sur place en plaçant un retour ligne avant le prix quelque soit la longueur de la chaine, en colorisant en rouge et en gras le retour ligne. Si après le prix se trouve l'unité monétaire ex produit machin chose 2465,30 € il convient d'apporter une légére modif au code
Private Sub CommandButton1_Click()
Dim tabLignes() As Long, i As Long, j As Long, tmp As Long
Dim Debut As Byte
Dim Cell As Range
Dim tmpStr() As String
Application.ScreenUpdating = False
For Each Cell In Range("A1:A" & Range("A65536").End(xlUp).Row)
Debut = InStr(1, Cell, " " & StrReverse(Split(StrReverse(Cell.Text), Chr(32))(0)))
If Not Debut = 0 Then
Cell = Left(Cell, Debut) & Chr(10) & Right(Cell, Len(Cell) - Debut)
End If
tmpStr = Split(Cell.Text, Chr(10))
ReDim tabLignes(1 To UBound(tmpStr) + 1, 1 To 2)
For i = LBound(tmpStr) To UBound(tmpStr)
tmp = 0
For j = LBound(tmpStr) To i - 1
tmp = tmp + Len(tmpStr(j))
Next j
tabLignes(i + 1, 1) = tmp + 1 + i
tabLignes(i + 1, 2) = Len(tmpStr(i))
Next i
Cell.Characters(tabLignes(2, 1), tabLignes(2, 2)).Font.ColorIndex = 3
Cell.Characters(tabLignes(2, 1), tabLignes(2, 2)).Font.Bold = True
Next Cell
Application.ScreenUpdating = True
[A1].Select
End Sub
A+
Mike-31
Une période d'échec est un moment rêvé pour semer les graines du savoir. -
Re,
Dommage que Lecrol ne suive pas la discussion soit pour adapter ou perfectionner le code à ces besoins ou tout simplement pour mettre le statut en résolu afin que cette discussion serve de référence.
-
Re,
Comme je l'ai déjà dit plus haut, cette discussion est pertinente à suivre quand aux retours lignes j'ai donné leurs significations exemple pour un retour ligne soit on saisi Chr(10) ce qui fait 7 octets soit vbhf 4 octets le résultat est identique sauf que l'intitulé est moins lourd 3 octets de moins multiplié par X fois cela peut alléger sensiblement un fichier
vbCr équivalent à Chr(13) Caractère de saut de paragraphe
vbLf équivalent à Chr(10) Caractère de saut de ligne
Combinaison des caractères de retour chariot et de saut de ligne
vbCrLf équivalent à Chr(13) + Chr(10)
Il est tout à fait possible de donner par ligne obtenue une mise en forme différente, couleur de police, gras, taille de police type de police etc ...
Reste à connaitre exactement le contenu des cellules, ou le retour ligne doit se faire dans la chaine et combien de retour ligne on souhaite, savoir la mise en forme souhaitée de chaque ligne
D'ailleur le code dans mon avant dernier post coupe la chaine sur deux lignes met en gars et en rouge la deuxième ligne
mais on pourait pousser le code plus loin en faisant plusieurs retours lignes dans la cellule et en donnant un format à chaque ligne, ainsi que limiter le nombre de ligne de sorte que si on clique plusieurs fois sur le bouton le code se lance qu'un seule fois
A suivre !
A+
Mike-31
Une période d'échec est un moment rêvé pour semer les graines du savoir. -
bonjour
je pense qu'un chr(10) devrait faire l'affaire
bonne suite