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 :

Controle dans une plage de cellules [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Responsable Qualité industrie
    Inscrit en
    Septembre 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Responsable Qualité industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2014
    Messages : 4
    Par défaut Controle dans une plage de cellules
    bonjour a tous,

    suite a une selection (avec le mulot) de plusieurs cellules dans une plage de cellule dediée a ma macro je voudrais qu'elle verifie si les cellules selectionnés sont la bonne plage avant de continuer.

    la zone de selection est B9 a BI22
    j'utilise ces lignes pour la selection

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    With Selection
     debut = .Item(1).Address
     fin = .Areas(.Areas.Count)(.Areas(.Areas.Count).Count).Address
    End With
    mais je ne trouve pas comment faire pour etre sur que debut et fin soit bien entre B9 et BI22

    vous me seriez d'un grand secours car là je seche.

    Merci
    bonne soirée

  2. #2
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonjour,

    si j'ai compris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim debut As Range, fin As Range, verif As Boolean
    verif = True
    With Selection
      Set debut = .Item(1)
      Set fin = .Areas(.Areas.Count)(.Areas(.Areas.Count).Count)
    End With
    If debut.Row < 9 Or debut.Column <> 2 Then verif = False
    If fin.Row > 122 Or fin.Column <> 2 Then verif = False 'à adapter
    If verif = False Then MsgBox "la plage n'est pas bonne" & " " & "plage sélectionnée :" & debut.Address & "/" & fin.Address
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  3. #3
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut
    Bonjour Lionel C, re casefayere,

    Je propose ceci pour ma part :
    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
    Sub test()
    Dim rng As Range
    Dim bool As Boolean
     
    Set rng = Worksheets("Feuil1").Range("B9:BI22")
    bool = True
    For Each cll In Selection
        If Application.Intersect(rng, cll) Is Nothing Then
            bool = False
            Exit For
        End If
    Next cll
     
    If bool Then
        MsgBox "Selection valide"
    Else
        MsgBox "Selection invalide"
    End If
     
    End Sub
    Petit test sur l'ensemble des cellules de la sélection.

    @casefayere : je ne sais pas, si l'utilisateur sélectionne plusieurs cellules grâce à la touche contrôle, où se situe la dernière cellule...
    J'avais pensé à la même chose que toi, mais selon ce cas de figure... je n'ai pas suffisamment de visibilité sur son fonctionnement.

    Cordialement,
    Kimy

  4. #4
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    D'accord avec toi kim, pourquoi n'ai-je pas pensé à "Application.Intersect"

    Histoire de, avec un InputBox (type 8) et en reprenant ton code
    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
    Dim rng As Range, plg As Range, cel As Range
    Dim bool As Boolean
     
    Set rng = Worksheets("Feuil1").Range("B9:BI22")
    bool = True
    Set plg = Application.InputBox("choisissez votre plage avec la souris", Type:=8)
    For Each cel In plg
        If Application.Intersect(rng, cel) Is Nothing Then
            bool = False
        End If
    Next cel
     
    If bool Then
        MsgBox "Selection valide"
    Else
        MsgBox "Selection invalide"
    End If
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  5. #5
    Membre à l'essai
    Homme Profil pro
    Responsable Qualité industrie
    Inscrit en
    Septembre 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Responsable Qualité industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2014
    Messages : 4
    Par défaut
    Bonjour casefayere et Kimy_Ire,

    J’ai fait des essais de vos méthodes avec quelques adaptations mais sans succès, il faut dire que je suis un piètre utilisateur de VBA…
    Pour plus d’information j’ai mis le code complet.
    effectivement je peux sélectionner plusieurs cellules dans la plage B9-BI22 pour les colorer.

    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
    36
    37
    38
    39
    40
    41
    42
    Sub colortest()
    ' pour colorer les cellules selectionnées avec changement de couleur au changement de date
    Dim j As Integer
     
    j = Weekday(Now, vbUseSystemDayOfWeek)
     
    If j = 1 Then
    col = 196352
    End If
    If j = 2 Then
    col = 65535
    End If
    If j = 3 Then
    col = 16765952
    End If
    If j = 4 Then
    col = 22271
    End If
    If j = 5 Then
    col = 16711873
    End If
    If j = 6 Then
    col = 8621204
    End If
     
     
    With Selection
     debut = .Item(1).Address
      fin = .Areas(.Areas.Count)(.Areas(.Areas.Count).Count).Address
     End With
     ' enregistre la derniere selection (au cas ou!)
     Range("B3").Value = debut
     Range("C3").Value = fin
     
     ' color les cellule selectionnées de la couleur de jour
     With Selection.Interior
           .color = col
     End With
     ' force le calcule pour la macro du module1 ( calcul du nombre de cellules colorées)
     Calculate
     
    End Sub
    merci encore
    cordialement
    Lionel

  6. #6
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonjour, regardes ce code, je ne suis pas sur d'avoir compris, et lis bien les instructions, essaies sur un fichier bidon
    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
    36
    Sub colortest()
    ' pour colorer les cellules selectionnées avec changement de couleur au changement de date
    Dim j As Integer, couleur, x As Integer, col As Long
    Dim rng As Range, plg As Range, cel As Range
    Dim bool As Boolean, debut As String, fin As String
    couleur = Array(196352, 65535, 16765952, 22271, 16711873, 8621204)
     
    j = Weekday(Now, vbUseSystemDayOfWeek)
    For x = 0 To UBound(couleur)
      If j = x + 1 Then col = couleur(x)
    Next x
    Set rng = Worksheets("Feuil1").Range("B9:BI22")
    bool = True
    'ci-dessous, un inputbox qui permet de sélectionner, à toi d'adapter
    Set plg = Application.InputBox("choisissez votre plage avec la souris", Type:=8)
    debut = Split(plg.Address, ":")(0)
    fin = Split(plg.Address, ":")(1)
    Range("B3").Value = debut 'pour faire quoi ?
    Range("C3").Value = fin 'pour faire quoi ?
     
    For Each cel In plg
      If Application.Intersect(rng, cel) Is Nothing Then
        bool = False
      End If
    Next cel
     
    If bool Then
     With plg.Interior
           .Color = col
     End With
    Else
        MsgBox "Selection invalide"
    End If
    'pour ton calculate, il faut des renseignements
    'Calculate
    End Sub
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  7. #7
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour,

    tu peux aussi plus simplement limiter l'action à la plage valide :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     ' color les cellule selectionnées de la couleur de jour
    Dim pl As Range
     Set pl = Intersect(Selection, [B9:BI22])
     If Not pl Is Nothing Then pl.Interior.Color = col
    eric

  8. #8
    Membre à l'essai
    Homme Profil pro
    Responsable Qualité industrie
    Inscrit en
    Septembre 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Responsable Qualité industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2014
    Messages : 4
    Par défaut
    Re bonjour a tous,

    je vois que vous avez plein d'idée, mais comme ce fichier est destinée à plusieurs utilisateur j'ai préféré verrouiller les cellules qui ne doivent pas être modifié, (pourquoi n'y ai-je pas pensé plutôt)
    Certes mon code n'est pas très propre par rapport à ce que vous avez réécrit mais pris par le temps je préfère garder le code actuel. J’ai juste ajouté un message quand l’utilisateur sélectionne une cellule qui serre a autre chose qu’à la colorer.



    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    Sub color()
    ' pour colorer les cellules selectionnées avec changement de couleur au changement de date
    Dim j As Integer
     
    j = Weekday(Now, vbUseSystemDayOfWeek)
     
    If j = 1 Then
    col = 16711680
    End If
    If j = 2 Then
    col = 65535
    End If
    If j = 3 Then
    col = 16765952
    End If
    If j = 4 Then
    col = 22271
    End If
    If j = 5 Then
    col = 16711873
    End If
    If j = 6 Then
    col = 8621204
    End If
     
    With Selection
    celactiv = .Item(1).Address
    End With
    If celactiv = "$AA$2" Or celactiv = "$AA$5" Or celactiv = "$I$2" Then
    MsgBox "Selection invalide"
    End
    End If
     
    With Selection
     debut = .Item(1).Address
      fin = .Areas(.Areas.Count)(.Areas(.Areas.Count).Count).Address
     End With
     
      With Selection.Interior
            .color = col   
        End With
     Calculate
     
    End Sub


    Merci encore pour votre implication qui m'a fait progresser car j'ai découvert de nouvelles fonctions

    Cordialement.

    Lionel

  9. #9
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Tu testes 3 cellules possibles pour annoncer sélection incorrecte.
    Il n'y en a pas plus ?
    Et positif ou négatif tu continues...
    Ca parait un peu léger mais bon, c'est toi qui voit.

    eric

  10. #10
    Membre à l'essai
    Homme Profil pro
    Responsable Qualité industrie
    Inscrit en
    Septembre 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Responsable Qualité industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2014
    Messages : 4
    Par défaut
    oui Eric

    car toutes les cellules sont bloquées, pour que tu conprenne mon fichier je le met en piece jointe, car c'est compliqué d'expiqué comment ça fonctionne.

    Slts.

    Lionel
    Fichiers attachés Fichiers attachés

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

Discussions similaires

  1. Changement dans une plage de cellule
    Par lucazzo dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 07/07/2008, 11h44
  2. [PEAR] Écrire dans une plage de cellules depuis PHP
    Par fthem dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 05/06/2008, 14h37
  3. [OpenOffice][Tableur] Ecrire dans une plage de cellule
    Par jmjmjm dans le forum OpenOffice & LibreOffice
    Réponses: 4
    Dernier message: 08/05/2007, 14h20
  4. Pb de lecture données dans une plage de cellule avec itération
    Par rond24 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 04/07/2006, 13h33
  5. Remplacer "#N/A" dans une plage de cellule.
    Par Yogi_01 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 12/04/2006, 14h59

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