VBA condition valeur cellule

mendick

XLDnaute Nouveau
Bonjour,
Je n'arrive pas à obtenir de réponse pour ce problème.

J'ai ce petit bout de code en vba qui ne fonctionne pas,

Est ce que quelqu'un peut me dire pourquoi svp ?

L'objectif est que si égalité il y a entre la valeur d'une cellule se trouvant dans "la feuille 1 plage 1:1 à 200000:30"
et la valeur de la cellule se trouvant "dans la feuille 2 cellule 2:1" alors une msgbox apparait disant "ok"

Sub tango()

If Worksheets("Feuil1").Range(Cells(1, 1), Cells(200000, 30)).Value = Worksheets("Feuil3").Range(Cells(2, 1)).value Then
MsgBox "ok"
End If

End Sub

Vraiment besoin de comprendre svp
 

PMO2

XLDnaute Accro
Bonjour,

Essayez avec le code suivant
VB:
Sub aa()
Dim Recherche As Variant
Dim C As Range
Dim FirstAddress As String
Dim A$

Recherche = Worksheets("Feuil3").Cells(2, 1)
With Worksheets("Feuil1").Range(Cells(1, 1), Cells(200000, 30))
Set C = .Find(What:=Recherche, LookIn:=xlValues)
  If Not C Is Nothing Then
    FirstAddress = C.Address
    Do
      A$ = A$ & C.Address(False, False) & vbLf
      Set C = .FindNext(C)
    Loop While Not C Is Nothing And C.Address <> FirstAddress
  End If
End With
If A$ <> "" Then MsgBox A$, vbOKOnly, "Recherche de " & Recherche
End Sub
 

job75

XLDnaute Barbatruc
Bonsoir mendick, Patrick,

Avec une formule Excel (matricielle) évaluée en VBA :
Code:
Sub Test()
Dim P As Range
With Sheets("Feuil1")
  Set P = Intersect(.[A1:AD200000], .UsedRange) 'limite la recherche
End With
If P Is Nothing Then Exit Sub
P.Name = "MaPlage" 'plage nommée
Sheets("Feuil3").[A2].Name = "MaCellule" 'cellule nommée
If [COUNT(1/(Maplage=MaCellule))] Then MsgBox "OK"
End Sub
Fonctionne même s'il y a des valeurs d'erreur dans la plage.

A+
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir mendick :),

Je n'arrive pas à obtenir de réponse pour ce problème.
?!?!!!??!
Vous auriez pu au moins préciser clairement si les solutions données ici convenaient, oui ou non ?


Quant à l'explication, elle y a été donné:
  • Worksheets("Feuil1").Range(Cells(1, 1), Cells(200000, 30)).Value est un tableau de 200 000 lignes et 30 colonnes.
  • Worksheets("Feuil3").Range(Cells(2, 1)).value est une seule valeur

Vous cherchez une égalité entre un tableau de 6 millions de valeurs d'un côté avec une seule valeur de l'autre côté -> il y a incohérence!
 
Dernière édition:

job75

XLDnaute Barbatruc
Re, salut mapomme :)

Avec cette variante le message indique le nombre de cellules trouvées :
Code:
Sub Test()
Dim P As Range
With Sheets("Feuil1")
  Set P = Intersect(.[A1:AD200000], .UsedRange) 'limite la recherche
End With
If P Is Nothing Then Exit Sub
P.Name = "MaPlage" 'plage nommée
Sheets("Feuil3").[A2].Name = "MaCellule" 'cellule nommée
MsgBox [COUNT(1/(Maplage=MaCellule))] & " cellule(s) trouvée(s)..."
End Sub
Bonne nuit.
 

job75

XLDnaute Barbatruc
Bonjour à tous,

J'ai utilisé une formule matricielle pour voir ce que ça donnait avec le signe = utilisé par mendick.

Mais bien entendu, comme le propose MaPoire sur l'autre forum, la fonction NB.SI s'impose :
Code:
Sub Test1()
If Application.CountIf(Sheets("Feuil1").[A1:AD200000], Sheets("Feuil3").[A2]) Then MsgBox "OK"
End Sub

Sub Test2()
MsgBox Application.CountIf(Sheets("Feuil1").[A1:AD200000], Sheets("Feuil3").[A2]) & " cellule(s) trouvée(s)..."
End Sub
C'est la solution la plus simple, fonctionnant quelles que soient les valeurs, et sans doute la plus rapide.

A+
 

Discussions similaires

Réponses
6
Affichages
202
Réponses
7
Affichages
162

Statistiques des forums

Discussions
311 711
Messages
2 081 799
Membres
101 818
dernier inscrit
tiftouf5757