Nommer plage et utiliser le nom pour selection multiples

Résolu
beadupuy Messages postés 2 Date d'inscription vendredi 1 décembre 2000 Statut Membre Dernière intervention 24 avril 2008 - 22 avril 2008 à 15:26
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 - 23 avril 2008 à 16:26
Bonjour,

Les subtilités de VB m'échappent en partie ...

J'ai un tableau avec des lignes et colonnes vides - qui seront remplies par la macro.
Le nombre de lignes n'est pas fixe (dépend du fichier à importer) et le nombre de colonnes est fixe.

Je souhaite nommer des plages et utiliser les noms pour faire des sélections multiples.

Dans l'exemple ci-dessous, je dois poser un format de bordure pour les parties de colonnes sélectionnées.

ActiveSheet.Range("A1").CurrentRegion.Select
    numRows = Selection.Rows.Count
    Selection.Offset(1, 3).Resize(numRows, 13).Select
    Colonne1 = Selection.Offset(-1, 2).Resize(numRows, 1).Select
    Colonne2 = Selection.Offset(0, 3).Resize(numRows, 1).Select
    Colonne3 = Selection.Offset(0, 3).Resize(numRows, 1).Select
   ...
Les parties de chaque colonne sont bien sélectionnées

Je pensais que Nom = Selection ...Select suffisait à définir le nom de la plage et que Range(Colonne1, Colonne2 ...).Select me permettrait de sélectionner ces zones.
Mais ça marche pas ...
J'ai essayé Range avec "", avec [], avec le nom, mais c'est incorrect.

Il doit y avoir une syntaxe qui n'est pas respectée et je ne trouve pas de solution ...

D'avance merci pour toute aide que vous pourrez m'apporter.
Bonne après-midi

4 réponses

bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 14
22 avril 2008 à 17:35
Salut,

un exemple :




Sub demo()
    Dim MaPlage As String, MaFeuille As Worksheet,



numRows As Long





    numRows = Selection.Rows.Count
    Set MaFeuille = Worksheets("sheet1")
    MaPlage = Selection.Offset(-1, 2).Resize(numRows, 1).Address
    MaPlage = "=" & MaFeuille.Name & "!" & MaPlage
    MaFeuille.Names.Add Name:="Colonne1", RefersTo:=MaPlage
    MaFeuille.Range("colonne1").Select
End Sub

A+
3
beadupuy Messages postés 2 Date d'inscription vendredi 1 décembre 2000 Statut Membre Dernière intervention 24 avril 2008
23 avril 2008 à 14:48
Bonjour;

Merci de votre aide.

A partir de votre code, j'ai enfin pu obtenir ce que je voulais.

J'ai ajouté mes lignes, et ça donne ça :

Sub definirColonnesInterDate()

Dim MaPlage As String, Intercolonne1 As String, Intercolonne2 As String, Intercolonne3 As String, Intercolonne4 As String, MaFeuille As Worksheet, numRows As Long
Ajout de mes 4 zones de colonnes




 ActiveSheet.Range("A1").CurrentRegion.Select
' Je passe par CurrentRegion pour définir ma zone de départ : seules les 2 premières colonnes contiennent des données (avec cellules fusionnées donc XlEnd impossible)
' J'ai 1 ligne d'en-tête figée, 3 colonnes fixes (2 contenant des données (format défini et données fixes) + 1 colonne vide (format défini)) - 13 colonnes "modifiables" qui servent pour recevoir de nouvelles données et 2 colonnes vides (format défini)
    numRows = Selection.Rows.Count
    Set MaFeuille = Worksheets("Calendrier")
    MaPlage = Selection.Offset(1, 3).Resize(numRows, 14).Address
    MaPlage = "=" & MaFeuille.Name & "!" & MaPlage
    MaFeuille.Names.Add Name:="PlageCalendrier", RefersTo:=MaPlage
' Ci-dessus je défini la plage "modifiable"
    
