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 Impliqué
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.
 

Discussions similaires


Haut Bas