IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Identifier les cellules qui contienent une Validation


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Septembre 2007
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 14
    Par défaut Identifier les cellules qui contienent une Validation
    Bonjour,

    comment je peux identifier par le code les cellules qui contienent une validation.

    WinXP, Office 2003

    Merci pour votre Aide.

  2. #2
    Membre émérite
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Par défaut
    utilise l'enregistreur de macro
    atteindre (ctrl +t) / cellules / Validations

    et fais un boucle sur les cellules sélectionnées

    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
    fred65200

  3. #3
    Membre émérite
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Par défaut
    Si tu ne veux pas sélectionner les cellules

    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
    fred65200

  4. #4
    Membre averti
    Inscrit en
    Septembre 2007
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 14
    Par défaut Pb. pas tout à fait résolu
    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:

    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
    Merci d'avance

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Bonjour

    Je n'ai rien trouvé de plus simple, mais voici ma proposition.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Plage.SpecialCells(xlCellTypeAllValidation)
    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
     
    Intersect(Plage1, Plage2)
    renvoie un objet Range contenant les cellules communes à deux ou plusieurs plages. Si aucune cellule commune, renvoie Nothing

    En combinant les deux, on peut utiliser
    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
    Adapté à ton cas, cela donne
    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
    [EDIT]
    Il est toutefois intéressant de noter que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Plage.SpecialCells(xlCellTypeAllValidation)
    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...
    [/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...
    ---------------

  6. #6
    Membre émérite
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Par défaut
    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

  7. #7
    Membre averti
    Inscrit en
    Septembre 2007
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 14
    Par défaut
    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:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Plage.SpecialCells(xlCellTypeAllValidation)
    à 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.

    Avec de petites modifications, j'ai réussi à contourner l'erreur. En voici ma solution :
    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
    Une autre fois merci pour votre aide.

    Salutations
    Jalil

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 15
    Dernier message: 27/02/2014, 20h48
  2. Réponses: 6
    Dernier message: 28/01/2012, 19h02
  3. Réponses: 5
    Dernier message: 09/08/2011, 11h36
  4. [XL-2007] modifier dans une plage toutes les cellules qui contiennent un mot précis en VBA
    Par skipeemed dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 27/10/2010, 18h24
  5. V6.1.3 Identifier les documents qui utilisent une table précise
    Par cmystik dans le forum Administration-Migration
    Réponses: 2
    Dernier message: 18/09/2009, 15h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo