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!
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