VBA - Nom défini 1 ligne sur 2

  • Initiateur de la discussion Initiateur de la discussion Chris401
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Chris401

XLDnaute Accro
Bonsoir

Je cherche le code pour définir un nom en VBA

Sur feuille "Planning"

De la colonne 2 (B) à la colonne 198 (GP)

A partir de la ligne 5, toutes les 2 lignes, jusqu'à la ligne 135

C'est à dire qu'à l'arrivé, la plage est égale à :

B5:GP5 , B7:GP7 , B9:GP9 , ..... , B135:GP135

Sub NomDefini()
LaPlage.Select
Names.Add Name:="Base", RefersTo:="='" ???
End sub

Merci par avance
Cordialement
Chris
 
Re : VBA - Nom défini 1 ligne sur 2

Salut Chris401,
pourquoi ne pas y aller directement avec
Code:
Range(LaPlage).Name = "Base"
une fois que tu as déterminé ce que représente la variable LaPlage

Par contre, pour ce qui est des zones non contigues, je ne suis pas convaincu que c'est faisable.

Cordialement,

Étienne
 
Re : VBA - Nom défini 1 ligne sur 2

Bonsoir Etienne

Merci de vouloir m'aider, mais le problème c'est justement que je veux déterminer la variable avec une ligne sur 2.

Je peux le faire directement par INSERTION NOM DEFINIR

Je sélectionne les colonnes et je les nomme MesColonnes
Je sélectionne les lignes et je les nomme MesLignes
Base =MesColonnes MesLignes

Le problèmes, c'est que s'il y a un ajout de lignes, il faut tout recommencer.

Cordialement

 
Re : VBA - Nom défini 1 ligne sur 2

Bonjour Chris, Etienne

Attention à la définition des zones en fonction du nombre de plages non contigues (il doit y avoir une limite). Si on en a 10000, cela risque de poser un problème 😕

Sinon avec ce code, et quelques plages, cela peut fonctionner:

Code:
ActiveWorkbook.Names.Add Name:="testNom", RefersToR1C1:=Selection

Pour un tableau, on peut utiliser les touches:

Ctrl+* pour sélectionner le tableau et ctrl+; pour sélectionner les lignes visibles.
 
Re : VBA - Nom défini 1 ligne sur 2

Bonjour le fil 🙂,
Tu peux utiliser
Code:
Sub test()
Dim I As Integer, Plage As Range
Set Plage = Range("B5:GP5")
For I = 7 To 135 Step 2
Set Plage = Union(Plage, Range("B" & I & ":GP" & I))
Next I
Names.Add Name:="Base", RefersTo:=Replace(Plage.Address, ",", ";")
End Sub
mais en testant sous 2007, Michel a parfaitement raison, ça ne beugue pas mais les plages discontinues semblent être limitées à 40 🙄...
Bonne journée 😎
 
Re : VBA - Nom défini 1 ligne sur 2

Re 🙂,
C'est vraiment bizare cette affaire 😕...
Code:
Sub test2()
Dim I As Integer, Plage As Range
Set Plage = Range("B5:GP5")
For I = 7 To 135 Step 2
Set Plage = Union(Plage, Range("B" & I & ":GP" & I))
Next I
Plage.Select
End Sub
permet de sélectionner, et en utilisant manuellement le gestionnaire de nom, ça fonctionne 😛...
Code:
Sub test3()
Dim I As Integer, MonAdresse As String
For I = 5 To 135 Step 2
MonAdresse = MonAdresse & ";$B$" & I & ":$GP$" & I
Next I
MonAdresse = Right(MonAdresse, Len(MonAdresse) - 1)
MsgBox MonAdresse
Names.Add Name:="Base", RefersTo:=MonAdresse
End Sub
qui devrait le faire en automatique génère une erreur alors que la chaine est correcte 😕...
Bonne journée 😎
 
Re : VBA - Nom défini 1 ligne sur 2

Bonjour le fil, bonjour le forum,

Peut-être comme ça :
Code:
Sub Macro1()
Dim pl As Range 'déclare la variable pl
Dim x As Byte 'déclare la variable x (incrément de ligne)
 
Set pl = Range("B5") 'définit la plage pl
For x = 5 To 135 Step 2 'boucle de 2 à 135 (une ligne sur deux)
    Set pl = Application.Union(pl, Range(Cells(x, 2), Cells(x, 198))) 'redéfinit la plage pl
Next x 'prochaine ligne de la boucle
pl.Name = "base" 'nomme la plage
Range("base").Select 'ligne a supprimer, juste pour vérifier
End Sub

[Édition]
Bonjour JNP on s'est croisé...
 
Re : VBA - Nom défini 1 ligne sur 2

Bonjour

Merci à tous les participants.
Le code de Robert correspond exactement à ce que j'attendais.

