Macro "renvoi à la ligne automatiquement"

Bonjour à tous,

J'aurais une petite question pour perfectionner un fichier excel que j'ai créé pour mon travail : comment rédiger la macro "renvoi à la ligne automatiquement" sur des cellules fusionnées.

Sur une simple cellule, c'est très simple ... mais n'arrivant déjà pas à le faire sans macro, je ne vois pas comment rédiger ma macro.

Merci de votre aide précieuse.

Bonne journée.

Bonjour,

Donne plus de précisions dans ta demande.

Tu veux aller de quelle cellule fusionnée vers quelle autre cellule ?

Donne aussi le nom de ta feuille concernée par cela.

A te lire

Dan

Cellules fusionnées concernées : B39 à P39

Nom de la feuille : MED_RAR_non_adhérent

Mais je peux nommer la plage de cellules fusionnées.

L'idée en fait serait que cette macro, si c'est possible, marche sur toute la feuille dans ce cas car j'ai plusieurs endroits concernés et j'aurais fait autant de macros qu'il faut.

Merci pour ton aide.

Re,

Ok mais tu dois aller de quelle cellule vers quelle autre.

Ex : cellule fusionnée B39-B40 - > cellule suivante serait B41 ....

A te lire

Dan

Et bien ma cellule fusionnée englobe B39 à P39 comme précisé dans mon précédent post ... ... oui je sais c'est une GRANDEEEEEEE cellule ...

Merci pour ton aide.

Re,

Sache que via menu/outils/option -> onglet modification, tu peux déterminer pour toute ta feuille vers où tu veux aller après validation d'une donnée.

Sinon, mets en place cette macro :

  • ALT + F11 pour aller dans VBA
  • CTRL + R pour afficher VBA project (à gauche)
  • Double clique sur la feuille MED_RAR_non_adhérent
  • A droite mets cette macro :
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 2 Then
Cells(Target.Row + 1, 2).Select
End If
End Sub

Dès que tu compléteras dans la colonne B, la macro s'exécuteras pour te faire passer à la ligne suivante.

Si tu dois faire cela à d'autres endroits que la colonne B, précise le.

A te lire

Dan

Euh, j'ai bien fait tout ce qui tu me dis mais cela ne fait rien de spécial ...

En surfant sur le net, j'ai trouvé cette macro qui marche mais je ne comprend pas tout et ne sais pas comment lui dire de le faire automatiquement sur une plage nommée par exemple :

Sub AutoFitMergedCellRowHeight()

Dim CurrentRowHeight As Single, MergedCellRgWidth As Single
Dim CurrCell As Range
Dim ActiveCellWidth As Single, PossNewRowHeight As Single

 If ActiveCell.MergeCells Then
   With ActiveCell.MergeArea
     .WrapText = True 'enclenche le renvoi à la ligne automatique (modif fs)
     If .Rows.Count = 1 Then 'And .WrapText = True Then
       Application.ScreenUpdating = False
       CurrentRowHeight = .RowHeight
       ActiveCellWidth = ActiveCell.ColumnWidth
       For Each CurrCell In Selection
           MergedCellRgWidth = CurrCell.ColumnWidth + MergedCellRgWidth
       Next
      .MergeCells = False
      .Cells(1).ColumnWidth = MergedCellRgWidth
      .EntireRow.AutoFit
       PossNewRowHeight = .RowHeight
      .Cells(1).ColumnWidth = ActiveCellWidth
      .MergeCells = True
      .RowHeight = IIf(CurrentRowHeight > PossNewRowHeight, CurrentRowHeight, PossNewRowHeight)
     End If
   End With
 End If

End Sub

En fait, mon idée est de faire une macro qui dit : tu me cherches toutes les cellules fusionnées sur une feuille nommée XXX, et tu me fais le renvoi à la ligne automatique pour toutes.

Une idée en partant de ce code qui marche

Nad-Dan a écrit :

Re,

Sache que via menu/outils/option -> onglet modification, tu peux déterminer pour toute ta feuille vers où tu veux aller après validation d'une donnée.

Sinon, mets en place cette macro :

  • ALT + F11 pour aller dans VBA
  • CTRL + R pour afficher VBA project (à gauche)
  • Double clique sur la feuille MED_RAR_non_adhérent
  • A droite mets cette macro :
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 2 Then
Cells(Target.Row + 1, 2).Select
End If
End Sub

Dès que tu compléteras dans la colonne B, la macro s'exécuteras pour te faire passer à la ligne suivante.

Si tu dois faire cela à d'autres endroits que la colonne B, précise le.

A te lire

Dan

Je viens de relire le topic et réaliser que tu n'as pas compris ma demande en fait !

Je ne souhaite pas dire qu'après avoir écrit dans telle cellule je passe à la cellule suivante à droite, ou à gauche ...

Je souhaite dire que j'ai plein de cellules fusionnées sur une feuille excel, que je veux qu'il me les trouve toutes et me fasse un "renvoi à la ligne automatique" sur chacune puisque le texte dedans déborde.

C'est mieux ?!?

Merci.

Re,

