Philippe LAMACHE
XLDnaute Junior
Bonjour à tous,
Dans mon code (ci-dessous), je détermine ma hauteur de ligne en fonction du nombre de caractères et de la largeur cumulée des colonnes de cellules fusionnées.
Mon souci c'est le code teste toutes les cellules de la fusion et cela peut prendre un peu de temps et est inutile vu que seulement la première cellule de la fusion est renseignée.
D'où ma question en objet : Peut-on ne tester que la première cellule d'une fusion et ignorer les autres ?
Par avance, merci.
Dans mon code (ci-dessous), je détermine ma hauteur de ligne en fonction du nombre de caractères et de la largeur cumulée des colonnes de cellules fusionnées.
VB:
Sub Hauteurs_Lignes()
Feuil1.Activate
Art = "Calorifuge à démonter"
Div = 0.95
Mult = 18
With ActiveSheet.Range("A:D")
Set Cellule = .Find(Art, LookAt:=xlPart)
Cellule.Select
Selection.Offset(0, 2).resize(10, 1).Select
Range(ActiveCell, ActiveCell.Offset(20, 0).End(xlUp)).Select
End With
For Each c In Selection
c.Select
c.Value = UCase(c.Value)
MonAD = c.Address(0, 0)
Lig = ActiveCell.Row - 1
larcol = Cells(Lig, 3).ColumnWidth + Cells(Lig, 4).ColumnWidth
nbcarlgn = Application.WorksheetFunction.RoundDown(larcol / Div, 0)
nbcar = Len(ActiveCell)
nblgn = Application.WorksheetFunction.RoundUp(nbcar / nbcarlgn, 0)
ActiveCell.Offset(0, 13).Value = nblgn * Mult
Autre:
Next
With ActiveSheet.Range("E:N")
Set Cellule = .Find(Art, LookAt:=xlPart)
Cellule.Select
Selection.Offset(0, 2).resize(10, 1).Select
Range(ActiveCell, ActiveCell.Offset(20, 0).End(xlUp)).Select
End With
For Each c In Selection
If Len(c) = 0 Then GoTo Autre
c.Select
c.Value = UCase(c.Value)
Unite = c.Value
If Unite Like "*b*" Then Unite = Left(c.Value, InStr(c.Value, " ") - 1)
If Unite > 1 And IsNumeric(Unite) Then
c.Value = Unite & " Bars"
ElseIf Unite = 1 And IsNumeric(Unite) Then
c.Value = Unite & " Bar"
Else
End If
Lig = ActiveCell.Row - 1
larcol = Cells(Lig, 7).ColumnWidth + _
Cells(Lig, 8).ColumnWidth + _
Cells(Lig, 9).ColumnWidth + _
Cells(Lig, 10).ColumnWidth + _
Cells(Lig, 11).ColumnWidth + _
Cells(Lig, 12).ColumnWidth + _
Cells(Lig, 13).ColumnWidth + _
Cells(Lig, 14).ColumnWidth
nbcarlgn = Application.WorksheetFunction.RoundDown(larcol / Div, 0)
nbcar = Len(ActiveCell)
nblgn = Application.WorksheetFunction.RoundUp(nbcar / nbcarlgn, 0)
ActiveCell.Offset(0, 4).Value = nblgn * Mult
autre:
Next
With ActiveSheet.Range("E:N")
Set Cellule = .Find(Art, LookAt:=xlPart)
Cellule.Select
Selection.Offset(0, 1).resize(10, 1).Select
End With
For Each c In Selection
c.Offset(0, 2).Select
If ActiveCell.Value <> -1 Then ActiveCell.RowHeight = ActiveCell.Value
If ActiveCell.Value = -1 Then ActiveCell.EntireRow.Delete
Next
Selection.CurrentRegion.ClearContents
End Sub
Mon souci c'est le code teste toutes les cellules de la fusion et cela peut prendre un peu de temps et est inutile vu que seulement la première cellule de la fusion est renseignée.
D'où ma question en objet : Peut-on ne tester que la première cellule d'une fusion et ignorer les autres ?
Par avance, merci.