' Ci-dessous, je défini et nomme certaines colonnes - 1 sur  3 (je leur applique un format particulier)    
    Intercolonne1 = Selection.Offset(0, 5).Resize(numRows, 1).Address
    Intercolonne1 = "=" & MaFeuille.Name & "!" & Intercolonne1
    MaFeuille.Names.Add Name:="Intercolonne1", RefersTo:=Intercolonne1
   
    Intercolonne2 = Selection.Offset(0, 8).Resize(numRows, 1).Address
    Intercolonne2 = "=" & MaFeuille.Name & "!" & Intercolonne2
    MaFeuille.Names.Add Name:="Intercolonne2", RefersTo:=Intercolonne2
   
    Intercolonne3 = Selection.Offset(0, 11).Resize(numRows, 1).Address
    Intercolonne3 = "=" & MaFeuille.Name & "!" & Intercolonne3
    MaFeuille.Names.Add Name:="Intercolonne3", RefersTo:=Intercolonne3
  
   
    Intercolonne4 = Selection.Offset(0, 14).Resize(numRows, 1).Address
    Intercolonne4 = "=" & MaFeuille.Name & "!" & Intercolonne4
    MaFeuille.Names.Add Name:="Intercolonne4", RefersTo:=Intercolonne4
   
    ActiveSheet.Range("Intercolonne1,Intercolonne2,Intercolonne3,Intercolonne4").Select
' Et là, je sélectionne les 4 colonnes en même temps ...

Quand même, tant de lignes pour si peu ...
Une nouvelle fois merci
3
PCPT Messages postés 13278 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 48
23 avril 2008 à 08:05
...





<li>
Vous êtes ici : [infomsg.aspx Thèmes] / [infomsgf_VISUAL-BASIC_1.aspx Visual Basic 6] / [infomsgt_DIVERS_220.aspx Divers] / [infomsgt_DEBUTANTS_226.aspx Débutants] / Nommer plage et utiliser le nom pour selection multiples</li>
déplacé vers VBA !
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 14
23 avril 2008 à 16:26
...

Merci PCPT

beadupuy,

effectivement n'oublie que pour excel et plus generalement le VBA tu doit poster ici :

[infomsg.aspx Thèmes] / [infomsgf_VISUAL-BASIC_1.aspx Visual Basic 6] / [infomsgt_LANGAGES-DERIVES_287.aspx Langages dérivés] / [infomsgt_VBA_244.aspx VBA]

oui, c'est beaucoup de ligne. Avec une boucle tu peux reduire un peu la taille de ton code :

Sub definirColonnesInterDate()

Dim MaPlage As
String,  MaFeuille As Worksheet, numRows As
Long,
i As Long

Dim
Intercolonne(3) As String 'utilisation d'une variable tableau

Ajout de mes 4 zones de colonnes

 ActiveSheet.Range("A1").CurrentRegion.Select
'
Je passe par CurrentRegion pour définir ma zone de départ : seules les
2 premières colonnes contiennent des données (avec cellules fusionnées
donc XlEnd impossible)
' J'ai 1 ligne
d'en-tête figée, 3 colonnes fixes (2 contenant des données (format
défini et données fixes) + 1 colonne vide (format défini)) - 13
colonnes "modifiables" qui servent pour recevoir de nouvelles
données et 2 colonnes vides (format défini)
    numRows = Selection.Rows.Count
    Set MaFeuille = Worksheets("Calendrier")
    MaPlage = Selection.Offset(1, 3).Resize(numRows, 14).Address
    MaPlage = "=" & MaFeuille.Name & "!" & MaPlage
    MaFeuille.Names.Add Name:="PlageCalendrier", RefersTo:=MaPlage
' Ci-dessus je défini la plage "modifiable"

' Ci-dessous, je défini et nomme certaines colonnes - 1 sur  3 (je leur applique un format particulier)

    MaPlage = "" 'ici je recupere la variable MaPlage pour ne pas avoir a recreer une variable supplementaire
    For i = 0 to 3
        Intercolonne(i) = Selection.Offset(0, 5 + (3 * i)).Resize(numRows, 1).Address
        Intercolonne(i) = "=" & MaFeuille.Name & "!" &
Intercolonne(i)

        MaFeuille.Names.Add Name:="Intercolonne" & i + 1, RefersTo:=
Intercolonne(i)
        If i = 0 Then

            MaPlage =
Intercolonne(i) 'au 1ere passage dans la boucle on pas besoin de la virgule
       Else
           
MaPlage =
MaPlage & "," &
Intercolonne(i) 'ici on concatene les plages
       EndIf
    Next i

    ActiveSheet.Range(Maplage).Select
' Et là, je sélectionne les 4 colonnes en même temps ...
End Sub

il y a certainement une autre methode plus rapide et plus simple mais c'est un bon debut

A+
0
Rejoignez-nous