Résolu [VBA] Compter le nombre de cellules égales à une valeur

Citronflexe

XLDnaute Junior
Bonjour le forum,

J'ai besoin de compter dans un classeur ouvert par une macro, le nombre de cellules égales à "N/A" dans une plage donnée.

J'ai fait un bout du code ..

VB:
Private Sub CommandButton2_Click()
Dim count, i As Integer
Dim cell As Range

On Error Resume Next

For i = 2 To 5
    numLot = Cells(i, 1).Value
    Call Module1.OuvrirFichier("D:\Dossier de lot\Compile\Lot " & numLot & " Compile.xls")
   
    Workbooks("Lot " & numLot & " Compile.xls").Activate
   
    count = 0
   
    For Each cell In Worksheets("DL4").Range("B63:B82")
        If Range(cell).Value = "N/A" Then
            count = count + 1
        End If
    Next
   
    MsgBox (count)
      
Next

MsgBox ("Tous les classeurs ont été ouverts")

End Sub

Avec OuvrirFichier(Monfichier as String) qui est juste la macro qui ouvre le classeur en question, à la bonne feuille, enfin vous verrez ça dans les fichiers joints


Le compteur me renvoie toujours 20, alors que les cellules concernées ne contiennent objectivement pas toutes "N/A"... Je ne comprend pas ce qui ne va pas.


Je vous transmet le classeur concerné ainsi que deux classeurs factices avec les cellules à analyser..

Merci de votre aide ! :)


PS : Tant qu'on y est, lorsque j'essaie d'effectuer un mode pas à pas pour voir où ça plante, après avoir ouvert le fichier, le reste du code file tout seul sans prendre en compte le pas à pas... pourquoi? o_O
 

Fichiers joints

Citronflexe

XLDnaute Junior
Résolu,

j'ai arrêté de faire appel à une macro dans le Module1, du coup j'ai pu résoudre mon problème grâce au mode pas-à-pas.

Désolé du dérangement!
 

job75

XLDnaute Barbatruc
Bonjour Citronflexe,

Erreur classique : utiliser On Error Resume Next sans discernement.

Si vous l'aviez enlevé vous auriez vu que l'instruction If Range(cell).Value = "N/A" Then ne va pas du tout.

Il faut la remplacer par If cell.Text = "N/A" Then

A+
 

M12

XLDnaute Accro
Bonjour,
A tester
Code:
Private Sub CommandButton2_Click()
Dim count, i As Integer
Dim cell As Range
On Error Resume Next
For i = 2 To 5
    numLot = Cells(i, 1).Value
    Call Module1.OuvrirFichier("D:\Dossier de lot\Compile\Lot " & numLot & " Compile.xls")
    Workbooks("Lot " & numLot & " Compile.xls").Activate
    count = 0
    For Each cell In Worksheets("DL4").Range("B63:B82")
        If cell.Value = "N/A" Then
            count = count + 1
        End If
    Next
    MsgBox (count)
Next
MsgBox ("Tous les classeurs ont été ouverts")
End Sub
 

Citronflexe

XLDnaute Junior
Bonjour @job75

C'était en effet cette instruction qui posait problème ! Merci :)

Cela dit, j'ai des fichiers du type "Lot 17005 Compile.xls" qui n'existent pas dans le répertoire, donc j'ai mis le " On Error Resume Next " pour ne pas les prendre en compte...

EDIT : Bonjour @M12 , merci de votre réponse
 

Citronflexe

XLDnaute Junior
Désolé d'abuser de votre temps,

Y'a-t-il un moyen de passer au i suivant si le classeur nommé de la forme "Lot " & numLot & " Compile.xls" n'existe pas dans le répertoire ?

Actuellement à chaque fois qu'un des classeurs n'existe pas, cela renvoie un message d'erreur à cliquer manuellement, il doit y en avoir un bon millier dans ce cas, cela va vite devenir gênant...

Le code actuel :
VB:
Private Sub CommandButton2_Click()
Dim count, i As Integer
Dim cell As Range
Dim Wbk As Workbook

On Error Resume Next

For i = 2 To 10
    numLot = Cells(i, 1).Value
   
    Set Wbk = Workbooks.Open("D:\Dossier de lot\Compile\Lot " & numLot & " Compile.xls")
    Workbooks("Lot " & numLot & " Compile.xls").Activate
   
    count = 0
   
    For Each cell In Worksheets("DL4").Range("B63:B82")
        If cell = "N/A" Then
            count = count + 1
        End If
    Next
   
    Workbooks("Lot " & numLot & " Compile.xls").Close
   
    Range("I" & i) = 20 - count
       
Next

MsgBox ("Tous les classeurs ont été ouverts")


End Sub

Merci d'avance !
 

job75

XLDnaute Barbatruc
Re,

Il suffit de tester l'existence du fichier avec Dir :
Code:
If Dir("D:\Dossier de lot\Compile\Lot " & numLot & " Compile.xls") <> "" Then
    Set Wbk = Workbooks.Open("D:\Dossier de lot\Compile\Lot " & numLot & " Compile.xls")
    '--------
A+
 

Citronflexe

XLDnaute Junior
Re,

C'est parfait ! Du coup je peux enlever le On Error Resume Next je suppose !

Merci beaucoup pour votre réactivité et vos conseils.
 

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas