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 :

Sélection d'une plage (je n'y arrive pas même avec la FAQ :'( )


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 206
    Points : 62
    Points
    62
    Par défaut Sélection d'une plage (je n'y arrive pas même avec la FAQ :'( )
    Bonjour,

    Malgré l'aide de la FAQ à ce sujet, je n'arrive pas à faire ce que je veux :

    Je fais ceci à un moment dans un Select Case :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
                ActiveCell.Offset(rowOffset:=0, columnOffset:=1).Activate
                    With Selection.Validation
                    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                    xlBetween, Formula1:="=risque_galva1et2"
    Mais je voudrais que cette "ajout de type" ne s'applique pas seulement à la cellule de la colonne suivante de l'active cell , mais à toutes les cellules de la colonne, de cette cellule à la fin.
    Par exemple, là mon code m'applique le type à D8, mais je voudrais que ça le fasse de D8 à Dxxx.

    j'ai tenté d'utiliser cette ligne de la FAQ, en la plaçant en deuxième ligne dans le code précédent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A1", Range("A1").End(xlDown)).Select
    en remplaçant "A1" par ActiveCell mais ça ne fonctionne pas


    Pouvez-vous m'aider ?
    Merci.

  2. #2
    Membre régulier
    Inscrit en
    Juillet 2005
    Messages
    121
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 121
    Points : 119
    Points
    119
    Par défaut
    salut a toi,

    je ne suis pas sur de mon coup car sans le programme, je ne peux pas tester mais essaie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ActiveCell.Offset(1, 0).EntireColumn.Select

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 206
    Points : 62
    Points
    62
    Par défaut
    ça ne marche pas, ça applique la liste à trois colonnes, celle où on commence, celle en col+1 et celle en col -1.

    Voici le code complet :
    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
     
    Private Sub Worksheet_Change(ByVal Target As Range)
        Select Case ActiveCell.Value
            Case "galva 1&2"
                ActiveCell.Offset(rowOffset:=0, columnOffset:=1).Activate
                    With Selection.Validation
                    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                    xlBetween, Formula1:="=risque_galva1et2"
                    End With
            Case "galva 3"
                ActiveCell.Offset(rowOffset:=0, columnOffset:=1).Activate
                    With Selection.Validation
                    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                    xlBetween, Formula1:="=risque_galva3"
                    End With
            Case "PVDF"
                ActiveCell.Offset(rowOffset:=0, columnOffset:=1).Activate
                    With Selection.Validation
                    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                    xlBetween, Formula1:="=risque_PVDF"
                    End With
            Case "Coex"
                ActiveCell.Offset(rowOffset:=0, columnOffset:=1).Activate
                    With Selection.Validation
                    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                    xlBetween, Formula1:="=risque_coex"
                    End With
            Case "Jacketting"
                ActiveCell.Offset(rowOffset:=0, columnOffset:=1).Activate
                    With Selection.Validation
                    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                    xlBetween, Formula1:="=risque_Jacketting"
                    End With
        End Select
    End Sub

  4. #4
    Membre régulier
    Inscrit en
    Juillet 2005
    Messages
    121
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 121
    Points : 119
    Points
    119
    Par défaut
    t'aurais pas des cellules fusionnées sur ces 3 colonnes par hasard...

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 206
    Points : 62
    Points
    62
    Par défaut
    si sur la première. Mais je n'ai pas compris pourquoi ta ligne sélectionnait trois colonnes o_O Elle aurait pris colonne n et colonne n+1 j'aurais compris, mais là... o_O
    Y'a t'il un moyen pour sélectionner une plage commençant à colonne+1 et descendant jusqu'en bas (end) ? Ca éviterait de coller la liste sur les titres de colonne.

  6. #6
    Membre confirmé

    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 453
    Points : 520
    Points
    520
    Par défaut
    Citation Envoyé par RemiT Voir le message
    t'aurais pas des cellules fusionnées sur ces 3 colonnes par hasard...
    Il est pas mal certain que c'est ça le problème. Pour pallier à cet effet des cellules fusionnées, on pourrait éviter de les sélectionner à l'aide d'une boucle qui ramasse toutes les cellules non-fusionnées ensemble et les sélectionne par la suite:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        Dim rngTotal As Range
        Dim i As Long
     
        Set rngTotal = Selection
        With Selection
            For i = 1 To .Worksheet.UsedRange.Rows.Count - 1
                If .Offset(i, 0).MergeCells = False Then
                    Set rngTotal = Union(rngTotal, .Offset(i, 0))
                End If
            Next i
        End With
        rngTotal.Select

  7. #7
    Membre confirmé

    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 453
    Points : 520
    Points
    520
    Par défaut
    En passant, tu n'as pas besoin d'activer tes cellules; regardes ce code, il est fonctionnellement identique au tien mais il est plus rapide car il omet l'activation.

    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
    Private Sub Worksheet_Change(ByVal Target As Range)
        Select Case ActiveCell.Value
            Case "galva 1&2"
                ActiveCell.Offset(rowOffset:=0, columnOffset:=1).Validation.Add _
                    Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                    xlBetween, Formula1:="=risque_galva1et2"
            Case "galva 3"
                ActiveCell.Offset(rowOffset:=0, columnOffset:=1).Validation.Add _
                    Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                    xlBetween, Formula1:="=risque_galva3"
            Case "PVDF"
                ActiveCell.Offset(rowOffset:=0, columnOffset:=1).Validation.Add _
                    Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                    xlBetween, Formula1:="=risque_PVDF"
            Case "Coex"
                ActiveCell.Offset(rowOffset:=0, columnOffset:=1).Validation.Add _
                    Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                    xlBetween, Formula1:="=risque_coex"
            Case "Jacketting"
                ActiveCell.Offset(rowOffset:=0, columnOffset:=1).Validation.Add _
                    Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                    xlBetween, Formula1:="=risque_Jacketting"
        End Select
    End Sub

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 206
    Points : 62
    Points
    62
    Par défaut
    pour le raccourcissement, oui mais par contre mon code précédent était faux car j'avais viré des paramètres sûrement obligatoires. C'est pour cela qu'il y avait un with d'ailleurs.
    Là avec tous les paramètres ça donne ça
    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
     
            Case "galva 1&2"
                    With ActiveCell.Offset(rowOffset:=0, columnOffset:=1).Validation
                        .Delete
                        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                        xlBetween, Formula1:="=risque_galva1et2"
                        .IgnoreBlank = True
                        .InCellDropdown = True
                        .InputTitle = ""
                        .ErrorTitle = ""
                        .InputMessage = ""
                        .ErrorMessage = ""
                        .ShowInput = True
                        .ShowError = True
                    End With
    Par contre je ne sais pas lesquels sont facultatifs, donc jvais tester en en enlevant.
    edit : c'est juste .Delete qui est obligatoire

  9. #9
    Membre confirmé

    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 453
    Points : 520
    Points
    520
    Par défaut
    As-tu testé la boucle?

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 206
    Points : 62
    Points
    62
    Par défaut
    J'ai l'impression que ce n'étaient pas les cellules fusionnées qui posaient problème. Sans l'activate, ça fonctionne !
    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
     
    Private Sub Worksheet_Change(ByVal Target As Range)
        Select Case ActiveCell.Value
            Case "galva 1&2"
                    With ActiveCell.Offset(rowOffset:=0, columnOffset:=1).EntireColumn.Validation
                        .Delete
                        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                        xlBetween, Formula1:="=risque_galva1et2"
                    End With
                Case "galva 3"
                    With ActiveCell.Offset(rowOffset:=0, columnOffset:=1).EntireColumn.Validation
                        .Delete
                        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                        xlBetween, Formula1:="=risque_galva3"
                    End With
            Case "PVDF"
                    With ActiveCell.Offset(rowOffset:=0, columnOffset:=1).EntireColumn.Validation
                        .Delete
                        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                        xlBetween, Formula1:="=risque_pvdf"
                    End With
            Case "Coex"
                    With ActiveCell.Offset(rowOffset:=0, columnOffset:=1).EntireColumn.Validation
                        .Delete
                        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                        xlBetween, Formula1:="=risque_coex"
                    End With
            Case "Jacketting"
                    With ActiveCell.Offset(rowOffset:=0, columnOffset:=1).EntireColumn.Validation
                        .Delete
                        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                        xlBetween, Formula1:="=risque_Jacketting"
                    End With
        End Select
    End Sub
    Bon ça colle des listes aussi dans les titres de colonne mais c'est point très grave
    merci bien

  11. #11
    Membre confirmé

    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 453
    Points : 520
    Points
    520
    Par défaut
    Ah! Bon.

    C'est résolu alors?

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 206
    Points : 62
    Points
    62
    Par défaut
    ah non attends j'ai oublié de recoller la première ligne partout, et j'ai peur que y'ait des conflits. En effet si il y a case 1 sur une ligne, puis qu'ensuite sur la deuxième c'est case 2, la liste de la ligne précédente sera modifiée aussi à cause du entire column... Il faudrait vraiment un truc qui aille de telle cellule à l'infini vers le bas, mais que ça ne touche pas ce qu'il y a au dessus.

    Pas sûr de m'être bien expliqué mais bon...

    edit : bon ça change bien la liste partout mais les si on a déjà choisi ce qu'on veut avant dans les listes précédentes, il n'y a pas de conflit. Ca pourrait aller.
    Mais si je peux améliorer ça comme expliqué juste au dessus ça serait pas mal quand même.

  13. #13
    Membre confirmé

    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 453
    Points : 520
    Points
    520
    Par défaut
    As-tu testé la boucle?????????????

    Pourquoi ne pas nous donner un fichier en exemple?

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 206
    Points : 62
    Points
    62
    Par défaut
    J'ai essayé ça déjà
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                    With ActiveCell.Offset(rowOffset:=0, columnOffset:=1).End(xlDown).Validation
    Ca ne fonctionne pas. Pas de bug, mais la liste n'est plus mise à jour.

    http://dl.free.fr/nBIV1dZWj/Modèle.xls

    La boucle a t'elle encore un interêt ? J'ai plus de problème de sélection vu que j'utilise plus l'activate.

    edit : mince j'ai pas envoyé le code avec, le voici pour la page "feuille vierge" :
    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
    Private Sub Worksheet_Change(ByVal Target As Range)
        Select Case ActiveCell.Value
            Case "galva 1&2"
                    With ActiveCell.Offset(rowOffset:=0, columnOffset:=1).End(xlDown).Validation
                        .Delete
                        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                        xlBetween, Formula1:="=risque_galva1et2"
                    End With
                Case "galva 3"
                    With ActiveCell.Offset(rowOffset:=0, columnOffset:=1).EntireColumn.Validation
                        .Delete
                        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                        xlBetween, Formula1:="=risque_galva3"
                    End With
            Case "PVDF"
                    With ActiveCell.Offset(rowOffset:=0, columnOffset:=1).EntireColumn.Validation
                        .Delete
                        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                        xlBetween, Formula1:="=risque_pvdf"
                    End With
            Case "Coex"
                    With ActiveCell.Offset(rowOffset:=0, columnOffset:=1).EntireColumn.Validation
                        .Delete
                        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                        xlBetween, Formula1:="=risque_coex"
                    End With
            Case "Jacketting"
                    With ActiveCell.Offset(rowOffset:=0, columnOffset:=1).EntireColumn.Validation
                        .Delete
                        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                        xlBetween, Formula1:="=risque_Jacketting"
                    End With
        End Select
    End Sub

  15. #15
    Membre confirmé

    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 453
    Points : 520
    Points
    520
    Par défaut
    Est-ce que ton tableau se termine obligatoirement à la fin de l'encadrement?

    Si c'est le cas, on pourrait délimiter la plage en créant un nom (Name) dans la feuille et en y faisant référence dans le code pour en trouver la dernière ligne.

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 206
    Points : 62
    Points
    62
    Par défaut
    non à mon avis, il pourrait être ammené à sortir du cadre...
    Mais si ça peut résoudre le problème on peut créer une plage très grande. Ce tableau ne grandira pas indéfiniment.
    Comment voyais tu ça dans le code ? J'ai du mal à te suivre.

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 206
    Points : 62
    Points
    62
    Par défaut
    Bon en fait ça ira comme ça si personne ne trouve. C'est pas très grave.
    C'est déjà bien avancé, merci.

    Par contre j'ai remarqué que souvent quand on ouvre une liste, l'ascenseur n'est pas en haut automatiquement... Du coup on voit la liste vide, ce qui pour un utilisateur peut devenir un problème ^^. Y'a t'il un paramètre pour ça ?

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

Discussions similaires

  1. [XL-2007] Sélection d'une plage de cellules
    Par renaud51 dans le forum Excel
    Réponses: 7
    Dernier message: 28/07/2009, 09h20
  2. Tri & Sélection d'une plage de taille inconnue
    Par pythagore3_14 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 04/08/2008, 13h58
  3. Autoriser sélection d'une plage de cellule dans une feuille Excel
    Par philoflore dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 01/08/2008, 09h49
  4. Userform pour sélection d'une plage de cellule
    Par humbp dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 07/01/2008, 12h41
  5. Sélection d'une plage de dates
    Par Bouanda dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 24/10/2004, 20h27

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