web-dev-qa-db-fra.com

Utilisation de "Si la cellule contient" dans VBA Excel

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:

enter image description here

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.

5
Moogle

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
12
Chrismas007

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
1
Michinio
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.

1
NameIsPete

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. 

0
DejaVuSansMono