Condition + recherche valeur dans liste

[Résolu/Fermé]
Signaler
Messages postés
55
Date d'inscription
mercredi 22 juillet 2009
Statut
Membre
Dernière intervention
8 juin 2011
-
Messages postés
55
Date d'inscription
mercredi 22 juillet 2009
Statut
Membre
Dernière intervention
8 juin 2011
-
Bonjour,

Merci d'avance...
En cellule L3, j'ai une date. je dois la comparer à une liste de date qui sont dans les cellules A13 à D28. Si elle ne se trouve pas dedans, je supprime la feuille (ça je sais).
J'ai fait un test avec une action plus simple mais ça ne marche pas. En fait ça marche si je la compare à 1 seule autre cellule :

Sub test()
If Sheets(1).Range("L3") <> Sheets(1).Range("A13") Then
Sheets(1).Range("B1") = Sheets(1).Range("A1")
End If
End Sub

Mais ça ne marche pas si je remplace "A13" par "A13:D28"

J'ai testé avec FIND mais je ne trouve pas la bonne combinaison. J'ai essayé de dire que si L3 ne se trouve pas dans A13 à D28 Alors... mais je n'y arrive pas.

Des idées?
(merci)

13 réponses

Messages postés
55
Date d'inscription
mercredi 22 juillet 2009
Statut
Membre
Dernière intervention
8 juin 2011
1
Petite avancée en aprtant d'une formule utilisée dans d'autres conditions :
Sub test()

Set Cherche = Sheets(1).Range("L3")
With Sheets(1).Range("A13:D28")
Set trouve = .Find(Cherche)
If Not trouve Is Nothing Then
Sheets(1).Range("B1") = Sheets(1).Range("A1")
End If
End With

End Sub
Messages postés
55
Date d'inscription
mercredi 22 juillet 2009
Statut
Membre
Dernière intervention
8 juin 2011
1
En fait cette dernière formule marche, mais le "not " et "nothing" ça me pert... je sais pas si ça marche quand il le trouve ou s'il le trouve pas...
Messages postés
10120
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
20 septembre 2021
2 205
bonjour

quelque chose comme ça

Const plage = "A1:A13"
Dim d, dd
d = Sheets(1).Range("A15").Value
If Range(plage).Find(d) Is Nothing Then
  Range("B1").Value = "err"
Else
  Range("B1").Value = d
End If


bonne suite
Messages postés
55
Date d'inscription
mercredi 22 juillet 2009
Statut
Membre
Dernière intervention
8 juin 2011
1
Génial ! Ca marche comme ça! Merci beaucoup! Maintenant je dois la faire évoluer. Le principe est le suivant :
Dans chaque feuille du classeur, je compare la date en L3 (de chaque feuille) à la liste existante dans la feuille 1. Si la date n'est pas dans la liste, je supprime la feuille.
Du coup, ça devrait donner un truc comme ça :
Sub test2()

For Each Sheet In Workbooks("2ème Trimestre 2011.xls").Worksheets
Const plage = Sheets(1).Range("A1:D28")
Dim d, dd
d = Sheet.Range("L3").Value
If Range(plage).Find(d) Is Nothing Then
Sheet.Delete
End If
Next
End Sub

Mais il me dit qu'il y a un problème, sûrement dans la manière de présenter la plage. mais je ne connais pas du tout la formule...
Messages postés
12257
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
3 septembre 2021
2 642
Salut
Excusez l'incruste...
Le problème vient peut être aussi de ta boucle sur toutes les feuilles...
Essaie ceci :
Sub machin() 
Dim Feuille As Worksheet 
For Each Feuille In ThisWorkbook.Worksheets 
'bla bla 
Next 
End Sub


