Bonjour,
comment je peux identifier par le code les cellules qui contienent une validation.
WinXP, Office 2003
Merci pour votre Aide.
Version imprimable
Bonjour,
comment je peux identifier par le code les cellules qui contienent une validation.
WinXP, Office 2003
Merci pour votre Aide.
utilise l'enregistreur de macro
atteindre (ctrl +t) / cellules / Validations
et fais un boucle sur les cellules sélectionnées
fred65200Code:
1
2
3
4
5
6
7 Sub AdressesValidations() ActiveCell.SpecialCells(xlCellTypeAllValidation).Select For Each c In Selection Debug.Print c.Address Next End Sub
Si tu ne veux pas sélectionner les cellules
fred65200Code:
1
2
3 For Each c In ActiveCell.SpecialCells(xlCellTypeAllValidation) Debug.Print c.Address Next
Boujour Fred,
Merci beaucoup pour ton message.
j'explique plus mon Pb.:
Parcourir un classeur avec 20 Feuilles.
Je ne dois faire mes modifications (Par Macro) que sur les cellules jaunes et ne contenant pas de Validation. Par exemple:
Merci d'avanceCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 Sub Test() Dim oSheet As Worksheet Dim rngTab As Variant For Each oSheet In ThisWorkbook.Worksheets rngTab = oSheet.UsedRange.Value For j = LBound(rngTab, 1) To UBound(rngTab, 1) For k = LBound(rngTab, 2) To UBound(rngTab, 2) If oSheet.Cells(j, k).Interior.ColorIndex = 19 And _ (Cellule ne contenant pas de validation) Then oSheet.Cells(j, k).Value= "XXXX" End if Next k Next j Next End Sub
Bonjour
Je n'ai rien trouvé de plus simple, mais voici ma proposition.
renvoie un objet Range contenant les cellules ayant une validation parmi les cellules de l'objet Plage.Code:
1
2 Plage.SpecialCells(xlCellTypeAllValidation)
renvoie un objet Range contenant les cellules communes à deux ou plusieurs plages. Si aucune cellule commune, renvoie NothingCode:
1
2 Intersect(Plage1, Plage2)
En combinant les deux, on peut utiliser
Adapté à ton cas, cela donneCode:
1
2
3
4
5
6 Dim Cellule As Range For Each Cellule In Range("c1:c10") If Not Intersect(Cellule, Cellule.SpecialCells(xlCellTypeAllValidation)) Is Nothing Then MsgBox Cellule.Address & " contient une validation" Next Cellule
[EDIT]Code:
1
2
3 If oSheet.Cells(j, k).Interior.ColorIndex = 19 And _ Intersect(oSheet.Cells(j, k), oSheet.Cells(j, k).SpecialCells(xlCellTypeAllValidation)) Is Nothing Then
Il est toutefois intéressant de noter que
renvoie une erreur s'il n'y a pas de cellules avec validation dans la plage considérée mais que, bizarrement, l'erreur n'est pas renvoyée lorsque l'on l'utilise à l'intérieur de intersect. C'est étrange, mais c'est comme ça...Code:Plage.SpecialCells(xlCellTypeAllValidation)
[/EDIT]
Ok?
J'allais t'envoyer une usine à gaz lorsque j'ai vu la solution de Pierre Fauconnier je me suis abstenu. J'avais beaucoup plus compliqué.
Salutations
Bonjour Pierre, Bonjour Fred,
Merci pour vos réponses. C'est vraiment sympa.
Pour Pierre:
Ton idee est très intéressante. Nèomoins, même si j'utilise:
à l'intérieur de Intersect, elle me renvoie une erreur s'il n'y a pas de cellules avec validation dans la plage/feuille considérée.Code:Plage.SpecialCells(xlCellTypeAllValidation)
Avec de petites modifications, j'ai réussi à contourner l'erreur. En voici ma solution :
Une autre fois merci pour votre aide.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 Sub Test() Dim oSheet As Worksheet Dim rngTab As Variant Dim j, k As Long Dim rPlage As Range On Error Resume Next For Each oSheet In ThisWorkbook.Worksheets rngTab = oSheet.UsedRange.Value Err.Clear Set rPlage = Intersect(oSheet.UsedRange, oSheet.UsedRange.SpecialCells(xlCellTypeAllValidation)) If Err.Number <> 0 Then Err.Clear For j = LBound(rngTab, 1) To UBound(rngTab, 1) For k = LBound(rngTab, 2) To UBound(rngTab, 2) If oSheet.Cells(j, k).Interior.ColorIndex = 19 Then oSheet.Cells(j, k).Value = "XXX" End If Next k Next j Else For j = LBound(rngTab, 1) To UBound(rngTab, 1) For k = LBound(rngTab, 2) To UBound(rngTab, 2) If oSheet.Cells(j, k).Interior.ColorIndex = 19 And _ Intersect(oSheet.Cells(j, k), oSheet.Cells(j, k).SpecialCells(xlCellTypeAllValidation)) _ Is Nothing Then oSheet.Cells(j, k).Value = "XXX" End If Next k Next j End If Next On Error GoTo 0 End Sub
Salutations
Jalil