beadupuy
Messages postés2Date d'inscriptionvendredi 1 décembre 2000StatutMembreDernière intervention24 avril 2008
-
22 avril 2008 à 15:26
bigfish_le vrai
Messages postés1835Date d'inscriptionvendredi 13 mai 2005StatutMembreDernière intervention20 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
A voir également:
Nommer plage et utiliser le nom pour selection multiples
beadupuy
Messages postés2Date d'inscriptionvendredi 1 décembre 2000StatutMembreDernière intervention24 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
PCPT
Messages postés13278Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201848 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
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