Bonjour
je tiens à remercier ce site qui m'a initié aux VBA.
J'aime bien partagé un sujet que j'Avais entamé il y a quelques jours. En effet, je voulais que une fois une cellule d'une plage est non vide sa largeur devient 18 et lorsqu'elle est vide la largeur rebient à 8. Autofit n'est pas esthetique car pour une entrée d'un caractere la largeur est tres petite. En plus le code de depart prenait seulement la taille 8, alors que je voulais que une fois la cellule est non vide la largeur est 18, une fois vide elle revient à 8.
j'ai developpé deux codes: un prenait seulement 18 sans revenir à 8, acceptable dans certaine mesure, et l'autre prenait seulement 8. le troisiement code qui respectait mes conditions je l'ai debogué par hasard en mettant un exit sub au milieu du code et ca marche en ajoutant un wraptext et le centrage.
voici le code qui ne revient pas à 8 et prend sedulement la condition largeur 18:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rg As Range
Dim Rg1 As Range
Set rg = Range("a1:h10")
Set Rg1 = Range("i1:z10")
For Each c In rg
If c.Value <> "" Then
With Range("a1:h10")
c.Font.Name = "calibri"
c.ColumnWidth = 18
c.HorizontalAlignment = xlCenter
c.VerticalAlignment = xlCenter
c.WrapText = True
End With
End If
Next
For Each c In Rg1
Exit Sub
Next
End Sub
alors qu'on travaillant sur un petit exemple le programme est complet: ca prend le format que je veux une fois la cellule est non vide et ca revient à la largeur 8 une fois vide:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range
Set rg = Range("a1:c5")
For Each c In rg
If c.Value <> "" Then
c.ColumnWidth = 18
c.WrapText = True
c.HorizontalAlignment = xlCenter
c.VerticalAlignment = xlCenter
Exit Sub
ElseIf c.Value = "" Then
c.ColumnWidth = 8
c.WrapText = True
c.HorizontalAlignment = xlCenter
c.VerticalAlignment = xlCenter
End If
Next
End Sub
ca pourrait interesser ceux qui ont besoin