Effectivement je comprends mieux ton souci.

Pourquoi dès lors ne pas utiliser l'option excel existante.

En sélectionnant toute ta feuille, tu vas dans menu/format/cellule et sous l'onglet "alignement", tu coches la case "renvoi à la ligne automatiquement".

C'est sûr cela agira sur toutes les cellules mais c'est plus simple et efficace.

A te lire

Dan

Nad-Dan a écrit :

Re,

Effectivement je comprends mieux ton souci.

Pourquoi dès lors ne pas utiliser l'option excel existante.

En sélectionnant toute ta feuille, tu vas dans menu/format/cellule et sous l'onglet "alignement", tu coches la case "renvoi à la ligne automatiquement".

C'est sûr cela agira sur toutes les cellules mais c'est plus simple et efficace.

A te lire

Dan

Parce que cela ne fonctionne pas sur les cellules fusionnées, je suis donc obligée de passer par une macro ...

Re,

effectivement et là, je viens d'apprendre quelque chose.

Je regarde cela en espérant te trouver une solution combinée à la macro que tu as trouvée.

A bientôt

Dan

Nad-Dan a écrit :

Re,

effectivement et là, je viens d'apprendre quelque chose.

Je regarde cela en espérant te trouver une solution combinée à la macro que tu as trouvée.

A bientôt

Dan

Merci pour ton aide qui m'est plus que précieuse !

Bonsoir, couettecouette et Nad-Dan,

En reprenant le code fourni précédemment, et en le modifiant quelque peu pour parcourir une zone à déterminer

tu peux essayer ceci :

Sub AutoFitMergedCellRowHeight()

Dim CurrentRowHeight As Single, MergedCellRgWidth As Single

Dim CurrCell As Range, Cel As Range

Dim ActiveCellWidth As Single, PossNewRowHeight As Single

For Each Cel In Range("A1:A5") ' <--- Zone à déterminer

If Cel.MergeCells Then

Cel.Select

MergedCellRgWidth = 0: PossNewRowHeight = 0

With ActiveCell.MergeArea

.WrapText = True 'enclenche le renvoi à la ligne automatique (modif fs)

If .Rows.Count = 1 Then 'And .WrapText = True Then

Application.ScreenUpdating = False

CurrentRowHeight = .RowHeight

ActiveCellWidth = ActiveCell.ColumnWidth

For Each CurrCell In Selection

MergedCellRgWidth = CurrCell.ColumnWidth + MergedCellRgWidth

Next

.MergeCells = False

.Cells(Cel.Row, Cel.Column).ColumnWidth = MergedCellRgWidth

.EntireRow.AutoFit

PossNewRowHeight = .RowHeight

.Cells(Cel.Row, Cel.Column).ColumnWidth = ActiveCellWidth

.MergeCells = True

.RowHeight = IIf(CurrentRowHeight > PossNewRowHeight, CurrentRowHeight, PossNewRowHeight)

End If

End With

End If

Next Cel

End Sub

Bonsoir,

Couettecouette, cette macro que tu as trouvée a été réalisée par ---> Jim Rech, mpep

Il te reste à essayer ce que Felix propose.

Bon travail

Dan

Alors le code de Félix marche niquel, sachant que j'ai mis comme zone à déterminer A1:Z500 mais :

  • est-il possible tout d'abord de déterminer une feuille entière directement, qui serait nommée bien sûr
  • il y a un problème malgré tout : cela m'ajuste la hauteur de ligne mais insère des lignes blanches avant mon texte donc ligne avec hauteur importante et du blanc en haut

Une solution ?

Merci à tous.

re,

A la palce de

For Each Cel In Range("A1:A5")

mets

For Each Cel In ActiveSheet.UsedRange

A te lire

dan

Re-,

en effectuant ta recherche sur Toute la zone, il peut y aoir des bogues, sachant que :

-exemple : cellule D12, E12, F12, G12 : fusionnées ---> donc pas besoin de tester E, F, G, tu as déjà la bonne hauteur avec D12

Donc, les zones à déterminer, faut voir la structure de ton fichier, est-ce qu'il faut Tout vérifier, ou tes cellules fusionnées sont dans une seule et même colonne?

PS : Pour info, les cellules prises en compte dans un ensemble de cellules fusionnées sont les cellules les plus à gauche

Merci Nad-Dan !!!

J'ai toujours le problème des blancs avant ... alors je précise que ma feuille excel est tel un formulaire avec des cellules fusionnées partout et de manière aléatoire malheureusement ... une solution ?

Re,

Avant

.EntireRow.AutoFit

mets

 .VerticalAlignment = xlCenter

N'oublie pas le point devant cette instruction.

Cela améliore un peu je crois.

A te lire

Dan

On tient le bon bout car le résultat reste ce que je veux ... mais maintenant, j'ai un grand blanc au-dessus et au-dessous !!!

Donc sans doute le fait que les cellules suivantes la première cellule d'un groupe fusionné sont vérifiées donc ça multiplie d'autant l'espace.

Rechercher des sujets similaires à "macro renvoi ligne automatiquement"