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.