ps : évitez les phrases comme : Mais il me dit qu'il y a un problème... C'est déroutant de précision. Ajoutez systématiquement le message d'erreur...au moins!
Messages postés
55
Date d'inscription
mercredi 22 juillet 2009
Statut
Membre
Dernière intervention
8 juin 2011
1
Thisworkbook... j'avais pas pensé à ça ! Ca résout pas mon problème mais peut venir à bout d'autres! Merci
Messages postés
55
Date d'inscription
mercredi 22 juillet 2009
Statut
Membre
Dernière intervention
8 juin 2011
1
J'ai essayé en remplaçant par :
Const plage = Sheets(1).Range(.Cells(1, 13), .Cells(4, 28))
Mais ça me met une erreur
je ne connaît pas la bonne syntaxe
(merci de votre aide)
Messages postés
10120
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
20 septembre 2021
2 205
re

pas trop le temps maintenant mais ceci me parait plus correct

dim plage as range
set plage = Sheets(1).Range(Cells(1, 13), Cells(4, 28))

bonne suite
Messages postés
55
Date d'inscription
mercredi 22 juillet 2009
Statut
Membre
Dernière intervention
8 juin 2011
1
ça va pas
Messages postés
55
Date d'inscription
mercredi 22 juillet 2009
Statut
Membre
Dernière intervention
8 juin 2011
1
Ca c'est bon, il met met une erreur sur la suite ligne "If Range(plage).Find(d) Is Nothing Then " le message "La méthode 'range' de l'objet '_Global' a échoué "
Messages postés
55
Date d'inscription
mercredi 22 juillet 2009
Statut
Membre
Dernière intervention
8 juin 2011
1
Je reviens sur la première variation
"Const plage = Sheets(1).Range("A1:D28")"
Il me met "Constante requise" en surlignant .Range
Messages postés
55
Date d'inscription
mercredi 22 juillet 2009
Statut
Membre
Dernière intervention
8 juin 2011
1
j'ai trouvé ça : "D'après l'aide VBA, le type Range ne peut pas être affecté à une constante,
ce qui se comprend, puisque ses propriétés peuvent varier."
Messages postés
55
Date d'inscription
mercredi 22 juillet 2009
Statut
Membre
Dernière intervention
8 juin 2011
1
je peux peut être utiliser ça? "ActiveWorkbook.Names.Add Name:="MaPlage", RefersTo:="=MaFeuille!$B$10:$B$20""
Messages postés
55
Date d'inscription
mercredi 22 juillet 2009
Statut
Membre
Dernière intervention
8 juin 2011
1
Voilà ce qui marche !!! C'est un peu de bricolage, ya peut être plus simple, mais au moins ça marche ! Merci pour votre aide.

Sub test2()
Application.DisplayAlerts = False
ActiveWorkbook.Names.Add Name:="MaPlage", RefersTo:=Sheets(1).Range("A13:D28")

For Each Sheet In ThisWorkbook.Worksheets
Const plage = "MaPlage"

Dim d, dd
d = Sheet.Range("L3").Value
If Range(plage).Find(d) Is Nothing Then
Sheet.Delete
End If
Next
Application.DisplayAlerts = True
End Sub

Et hop !!
Messages postés
12257
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
3 septembre 2021
2 642
Si c'est juste la constante qui te gènait :
Dim MaPlage As Range
Set MaPlage = Sheets(1).Range("A13:D28") 
'bla bla
Set MaPlage = Nothing
Messages postés
10120
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
20 septembre 2021
2 205
re

un peu plus simple

Private Sub CommandButton1_Click()
Dim plage As Range
Dim d
  Application.DisplayAlerts = False
  Set plage = Sheets(1).Range(Cells(1, 13), Cells(4, 28))
  plage.Select
  For Each Sheet In ThisWorkbook.Worksheets
    d = Sheet.Range("L3").Value
    If plage.Find(d) Is Nothing Then
       Sheet.Delete
    End If
  Next
  Application.DisplayAlerts = True
End Sub



RQ2. Range("A13:D28") n'est pas égal à Range(Cells(1, 13), Cells(4, 28))

bonne suite
Messages postés
55
Date d'inscription
mercredi 22 juillet 2009
Statut
Membre
Dernière intervention
8 juin 2011
1
:) Super