XL 2013 VBA comment obtenir l'équivalent d'une vérification SI(OU sur toutes les feuilles

fb62840

XLDnaute Impliqué
Bonjour,

J'ai un très grand nombre d'onglets (nombre varie mais est supérieur à 50 généralement)

Il faudrait regarder sur chaque feuille dans les colonnes D, E, F, G de la ligne 2 à la ligne 500 si dans l'une des cellules au moins on trouve HYB4 pour calculer un total qui sera augmenté au fur et à mesure de la vérification sur chaque feuille.

par exemple si sur une feuille on trouve en D2 HYB4, en E2 on trouve autre chose, en F2 on trouve HYB4, en G2 on trouve HYB4 alors il faudrait compter 1
et si sur la ligne 3 on trouve dans les mêmes colonnes HYB4 dans les 4 colonnes il faudrait aussi compter 1
(en fait peu importe le nombre de fois où l'on trouve HYB4, si on le trouve au moins une fois il faut incrémenter de 1, si on ne le trouve pas il faut incrémenter de 0)

Merci beaucoup pour votre aide
 

vgendron

XLDnaute Barbatruc
Bonjour

pour chercher/trouver quelque chose quelque part, il faut utiliser la méthode "Find"

ex
VB:
sub trouver()

set trouve=sheets("nomfeuille").rows("2:2").find("HYB4",lookat:=xlwhole)
if not trouve is nothing then
   compteur=1
end if
end sub
 

fb62840

XLDnaute Impliqué
Bonjour

pour chercher/trouver quelque chose quelque part, il faut utiliser la méthode "Find"

ex
VB:
sub trouver()

set trouve=sheets("nomfeuille").rows("2:2").find("HYB4",lookat:=xlwhole)
if not trouve is nothing then
   compteur=1
end if
end sub
Bonjour, merci pour votre réponse rapide. Est-ce que si je rédigeais ainsi cela donnerait alors le résultats qui convient pour les colonnes de D à G ? et comment faire alors pour regarder de la ligne 2 à la ligne 500 ?

set trouve=sheets("nomfeuille".cols("4:7")Find("HYB4",lookat:=xlwhole)
if not trouve is nothing then
compteur = 1
 

vgendron

XLDnaute Barbatruc
l'équivalent de rows, c'est columns
sinon tu peux aussi ecrire
set trouve=sheets("nomfeuille".range("D:G").Find("HYB4",lookat:=xlwhole)

ca recherche sur les colonnes Entières
si tu veux limiter aux 500 lignes
range("D2:G500")
 

fb62840

XLDnaute Impliqué
l'équivalent de rows, c'est columns
sinon tu peux aussi ecrire
set trouve=sheets("nomfeuille".range("D:G").Find("HYB4",lookat:=xlwhole)

ca recherche sur les colonnes Entières
si tu veux limiter aux 500 lignes
range("D2:G500")
Bonjour, je bloque sur la rédaction, voici ce que j'écris et qui semble ne pas fonctionner car le total n'est pas correct (par exemple alors que je devrais trouver un résultat au moins égal à 40 (après vérification manuelle le total reste à 2)... Merci pour votre aide

Code:
Sub HYB3()
Dim sh As Worksheet
Dim numbers: CompteurHYB = 0

For Each sh In Sheets
If Left(sh.Name, 2) = "HYB" Then
    Set trouve = Sheets(sh.Name).Range("D2:G500").Find("HYB", lookat:=xlWhole)
    If Not trouve Is Nothing Then
        CompteurHYB = CompteurHYB + 1
    End If
End If
Next sh
Sheets("Results").Range("B2") = CompteurHYB / Sheets("RATI").Range("D4").Value
End Sub
 

fb62840

XLDnaute Impliqué
au hasard

remplace cette ligne
VB:
 Set trouve = Sheets(sh.Name).Range("D2:G500").Find("HYB", lookat:=xlWhole)

par celle la
VB:
 Set trouve = Sheets(sh.Name).Range("D2:G500").Find("HYB", lookat:=xlpart)
Le résultat reste incorrect, par exemple sur la première feuille j'ai plusieurs fois la mention apparaissant sur les colonnes de D à G et j'ai vérifié avec une formule si(ou(D2="HYB";E2="HYB";F2="HYB";G2="HYB");1;0) et le total en colonne est à 11
En mettant une msgbox pour vérifier la valeur de CompteurHYB avant le calcul final j'ai une réponse à 2
 

vgendron

XLDnaute Barbatruc
en fait peu importe le nombre de fois où l'on trouve HYB4, si on le trouve au moins une fois il faut incrémenter de 1, si on ne le trouve pas il faut incrémenter de 0)
euh.... ce que je comprend de cette phrase.. si tu trouves 11 fois le mot Hyb dans UNE feuille, le compteur n'est incrémenté que de 1... pas de 11

donc au mieux. si tu as 50 feuilles, ton compteur ne pourra jamais dépasser 50.. et ce.. meme si tu as 20 fois Hyb dans chaque feuille..
 

fb62840

XLDnaute Impliqué
euh.... ce que je comprend de cette phrase.. si tu trouves 11 fois le mot Hyb dans UNE feuille, le compteur n'est incrémenté que de 1... pas de 11

donc au mieux. si tu as 50 feuilles, ton compteur ne pourra jamais dépasser 50.. et ce.. meme si tu as 20 fois Hyb dans chaque feuille..
Non en fait si je trouve 3 fois sur la même ligne la valeur HYB la formule que je saisie en si(ou renvoie 1
et c'est le total dans la colonne où apparait la formule SI(ou qui donne 11 c'est à dire que sur 11 lignes a été trouvé au moins une fois la valeur "HYB" dans l'une des colonnes observées
 

vgendron

XLDnaute Barbatruc
essaie ceci dans ton fichier

VB:
Sub HYB3()
Dim sh As Worksheet
Dim numbers: CompteurHYB = 0
Dim tabdata() As Variant

For Each sh In Sheets
    If Left(sh.Name, 2) = "HYB" Then
        tabdata = sh.Range("D2:G500").value
        For i = LBound(tabdata, 1) To UBound(tabdata, 1)
            trouve = False
            For j = LBound(tabdata, 2) To UBound(tabdata, 2)
                If tabdata(i, j) Like "*HYB*" Then
                    trouve = True
                End If
            Next j
            CompteurHYB = CompteurHYB + IIf(trouve, 1, 0)
        Next i
    End If
    End If
Next sh
Sheets("Results").Range("B2") = CompteurHYB / Sheets("RATI").Range("D4").Value
End Sub
 

vgendron

XLDnaute Barbatruc
et ce code corrigé
VB:
Sub HYB3()
Dim sh As Worksheet
Dim numbers: CompteurHYB = 0
Dim tabdata() As Variant

For Each sh In Sheets
    If Left(sh.Name, 3) = "HYB" Then
        tabdata = sh.Range("D2:G500")
        For i = LBound(tabdata, 1) To UBound(tabdata, 1)
            trouve = False
            For j = LBound(tabdata, 2) To UBound(tabdata, 2)
                If UCase(tabdata(i, j)) Like "*HYB*" Then
                    trouve = True
                End If
            Next j
            CompteurHYB = CompteurHYB + IIf(trouve, 1, 0)
        Next i
    End If

Next sh
Sheets("Calculs").Range("B2") = CompteurHYB / Sheets("RATI").Range("D4").Value
End Sub

donne bien 6 lignes / 2 =3
 

Discussions similaires

Statistiques des forums

Discussions
315 144
Messages
2 116 724
Membres
112 847
dernier inscrit
kevin1023