Nommer un ensemble de cellules (excel) [Résolu]

Signaler
Messages postés
20
Date d'inscription
jeudi 11 novembre 2004
Statut
Membre
Dernière intervention
27 janvier 2008
-
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
-
Bonjour à tous chers amis,

Dans excel, j'aimerais pouvoir gérer des "blocs" de cellules.

Par exemple, j'aimerais que les cases A1 A2 A3 et A4 soit appelés "MesCasesA"

et ensuite dans mon code vba, si je veux effacer le contenu de ces cellules, je voudrais pouvoir faire  en une seule fois :

  Range("MesCasesA").ClearContents

Question:  À quel endroit et comment je fais pour grouper les cases A1 A2 A3 et A4 et les appeler "MesCasesA" ?

Merci beaucoup !

14 réponses

Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Re,

 Beh pour ton 1/ :
Quand toi tu lances ton programme (admettons tu lances un UserForm, tu peux le mettre à l'évènement Initialize de ta Form)
Par contre, pense à la supprimer au Unload de ton UserForm :
ActiveWorkbook.Names("MesCasesA").Delete

Pour ton 2/ :
Tu veux donc définir la plage B1:C2.
La première cellule est B1, donc c'est la première ligne, et la deuxième colonne.--> Row 1 & Column 2

La première cellule est C2, donc c'est la deuxième ligne, et la troisième colonne.

--> Row 2 & Column 3

Conclusion, ActiveWorkbook.Names.Add Name:="MesCasesBetC", RefersToR1C1:="=NomFeuille!R1C2:R2C3"

J'espère que ça répond à tes attentes

@++

<hr size ="2" width="100%" />( Nouveau forum : Exclusivement Office & VBA
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Oui, j'ai ma petite idée dans

Private Sub Workbook_Open()
ActiveWorkbook.Names.Add Name:= "EnsembleA", RefersToR1C1:="=NomFeuille!R10C2:R30C3"
End Sub

Je suppose que ta feuille ne s'appelle pas NomFeuille . Remplace ça par le bon nom

@++

<hr size ="2" width="100%" />( Nouveau forum : Exclusivement Office & VBA
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Salut,

ActiveWorkbook.Names.Add Name:="MesCasesA", RefersToR1C1:="=NomFeuille!R1C1:R4C1"

Pense à remplacer NomFeuille.
R1C1:R4C1 veut dire : Row1 Column1 : Row4 Column1 ( bref, A1:A4)

@++

<hr size="2" width="100%" />( Nouveau forum : Exclusivement Office & VBA
Messages postés
20
Date d'inscription
jeudi 11 novembre 2004
Statut
Membre
Dernière intervention
27 janvier 2008

Salut et merci

1) A quel endroit dois-je écrire le ActiveWorkbook.etc.... ? Dans une fonction initialize ? (J'aimerais que le groupement soit effectivement pendant toute la durée de mon programme)

2) Ok et si je veux grouper les cases  B1,B2,C1 et C2  comment écrire ce genre de combinaison ?

Merci
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Lire :

La première cellule est B1, donc c'est la première ligne, et la deuxième colonne.--> Row 1 & Column 2

La <strike>première</strike> dernière cellule est C2, donc c'est la deuxième ligne, et la troisième colonne. --> Row 2 & Column 3

(mauvais copier / coller, désolé)

@++

<hr size="2" width="100%" />( Nouveau forum : Exclusivement Office & VBA
Messages postés
20
Date d'inscription
jeudi 11 novembre 2004
Statut
Membre
Dernière intervention
27 janvier 2008

Merci pour la zone multiple.

Désolé pour ma persistance mais je débute avec excel donc je ne comprend pas tout...

Je n'utilise pas de useform (donc pas de initialize)

Par contre, j'ai deux boutons dans mon fichier :

J'ai des cases que l'utilisateur peut cliquer dès qu'il ouvre le fichier excel. 
Quand il en sélectionne 3, le bouton  OK devient cliquable et je fais  un traitement avec les cases qu'il a cliqué.
A tout moment, il peut cliquer sur le bouton RESET qui annule la sélection des cases.

Du coup, il faudrait que je mette
 ActiveWorkbook.Names.Add Name:="MesCasesBetC", RefersToR1C1:="=NomFeuille!R1C2:R2C3"
de façon à ce qu'il soit éxécuté à l'ouverture du fichier excel (et qu'il "reste en mémoire" jusqu'à ce qu'on ferme le fichier)

(je ne peux donc pas juste le mettre dans les événement de type Boutons_Click() )

merci
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Alors met les codes dans les évènements Open et Close de ton WorkBook.
Tiens, c'est cadeau (faut bien se faire un peu de pub) :

http://www.vbfrance.com/tutoriaux/DEBUTANTS-DECOUVRIR-
ENVIRONNEMENT-VISUAL-BASIC-SOUS-MICROSOFT-EXCEL_646.aspx

Double click sur ThisWorkbook :

Et choisi les évènements Open et Close :

@++

<hr size="2" width="100%" />( Nouveau forum : Exclusivement Office & VBA
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Oups, pas Close mais BeforeClose

@++

<hr size="2" width="100%" />( Nouveau forum : Exclusivement Office & VBA
Messages postés
20
Date d'inscription
jeudi 11 novembre 2004
Statut
Membre
Dernière intervention
27 janvier 2008

Alors j'ai une erreur de nom ... Je te donne ce que j'ai.

Dans mon "ThisWorkbook", j'ai :

Private Sub Workbook_Open()
ActiveWorkbook.Names.Add Name:= "EnsembleA", RefersToR1C1:="=NomFeuille!R10C2:R30C3"
End Sub
-------------------------
Private Sub Workbook_BeforeClose(Cancel As Boolean)
ActiveWorkbook.Names("EnsembleA").Delete
End Sub
-------------------------

Dans mon "Feuil1(MonProg)" j'ai :

Private Sub BoutonInitialiser_Click()
     Dim ensemble As Range
      Sheets("MonProg").Activate
     Set ensemble = Range("EnsembleA") 
....
End Sub

Quand je clique sur le bouton Initialiser j'obtiens le message d'erreur :

Erreur d'exécution '1004':
La méthode 'Range' de l'objet '_Worksheet' a échoué

En cliquant sur Déboguage je tombe sur ma ligne
     Set ensemble = Range("EnsembleA")

C'est comme si il ne reconnaissait pas le nom EnsembleA ...
Une idée

Merci
Messages postés
20
Date d'inscription
jeudi 11 novembre 2004
Statut
Membre
Dernière intervention
27 janvier 2008

ok ça ne plante plus....

Un grand grand grand merci pour cet apprentissage !
Messages postés
20
Date d'inscription
jeudi 11 novembre 2004
Statut
Membre
Dernière intervention
27 janvier 2008

Salut mortalino

Tu te souviens, j'avais l'erreur 1004
La méthode 'Range' de l'objet '_Worksheet' a échoué

Et il avait fallu que je mette le nom de ma feuille au lieu de NomFeuille dans

Private Sub Workbook_Open()
ActiveWorkbook.Names.Add Name:="EnsembleA", RefersToR1C1:="=NomFeuille!R10C2:R30C3"
End Sub

Cela avait bien arrangé le problème dans mon Sub :
Public Sub initialisation() qui se trouve dans Feuil1.

Maintenant, je fais exactement la même chose, dans la même Feuil1 mais dans une fonction au lieu d'un Sub.

Function Memoire(ByVal NumeroTire As Integer) As Boolean

Et là, j'obtiens l'erreur...
une idée ?

Merci !!!
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Ok, mais peux tu me mettre tes codes et me dire où ils se trouvent ?
Comment appelles-tu la fonction et sur quelle ligne ça plante ?

merci

@++

<hr size="2" width="100%" />( Nouveau forum : Exclusivement Office & VBA
Messages postés
20
Date d'inscription
jeudi 11 novembre 2004
Statut
Membre
Dernière intervention
27 janvier 2008

Salut...

bon c'est à n'y rien comprendre (ça arrive souvent en info).... j'ai fermé excel pendant quelques heures et au moment de retravailler, tout fonctionne comme voulu...

Tant mieux ! Étant donné que le Sub et la Function étaient dans la même Feuil1, je comprend vraiment pas pourquoi tout à l'heure il ne voulait pas reconnaitre les noms donnés aux groupes de cellules dans la Function alors qu'il les reconaissait dans le Sub....

Bref sans rien changer, c'est résolu :)

@+
merci encore 
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Tant mieux.
Pour infos, si tu as mis ta function dans le module de code de ta Feuil1, et que tu appelles cette fonction depuis un autre module (par exemple, le module de code ThisWorkbook, là où se trouvent WorkBook_Open et BeforeClose), ça ne fonctionnera pas.
Il faut de ce cas précis placer ta fonction dans un Module supplémentaire (menu Insertion, Module) pour que celle -ci soit accessible partout dans ton projet.

@++

<hr size="2" width="100%" />( Nouveau forum : Exclusivement Office & VBA