VBA condition valeur cellule

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

quelqu'un a t-il une solution pour faire fonctionner ce code ?

Bonjour Mendick, bonjour le forum,

Tu compares une plage avec une SEULE cellule !... Il te faut boucler sur chaque cellule de la plage. Pour aller plus vite de te propose de travailler avec une variable tableau plutôt que directement dans les cellules :

Sub tango()
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim I As Long 'déclare la variable I (Incrément de ligne)
Dim J As Byte 'déclare la variable J (incrément de colonne)

TV = Worksheets("Feuil1").Range("A1:AD200000") 'définit le tableau des valeurs TV
For I = 1 To UBound(TV, 1) 'boucle 1 : sur toutes les lignes I du tableau des valeurs TV
    For J = 1 To UBound(TV, 2) 'boucle 2 : sur toutes les colonnes J du tableau des valeurs TV
        'condition : si la données ligne I colonne J de TV est égale à la cellule ligne 2 colonne 1 de l'onglet "Feuil3"
        If TV(I, J) = Worksheets("Feuil3").Cells(2, 1).Value Then
            MsgBox "ok" 'message
            Exit Sub 'sort de la procédure
        End If 'fin de la condition
    Next J 'prochaine colonne de la boucle 2
Next I 'prochaine ligne de la boucle 1
End Sub

Dans ton énoncé tu parles de la Feuil2 et dans ton bout de code tu écris Feuil3. Corrige l'incohérence...

Autre incohérence dans ton code Range(Cells(2, 1). Ou c'est Range ou c'est Cells mais pas les deux dans ce cas...

Bonjour Thauthème, bonjour le forum,

Merci beaucoup pour ta réponse détaillée et rapide.

Cela fonctionne,

Super.


Salut,

Par contre juste une petite chose stp,

Sais-tu pourquoi mon code ne fonctionne pas ?

Le tiens est plus rapide mais j'aimerai comprendre pourquoi le mien bloque si tu as une idée.

Bonjour à tous,

Un essai de code sans boucle:

Sub Tango()
Dim plage As Range, Valeur, nbr&
  With Worksheets("Feuil1")
    Set plage = .Range(.Cells(1, 1), .Cells(200000, 30))
  End With
  Valeur = Worksheets("Feuil3").Cells(2, 1).Value
  nbr = Application.WorksheetFunction.CountIf(plage, Valeur)
  If nbr > 0 Then MsgBox "La valeur " & Valeur & " est " & nbr & " fois dans la plage."
End Sub

Bonjour,

Je crois que ThauThème te l'a dit au départ ! tu compares une plage de 6 000 000 de cellules à une seule cellule...

Cordialement.

Salut Mapoire,

Merci pour ta rep.

Salut Mferrand,

Je suis bien conscient que comparer autant de cellules à une seule est plutot delicat,

Par contre dans ce cas est-il possible de boucler seulement sur des cellules non vides du type:

TV = Worksheets("feuil1").Cells.SpecialCells(xlCellTypeConstants).Select

For I = 1 To UBound(TV, 1) 'boucle 1 : sur toutes les lignes I du tableau des valeurs TV

For J = 1 To UBound(TV, 2) 'boucle 2 : sur toutes les colonnes J du tableau des valeurs TV

Parce que là non plus ça ne fonctionne pas, et pourtant je pense qu'il serait plus optimisé de faire ainsi,

qu'en pensez vous ?

Bonjour le fil, bonjour le forum,

Pourquoi un Select à la fin de : TV = Worksheets("feuil1").Cells.SpecialCells(xlCellTypeConstants).Select ? essaie sans... Sinon la proposition de SaPoire me paraît encore mieux...

Bonjour,

J'ai un petit problème,

Savez vous comment utiliser la methode find sur 2 plages de données se trouvant sur deux onglets différents et appliquer le copier coller de toute la ligne sur laquelle se trouve la valeur trouvée.

Je suis un peu bloqué. Si vous avez des pistes svp,

J'explorerai avec plaisir vos solutions.

Rechercher des sujets similaires à "vba condition valeur"