Edit : est-ce possible d'ajouter une condition sur les colonnes ? En rouge, ce que j'ai ajouté au code
Sub NomDefiniPlageDiscontinue()
'Macro de Robert sur XLP
Dim pl As Range 'déclare la variable pl
Dim x As Byte 'déclare la variable x (incrément de ligne)
Dim j As Byte 'déclare la variable j (incrément de colonne)
Dim derlg As Integer

derlg = Range("A65536").End(xlUp).Row 'dernière ligne de la colonne A
Set pl = Range("B5") 'définit la plage pl

For x = 5 To derlg Step 2 ' à partir de la ligne 5, boucle une ligne sur deux
For j = 2 To 198 Step 11 ' à partir de la colonne B, boucle une colonne sur 11

Set pl = Application.Union(pl, Range(Cells(x, 2), Cells(x, 198))) 'redéfinit la plage pl - 198 correspond à la colonne GP

Next x 'prochaine ligne de la boucle

pl.Name = "Base" 'nomme la plage

Range("Base").Select 'ligne a supprimer, juste pour vérifier
End Sub
Par contre, ne vous prenez pas la tête si c'est trop de travail. Le code donné est déjà très bien.
Merci
Chris
 
Dernière édition:
Re : VBA - Nom défini 1 ligne sur 2

Bonjour le fil, bonjour le forum,

le code modifié :
Code:
Sub NomDefiniPlageDiscontinue()
Dim pl As Range 'déclare la variable pl (PLage)
Dim x As Byte 'déclare la variable x (incrément de ligne)
Dim j As Byte 'déclare la variable j (incrément de colonne)
Dim derlg As Integer 'déclare la variable derlg (DERnière LiGne)
 
derlg = Range("A65536").End(xlUp).Row 'définit la dernière ligne de la colonne A
Set pl = Range("B5") 'définit la plage pl
For x = 5 To derlg Step 2 'boucle 1 : à partir de la ligne 5, une ligne sur deux
    For j = 2 To 198 Step 11 ' boucle 2 : à partir de la colonne B une colonne sur 11
        Set pl = Application.Union(pl, Cells(x, j))
    Next j 'prochaine colonne de la boucle 2
Next x 'prochaine ligne de la boucle 1
pl.Name = "Base" 'nomme la plage (PLANTON ICI !!!)
Range("Base").Select 'ligne a supprimer, juste pour vérifier
End Sub

On arrive bien a définir la plage mais planton systématique sur l'attribution d'un nom :
Code:
pl.Name = "Base" 'nomme la plage

Certainement le problème de limite dont palait Michel (MJ) dans le post #4... Je ne vois pas comment y remédier...
 
Re : VBA - Nom défini 1 ligne sur 2

Merci beaucoup Robert

Puisque ça plante au niveau du nom défini (à cause du nombre de lignes et/ou colonnes) et que le but de celui-ci était de créer une validation de donnée dans les plages concernées, est-ce qu'on peut se servir directement de pl pour le faire ?

J'ai essayé ceci (mais évidemment ça ne fonctionne pas)

Code:
With pl.validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                xlBetween, Formula1:="=pl"
    End With
Merci de ton aide précieuse

Edit : autant pour moi ! en mettant Formula1:="Maliste" bien sûr, ça fonctionne.

Merci encore
Chris
 
Dernière édition:
Re : VBA - Nom défini 1 ligne sur 2

Bonjour Chris
Salut Etienne
Salut Michel
Salut JNP
Salut Robert

En l'absence de mes amis , je signale que ce code fonctionne chez moi sous Excel 2000 (code de Robert avec Validation )
Et que le code initial de Robert fonctionne sous Excel 2010

VB:
Sub NomDefiniPlageDiscontinue()
Dim pl As Range 'déclare la variable pl (PLage)
Dim x As Byte 'déclare la variable x (incrément de ligne)
Dim j As Byte 'déclare la variable j (incrément de colonne)
Dim derlg As Integer 'déclare la variable derlg (DERnière LiGne)
derlg = Range("A65536").End(xlUp).Row 'définit la dernière ligne de la colonne A
Set pl = Range("B5") 'définit la plage pl
For x = 5 To derlg Step 2 'boucle 1 : à partir de la ligne 5, une ligne sur deux
    For j = 2 To 198 Step 11 ' boucle 2 : à partir de la colonne B une colonne sur 11
        Set pl = Application.Union(pl, Cells(x, j))
    Next j 'prochaine colonne de la boucle 2
Next x 'prochaine ligne de la boucle 1
With pl.Validation
  .Delete
  .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                xlBetween, Formula1:="a,b,c"
End With
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Microsoft 365 Export données
Réponses
4
Affichages
906
Réponses
7
Affichages
987
Réponses
1
Affichages
830
Retour