casse tête de dimension de cellules fusionnées ! sos
3 réponses
Philippe
Bonjour,
J'ai des cellules fusionnées dans lesquelles des utilisateurs entrent du texte
y compris des chr(10).
Dans une cellule normale si on a "alignement renvoyer à la ligne
automatiquement",
la hauteur de ligne se redimensionne pour afficher tout le contenu de la
cellule.
Ce n'est pas le cas avec des cellules fusionnées
On m'a suggéré (merci à lui de toutes façons) de placer ça dans le code de
la feuille :
Private Sub Worksheet_Change(ByVal Target As Range)
Target.WrapText = True
End Sub
Mais ça ne fonctionne pas pour la même raison.
J'ai besoin de redimensionner ces hauteurs de ligne à la validation de la
cellule (ou en cours de frappe, mais c'est pas utile).
******** Quelqu'un aurait-il une idée ? ********
J'ai une idée
qui me fait peur parce que je ne sais pas si c'est possible, ou par quel
bout le prendre :
- évaluer la chaine après validation (mais comment lancer ça ?)
- décider que je peux avoir tant de caractères par ligne
- compter le nombre de lignes = nombre de chr(10) + divisions des "lignes"
entre chr(10) par le nombre de caractères... qqch comme ça.
- ensuite, multiplier ma hauteur de ligne type par le nombre de lignes ainsi
calculé
- et enfin changer la hauteur de la ligne concernée
***** Y-a-t-il plus simple ? *****
Si je fais comme indiqué :
Comment récupérer les coordonnées de la cellule responsable du changement ?
Puis je le limiter à certaines cellules de la feuille : ie comment vérifier
que la cellule appartient à un range a8:a12 ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
anonymousA
Je t'ai fait une autre réponse plus complète mais qui ne résoud pas le problème à 100% étant entendu que même à la main, le problème n'est pas résolu. Va voir ton ancien fil.
A+
Je t'ai fait une autre réponse plus complète mais qui ne résoud pas
le problème à 100% étant entendu que même à la main, le problème
n'est pas résolu.
Va voir ton ancien fil.
Je t'ai fait une autre réponse plus complète mais qui ne résoud pas le problème à 100% étant entendu que même à la main, le problème n'est pas résolu. Va voir ton ancien fil.
A+
anonymousA
Pour compléter si tu veux poursuivre dans la voie que tu as indiqué, mais dont je doute qu'elle te ^ène à la solution ( mais ne désespérons pas), pour déterminer la cellule qui a changé, il suffit de récupérer target.address. Pour savoir si target appartient à un range("A1:A8") p.e, il suffit de tester intersect(target,range("A1:A8")) et de vérifier si cette intersection renvoie Nothing.
A+
Pour compléter si tu veux poursuivre dans la voie que tu as indiqué,
mais dont je doute qu'elle te ^ène à la solution ( mais ne
désespérons pas), pour déterminer la cellule qui a changé, il
suffit de récupérer target.address. Pour savoir si target appartient
à un range("A1:A8") p.e, il suffit de tester
intersect(target,range("A1:A8")) et de vérifier si cette intersection
renvoie Nothing.
Pour compléter si tu veux poursuivre dans la voie que tu as indiqué, mais dont je doute qu'elle te ^ène à la solution ( mais ne désespérons pas), pour déterminer la cellule qui a changé, il suffit de récupérer target.address. Pour savoir si target appartient à un range("A1:A8") p.e, il suffit de tester intersect(target,range("A1:A8")) et de vérifier si cette intersection renvoie Nothing.
A+
Daniel
Bonjour. Je n'ai pas vu la seconde solution d'AnonymousA. Regarde le code suivant, valable uniquement pour deux cellules de la même ligne fusionnées :
Private Sub Worksheet_Change(ByVal Target As Range) Dim Col As Single, ligne As Single If Target.MergeCells = False Then Exit Sub With Target .MergeCells = False Col = .ColumnWidth + Target.Offset(0, 1).ColumnWidth .ColumnWidth = Col .WrapText = True ligne = .RowHeight Target.ColumnWidth = Col - Target.Offset(0, 1).ColumnWidth Range(Target, Target.Offset(0, 1)).Merge .RowHeight = ligne End With End Sub
Cordialement. Daniel "Philippe" a écrit dans le message de news:
Bonjour,
J'ai des cellules fusionnées dans lesquelles des utilisateurs entrent du texte y compris des chr(10). Dans une cellule normale si on a "alignement renvoyer à la ligne automatiquement", la hauteur de ligne se redimensionne pour afficher tout le contenu de la cellule.
Ce n'est pas le cas avec des cellules fusionnées
On m'a suggéré (merci à lui de toutes façons) de placer ça dans le code de la feuille : Private Sub Worksheet_Change(ByVal Target As Range) Target.WrapText = True End Sub
Mais ça ne fonctionne pas pour la même raison.
J'ai besoin de redimensionner ces hauteurs de ligne à la validation de la cellule (ou en cours de frappe, mais c'est pas utile).
******** Quelqu'un aurait-il une idée ? ********
J'ai une idée qui me fait peur parce que je ne sais pas si c'est possible, ou par quel bout le prendre : - évaluer la chaine après validation (mais comment lancer ça ?) - décider que je peux avoir tant de caractères par ligne - compter le nombre de lignes = nombre de chr(10) + divisions des "lignes" entre chr(10) par le nombre de caractères... qqch comme ça. - ensuite, multiplier ma hauteur de ligne type par le nombre de lignes ainsi calculé - et enfin changer la hauteur de la ligne concernée
***** Y-a-t-il plus simple ? *****
Si je fais comme indiqué : Comment récupérer les coordonnées de la cellule responsable du changement ? Puis je le limiter à certaines cellules de la feuille : ie comment vérifier que la cellule appartient à un range a8:a12 ?
Merci pour toutes vos suggestions, Philippe
Bonjour.
Je n'ai pas vu la seconde solution d'AnonymousA. Regarde le code suivant,
valable uniquement pour deux cellules de la même ligne fusionnées :
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Col As Single, ligne As Single
If Target.MergeCells = False Then Exit Sub
With Target
.MergeCells = False
Col = .ColumnWidth + Target.Offset(0, 1).ColumnWidth
.ColumnWidth = Col
.WrapText = True
ligne = .RowHeight
Target.ColumnWidth = Col - Target.Offset(0, 1).ColumnWidth
Range(Target, Target.Offset(0, 1)).Merge
.RowHeight = ligne
End With
End Sub
Cordialement.
Daniel
"Philippe" <Philippe@discussions.microsoft.com> a écrit dans le message de
news: 461662AD-F269-4C7C-8BA7-7181C495EB2F@microsoft.com...
Bonjour,
J'ai des cellules fusionnées dans lesquelles des utilisateurs entrent du
texte
y compris des chr(10).
Dans une cellule normale si on a "alignement renvoyer à la ligne
automatiquement",
la hauteur de ligne se redimensionne pour afficher tout le contenu de la
cellule.
Ce n'est pas le cas avec des cellules fusionnées
On m'a suggéré (merci à lui de toutes façons) de placer ça dans le code de
la feuille :
Private Sub Worksheet_Change(ByVal Target As Range)
Target.WrapText = True
End Sub
Mais ça ne fonctionne pas pour la même raison.
J'ai besoin de redimensionner ces hauteurs de ligne à la validation de la
cellule (ou en cours de frappe, mais c'est pas utile).
******** Quelqu'un aurait-il une idée ? ********
J'ai une idée
qui me fait peur parce que je ne sais pas si c'est possible, ou par quel
bout le prendre :
- évaluer la chaine après validation (mais comment lancer ça ?)
- décider que je peux avoir tant de caractères par ligne
- compter le nombre de lignes = nombre de chr(10) + divisions des "lignes"
entre chr(10) par le nombre de caractères... qqch comme ça.
- ensuite, multiplier ma hauteur de ligne type par le nombre de lignes
ainsi
calculé
- et enfin changer la hauteur de la ligne concernée
***** Y-a-t-il plus simple ? *****
Si je fais comme indiqué :
Comment récupérer les coordonnées de la cellule responsable du changement
?
Puis je le limiter à certaines cellules de la feuille : ie comment
vérifier
que la cellule appartient à un range a8:a12 ?
Bonjour. Je n'ai pas vu la seconde solution d'AnonymousA. Regarde le code suivant, valable uniquement pour deux cellules de la même ligne fusionnées :
Private Sub Worksheet_Change(ByVal Target As Range) Dim Col As Single, ligne As Single If Target.MergeCells = False Then Exit Sub With Target .MergeCells = False Col = .ColumnWidth + Target.Offset(0, 1).ColumnWidth .ColumnWidth = Col .WrapText = True ligne = .RowHeight Target.ColumnWidth = Col - Target.Offset(0, 1).ColumnWidth Range(Target, Target.Offset(0, 1)).Merge .RowHeight = ligne End With End Sub
Cordialement. Daniel "Philippe" a écrit dans le message de news:
Bonjour,
J'ai des cellules fusionnées dans lesquelles des utilisateurs entrent du texte y compris des chr(10). Dans une cellule normale si on a "alignement renvoyer à la ligne automatiquement", la hauteur de ligne se redimensionne pour afficher tout le contenu de la cellule.
Ce n'est pas le cas avec des cellules fusionnées
On m'a suggéré (merci à lui de toutes façons) de placer ça dans le code de la feuille : Private Sub Worksheet_Change(ByVal Target As Range) Target.WrapText = True End Sub
Mais ça ne fonctionne pas pour la même raison.
J'ai besoin de redimensionner ces hauteurs de ligne à la validation de la cellule (ou en cours de frappe, mais c'est pas utile).
******** Quelqu'un aurait-il une idée ? ********
J'ai une idée qui me fait peur parce que je ne sais pas si c'est possible, ou par quel bout le prendre : - évaluer la chaine après validation (mais comment lancer ça ?) - décider que je peux avoir tant de caractères par ligne - compter le nombre de lignes = nombre de chr(10) + divisions des "lignes" entre chr(10) par le nombre de caractères... qqch comme ça. - ensuite, multiplier ma hauteur de ligne type par le nombre de lignes ainsi calculé - et enfin changer la hauteur de la ligne concernée
***** Y-a-t-il plus simple ? *****
Si je fais comme indiqué : Comment récupérer les coordonnées de la cellule responsable du changement ? Puis je le limiter à certaines cellules de la feuille : ie comment vérifier que la cellule appartient à un range a8:a12 ?