Retour à la ligne en VBA [Résolu/Fermé]

Signaler
-
 lefort32 -
Bonjour,

Je suis un grand débutant en VB, dont j'ai appris les grands principes de base. Je souhaiterais créer une fonction pour effectuer un retour à ligne automatique à chaque apparition d'un caractère spécifique, en l'occurence "/" dans une cellule.

C'est à dire qu'à chaque fois qu'un / se trouve dans une cellule, j'aimerais que soit effectuer un retour à la ligne.

Je vois à peu près comment utiliser Chr(10) ainsi que la fonction Replace, mais pas comment combiner les deux. Cela est-il possible?

Merci d'avance pour toute suggestion!

3 réponses


Bonjour lefort32,

Pour la fonction, je te propose ce code VBA :


Option Explicit

Function SlashCar10(chn As String) As String
  SlashCar10 = WorksheetFunction.Substitute(chn, "/", Chr$(10))
End Function


J'ai testé ce code, et il marche impeccable : si tu as un texte en A1
avec des slashs ( / ), et que tu mets en B1 : =SlashCar10(A1)
le texte en B1 sera bien celui de A1 avec des Chr$(10) au lieu
de slashs ; CEPENDANT, ÇA NE SUFFIT PAS ! En effet, ça ne
pourra marcher QUE SI le format de la cellule DESTINATRICE
est avec : ☑ Renvoyer à la ligne automatiquement (voir fenêtre
« Format de cellule », onglet « Alignement », cadre « Contrôle
du texte »).

Il y a bien cette instruction VBA qui le fait automatiquement :
ActiveCell.WrapText = True
MAIS cette instruction, qui modifie une cellule, ne peut être
exécutée QUE dans une Sub, et PAS dans une Function !

C'est donc impossible de faire mieux, sauf en ABANDONNANT
l'idée d'utiliser une fonction.

Mais si tu peux sans problème mettre par avance le format adéquat
dans toutes les cellules destinatrices, alors le problème sera réglé !

Si oui, merci de l'indiquer, afin que le sujet puisse être mis en résolu.

Cordialement.  😊
 
Messages postés
12259
Date d'inscription
lundi 9 juin 2008
Statut
Non membre
Dernière intervention
19 septembre 2020
691
Je pense pas de soucis pour faire wraptext dans une fonction. Exemple :
Function test()
Columns("A:A").WrapText = True
End Function
Utilisateur anonyme >
Messages postés
12259
Date d'inscription
lundi 9 juin 2008
Statut
Non membre
Dernière intervention
19 septembre 2020

Bonjour yg_be,
Si tu as raison, alors bravo !!! Mais moi, ça a refusé
de le faire pour une seule cellule ! Cdlt.  😊
Messages postés
8185
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
12 septembre 2020
1 467
Bonjour

« Je souhaiterais créer une fonction pour effectuer un retour à ligne automatique à chaque apparition d'un caractère spécifique, en l'occurence "/" dans une cellule »
Un exemple de fonction :
Option Private Module
Option Explicit
Public Function RetourAlaLigneSiSlash(rng As Range) As String
  If rng.Count > 1 Then
    Err.Raise 5
    Exit Function
  Else
    RetourAlaLigneSiSlash = Replace(rng.Formula, "/", Chr(10))
  End If
End Function

Exemple d'utilisation, si en A1 il y a :
essai/de retour à la ligne

En B1, la formule :
=RetourAlaLigneSiSlash(A1)

donne pour résultat :
essai
de retour à la ligne

à condition de cocher retour à la ligne automatique pour cette cellule.

Cependant, il semblerait que tu ne cherches pas une fonction (à utiliser dans une autre cellule pour obtenir le résultat escompté) mais une procédure qui agit sur la cellule : « ... à chaque fois qu'un / se trouve dans une cellule, j'aimerais que soit effectuer un retour à la ligne. »

Dans ce cas il y a deux possibilité :
- la modification est effectuée sur ordre de l'utilisateur, auquel cas il faut exécuter une procédure sur commande (bouton ou autre).
- la modification est effectuée automatique à la saisie des données dans la cellule, auquel cas il faut utiliser l'évènement Change de la feuille concernée pour donner l'ordre d'exécution de la procédure sus citée.

La procédure :
Option Private Module
Option Explicit
Public Sub RemplacerSlashParRetourAlaLigne(rng As Range)
Dim cel As Range
  If rng.Count > 1 Then
    For Each cel In rng.Cells
      cel.Formula = Replace(cel.Formula, "/", Chr(10))
    Next cel
  Else
    rng.Formula = Replace(rng.Formula, "/", Chr(10))
  End If
End Sub

Et pour l'exécution automatique à la saisie, dans le module de feuille :
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
 Call RemplacerSlashParRetourAlaLigne(Target)
End Sub

Merci beaucoup pour vos réponses détaillées! La solution la plus simple pour moi est celle de Patrice33740. Cependant, s'il s'agit d'une Macro toute simple, ce qui est mon cas, j'ai découvert qu'il est aussi possible de créer une formule simple de remplacement où / devient ALT010, ce qui correspond aussi au retour à la ligne.