Bonjour,
comment je peux identifier par le code les cellules qui contienent une validation.
WinXP, Office 2003
Merci pour votre Aide.
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
fred65200
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
fred65200
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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'avance
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Plage.SpecialCells(xlCellTypeAllValidation)
renvoie un objet Range contenant les cellules communes à deux ou plusieurs plages. Si aucune cellule commune, renvoie Nothing
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Intersect(Plage1, Plage2)
En combinant les deux, on peut utiliser
Adapté à ton cas, cela donne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part Plage.SpecialCells(xlCellTypeAllValidation)
[/EDIT]
Ok?
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------
Mes billets de blog sur DVP
Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
---------------
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 : Sélectionner tout - Visualiser dans une fenêtre à part 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 : Sélectionner tout - Visualiser dans une fenêtre à part
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
Partager