J'essaie d'écrire une macro où s'il y a une cellule avec le mot "TOTAL", alors elle entrera un tiret dans la cellule en dessous. Par exemple:
Dans le cas ci-dessus, je voudrais un tiret dans la cellule F7 (remarque: il peut y avoir un nombre quelconque de colonnes, il s'agira donc toujours de la ligne 7 mais pas toujours de la colonne F).
J'utilise actuellement ce code, mais cela ne fonctionne pas et je ne comprends pas pourquoi.
Dim celltxt As String
Range("C6").Select
Selection.End(xlToRight).Select
celltxt = Selection.Text
If InStr(1, celltext, "TOTAL") > 0 Then
Range("C7").Select
Selection.End(xlToRight).Select
Selection.Value = "-"
End If
L'aide serait appréciée. Espérons que je ne fais pas quelque chose de stupide.
Cela va parcourir toutes les cellules d'une plage donnée pour laquelle vous définissez ("RANGE TO SEARCH")
et ajouter des tirets dans la cellule ci-dessous à l'aide de la méthode Offset()
. En tant que meilleure pratique dans VBA, vous ne devez jamais utiliser la méthode Select
.
Sub AddDashes()
Dim SrchRng As Range, cel As Range
Set SrchRng = Range("RANGE TO SEARCH")
For Each cel In SrchRng
If InStr(1, cel.Value, "TOTAL") > 0 Then
cel.Offset(1, 0).Value = "-"
End If
Next cel
End Sub
Ceci fait la même chose, amélioré avec CONTAINS:
Function SingleCellExtract(LookupValue As String, LookupRange As Range, ColumnNumber As Integer, Char As String)
Dim I As Long
Dim xRet As String
For I = 1 To LookupRange.Columns(1).Cells.Count
If InStr(1, LookupRange.Cells(I, 1), LookupValue) > 0 Then
If xRet = "" Then
xRet = LookupRange.Cells(I, ColumnNumber) & Char
Else
xRet = xRet & "" & LookupRange.Cells(I, ColumnNumber) & Char
End If
End If
Next
SingleCellExtract = Left(xRet, Len(xRet) - 1)
End Function
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Not Intersect(Target, Range("C6:ZZ6")) Is Nothing Then
If InStr(UCase(Target.Value), "TOTAL") > 0 Then
Target.Offset(1, 0) = "-"
End If
End If
End Sub
Cela vous permettra d’ajouter des colonnes de manière dynamique et d’insérer automatiquement un tiret sous toutes les colonnes de la ligne C après 6 contenant un "Total" insensible à la casse. Remarque: Si vous dépassez ZZ6, vous devrez changer le code, mais cela devrait vous amener là où vous devez aller.
Est-ce ce que vous recherchez?
If ActiveCell.Value == "Total" Then
ActiveCell.offset(1,0).Value = "-"
End If
De vous pourrait faire quelque chose comme ça
Dim celltxt As String
celltxt = ActiveSheet.Range("C6").Text
If InStr(1, celltxt, "Total") Then
ActiveCell.offset(1,0).Value = "-"
End If
Qui est similaire à ce que vous avez.