Condition + recherche valeur dans liste
Résolu/Fermé
bthenault
Messages postés
55
Date d'inscription
mercredi 22 juillet 2009
Statut
Membre
Dernière intervention
8 juin 2011
-
7 juin 2011 à 16:37
bthenault Messages postés 55 Date d'inscription mercredi 22 juillet 2009 Statut Membre Dernière intervention 8 juin 2011 - 8 juin 2011 à 11:53
bthenault Messages postés 55 Date d'inscription mercredi 22 juillet 2009 Statut Membre Dernière intervention 8 juin 2011 - 8 juin 2011 à 11:53
A voir également:
- Condition + recherche valeur dans liste
- Liste déroulante excel - Guide
- Excel cellule couleur si condition texte - Guide
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Liste déroulante en cascade - Guide
- Recherche adresse - Guide
13 réponses
bthenault
Messages postés
55
Date d'inscription
mercredi 22 juillet 2009
Statut
Membre
Dernière intervention
8 juin 2011
1
7 juin 2011 à 17:07
7 juin 2011 à 17:07
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
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
bthenault
Messages postés
55
Date d'inscription
mercredi 22 juillet 2009
Statut
Membre
Dernière intervention
8 juin 2011
1
7 juin 2011 à 17:10
7 juin 2011 à 17:10
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...
ccm81
Messages postés
10903
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
19 novembre 2024
2 428
7 juin 2011 à 17:13
7 juin 2011 à 17:13
bonjour
quelque chose comme ça
bonne suite
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
bthenault
Messages postés
55
Date d'inscription
mercredi 22 juillet 2009
Statut
Membre
Dernière intervention
8 juin 2011
1
8 juin 2011 à 08:35
8 juin 2011 à 08:35
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...
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...
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
Modifié par pijaku le 8/06/2011 à 08:50
Modifié par pijaku le 8/06/2011 à 08:50
Salut
Excusez l'incruste...
Le problème vient peut être aussi de ta boucle sur toutes les feuilles...
Essaie ceci :
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!
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!
bthenault
Messages postés
55
Date d'inscription
mercredi 22 juillet 2009
Statut
Membre
Dernière intervention
8 juin 2011
1
8 juin 2011 à 08:59
8 juin 2011 à 08:59
Thisworkbook... j'avais pas pensé à ça ! Ca résout pas mon problème mais peut venir à bout d'autres! Merci
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
bthenault
Messages postés
55
Date d'inscription
mercredi 22 juillet 2009
Statut
Membre
Dernière intervention
8 juin 2011
1
8 juin 2011 à 08:39
8 juin 2011 à 08:39
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)
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)
ccm81
Messages postés
10903
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
19 novembre 2024
2 428
8 juin 2011 à 08:44
8 juin 2011 à 08:44
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
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
bthenault
Messages postés
55
Date d'inscription
mercredi 22 juillet 2009
Statut
Membre
Dernière intervention
8 juin 2011
1
8 juin 2011 à 09:01
8 juin 2011 à 09:01
ça va pas
bthenault
Messages postés
55
Date d'inscription
mercredi 22 juillet 2009
Statut
Membre
Dernière intervention
8 juin 2011
1
8 juin 2011 à 08:56
8 juin 2011 à 08:56
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é "
bthenault
Messages postés
55
Date d'inscription
mercredi 22 juillet 2009
Statut
Membre
Dernière intervention
8 juin 2011
1
8 juin 2011 à 09:04
8 juin 2011 à 09:04
Je reviens sur la première variation
"Const plage = Sheets(1).Range("A1:D28")"
Il me met "Constante requise" en surlignant .Range
"Const plage = Sheets(1).Range("A1:D28")"
Il me met "Constante requise" en surlignant .Range
bthenault
Messages postés
55
Date d'inscription
mercredi 22 juillet 2009
Statut
Membre
Dernière intervention
8 juin 2011
1
8 juin 2011 à 09:08
8 juin 2011 à 09:08
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."
ce qui se comprend, puisque ses propriétés peuvent varier."
bthenault
Messages postés
55
Date d'inscription
mercredi 22 juillet 2009
Statut
Membre
Dernière intervention
8 juin 2011
1
8 juin 2011 à 09:09
8 juin 2011 à 09:09
je peux peut être utiliser ça? "ActiveWorkbook.Names.Add Name:="MaPlage", RefersTo:="=MaFeuille!$B$10:$B$20""
bthenault
Messages postés
55
Date d'inscription
mercredi 22 juillet 2009
Statut
Membre
Dernière intervention
8 juin 2011
1
8 juin 2011 à 09:12
8 juin 2011 à 09:12
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 !!
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 !!
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
8 juin 2011 à 09:20
8 juin 2011 à 09:20
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
ccm81
Messages postés
10903
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
19 novembre 2024
2 428
8 juin 2011 à 11:25
8 juin 2011 à 11:25
re
un peu plus simple
RQ2. Range("A13:D28") n'est pas égal à Range(Cells(1, 13), Cells(4, 28))
bonne suite
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
bthenault
Messages postés
55
Date d'inscription
mercredi 22 juillet 2009
Statut
Membre
Dernière intervention
8 juin 2011
1
8 juin 2011 à 11:53
8 juin 2011 à 11:53
:) Super