Nommer plage et utiliser le nom pour selection multiples

[Résolu]
Signaler
Messages postés
2
Date d'inscription
vendredi 1 décembre 2000
Statut
Membre
Dernière intervention
24 avril 2008
-
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
-
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

Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
10
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+
Messages postés
2
Date d'inscription
vendredi 1 décembre 2000
Statut
Membre
Dernière intervention
24 avril 2008

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
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
46
...





<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
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
10
...

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+