Code renvoi à la ligne sous VBA Excel [Résolu/Fermé]

Messages postés
224
Date d'inscription
samedi 4 juillet 2009
Statut
Membre
Dernière intervention
25 juillet 2016
- - Dernière réponse :  arianinou - 18 mars 2015 à 17:29
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"



Afficher la suite 

15 réponses

Meilleure réponse
approuvée par Jean-François Pillou le 17 déc. 2018
Messages postés
16983
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
18 novembre 2019
3679
23
Merci
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"

Dire « Merci » 23

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 70052 internautes nous ont dit merci ce mois-ci

Nouamane94
Messages postés
2
Date d'inscription
samedi 14 février 2015
Statut
Membre
Dernière intervention
15 mars 2015
-
Merci Mike :)
Messages postés
224
Date d'inscription
samedi 4 juillet 2009
Statut
Membre
Dernière intervention
25 juillet 2016
22
17
Merci
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
Mytå
Messages postés
2995
Date d'inscription
mardi 20 janvier 2009
Statut
Contributeur
Dernière intervention
20 décembre 2016
716 -
Re le forum

Pour mettre le texte de la deuxième ligne en gras et caractère 18
Sub 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
Messages postés
224
Date d'inscription
samedi 4 juillet 2009
Statut
Membre
Dernière intervention
25 juillet 2016
22
1
Merci
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
Messages postés
16983
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
18 novembre 2019
3679
1
Merci
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
Messages postés
2995
Date d'inscription
mardi 20 janvier 2009
Statut
Contributeur
Dernière intervention
20 décembre 2016
716
0
Merci
Salut le forum

Tu peux toujours jouer sur le Zoom de la page
    With 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)]
lecrol
Messages postés
224
Date d'inscription
samedi 4 juillet 2009
Statut
Membre
Dernière intervention
25 juillet 2016
22 -
Merci Myta
Grace à Ccm81 et son chr(10), j'ai résolu mon problème
Merci encore
Roland
Messages postés
16983
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
18 novembre 2019
3679
0
Merci
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"
Messages postés
9175
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
11 novembre 2019
1659
0
Merci
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
Messages postés
224
Date d'inscription
samedi 4 juillet 2009
Statut
Membre
Dernière intervention
25 juillet 2016
22
0
Merci
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
Messages postés
224
Date d'inscription
samedi 4 juillet 2009
Statut
Membre
Dernière intervention
25 juillet 2016
22
0
Merci
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
lecrol
Messages postés
224
Date d'inscription
samedi 4 juillet 2009
Statut
Membre
Dernière intervention
25 juillet 2016
22 -
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
Messages postés
16983
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
18 novembre 2019
3679
-1
Merci
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
Messages postés
9175
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
11 novembre 2019
1659
-1
Merci
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
Messages postés
16983
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
18 novembre 2019
3679
-1
Merci
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.
ccm81
Messages postés
9175
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
11 novembre 2019
1659 -
> mike-31
là, ça commence à ressembler a quelque chose ... bravo pour le fun !
bonne journée
Messages postés
16983
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
18 novembre 2019
3679
-1
Merci
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.
Messages postés
16983
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
18 novembre 2019
3679
-1
Merci
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.
Messages postés
9175
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
11 novembre 2019
1659
-2
Merci
bonjour
je pense qu'un chr(10) devrait faire l'affaire
bonne suite
Merci à vous tous !