Macro avec countif

Bonjour à tous,

J'ai un soucis avec une macro VBA que je n'arrive pas à résoudre, j'en fais donc appel à vous...

En fait, j'ai un classeur excel avec environ 200 onglets. Pour chaque onglet, je voudrais que lorsque la colonne D contient la lettre A et que la colonne F n'est pas vide, dans ce cas, il m'écrit "ok" dans la colonne E. J'ai d'abord fait un clearcontents pour effacer tout le contenu de la colonne E. Cela ne fonctionne pas et je ne comprends pas pourquoi ? j'ai fait la même chose pour la lettre B, qui ne fonctionne pas non plus.

De plus, après ces deux boucles IF, je voudrais qu'il me compte le nombre de "ok" présents dans la colonne E, et me le mette en cellule D6, mais ça ne marche pas non plus et je ne sais pas pourquoi.

Voici la macro :

Sub AB()
Dim Ws As Worksheet
Dim j As Long
    Application.ScreenUpdating = False
    For Each Ws In ActiveWorkbook.Worksheets
        If Ws.Name <> "MENU" Then
          For j = 11 To Ws.Range("B" & Rows.Count).End(xlUp).Row
            Ws.Range("E" & j).ClearContents
            If UCase(Ws.Range("D" & j)) Like "*A*" And Ws.Range("F" & j) <> "" Then
               Ws.Range("E" & j) = "ok"
            End If
            If UCase(Ws.Range("D" & j)) Like "*B*" And Ws.Range("F" & j) <> "" Then
               Ws.Range("E" & j) = "ok"
            End If
            Ws.Range("D6") = WorksheetFunction.CountIf(Ws.Range("E"), "ok")
          Next j
        End If
    Next Ws
End Sub

Merci d'avance à tous ceux qui tenteront de m'aider

Bonjour,

essaie ceci, sinon mets-nous ton fichier (ou un fichier exemple)

Sub AB()
    Dim Ws As Worksheet
    Dim j As Long
    Application.ScreenUpdating = False
    For Each Ws In ActiveWorkbook.Worksheets
        If Ws.Name <> "MENU" Then
            For j = 11 To Ws.Range("B" & Rows.Count).End(xlUp).Row
                Ws.Range("E" & j).ClearContents
                If UCase(Ws.Range("D" & j)) Like "*A*" And Ws.Range("F" & j) <> "" Then
                    Ws.Range("E" & j) = "ok"
                End If
                If UCase(Ws.Range("D" & j)) Like "*B*" And Ws.Range("F" & j) <> "" Then
                    Ws.Range("E" & j) = "ok"
                End If
            Next j
            Ws.Range("D6") = WorksheetFunction.CountIf(Ws.Columns("E:E"), "ok")
        End If
    Next Ws
End Sub

Bonjour,

Merci pour votre aide !

Malheureusement, ça ne marche toujours pas. Le countif semble fonctionner, mais pas d'écrire le "ok" dans la colonne E.

J'ai joint un fichier avec un seul onglet test.

Merci d'avance!

12test.xlsx (8.68 Ko)
jowil a écrit :

Bonjour,

Merci pour votre aide !

Malheureusement, ça ne marche toujours pas. Le countif semble fonctionner, mais pas d'écrire le "ok" dans la colonne E.

J'ai joint un fichier avec un seul onglet test.

Merci d'avance!

bonjour comme tu n'as aucune valeur en colonne "B" la boucle ne s'exécute pas.

Voici un code qui se base sur la colonne D pour déterminer le nombre de lignes à prendre en compte.

Sub AB()
    Dim Ws As Worksheet
    Dim j As Long
    Application.ScreenUpdating = False
    For Each Ws In ActiveWorkbook.Worksheets
        If Ws.Name <> "MENU" Then
            For j = 11 To Ws.Range("D" & Rows.Count).End(xlUp).Row
                Ws.Range("E" & j).ClearContents
                If UCase(Ws.Range("D" & j)) Like "*A*" And Ws.Range("F" & j) <> "" Then
                    Ws.Range("E" & j) = "ok"
                End If
                If UCase(Ws.Range("D" & j)) Like "*B*" And Ws.Range("F" & j) <> "" Then
                    Ws.Range("E" & j) = "ok"
                End If
            Next j
            Ws.Range("D6") = WorksheetFunction.CountIf(Ws.Columns("E:E"), "ok")
        End If
    Next Ws
End Sub
 

C'est parfait, merci!

Rechercher des sujets similaires à "macro countif"