selection plage

G

gab

Guest
Bonjour,

J'utilise ceci en vba pour nommer une plage de données

ActiveWorkbook.Names.Add Name:='liste', RefersToR1C1:='=main!R2C3:R' & WorksheetFunction.CountA(.Columns(3)) +1 & 'C3'

le souci, c'est que dans ma plage (C2 à C32), je n'ai que des formules matricielles de qui me renvoient des valeurs -> de C2 à C(variable).

La ligne de code ci-dessus me compte toutes les cellules contenant quelque chose, y compris les formules... moi je souhaite que cela compte uniquement le nombre de cellules contenant des valeurs.



quelqu'un sait ?
 
G

gab

Guest
J'ai essayé mais ca ne fonctionne pas... cela ne sélectionne que la cellule qui contient du texte pur (le titre de ma colonne).

Pour info, en C2 il y a mon titre et en C3 il y a cette formule (développée jusqu'à c32) :

{=INDEX(colpays;MIN(IF(Pays=Pays;IF(COUNTIF(C$2:C2;Pays)=0;ROW(Pays)))))&''}

ce qui signifie qu'entre C3 et C32 il peut potentiellement y avoir de 0 à 30 valeurs de rapportées par cette formule.

Une fois que la formule a apporté ces éléments, je souhaite faire tourner une macro qui nomme 'liste' la plage de $C$2 à $C(dernière cellule non vide).

C'est pas facile... pour moi.
 

Hervé

XLDnaute Barbatruc
re

Pas sur de comprendre.

Si tu veux nommer la plage de c2:c derniere cellule non vide (quelque soit le nombre renvoyer pas les formules) :

  Range('C2:c' & Range('c65536').End(xlUp).Row).Name = 'list'

Si tu veux nommer les cellules seulement si le résultat de la formule est différent de 0 :

Sub Bouton1_QuandClic()
Dim c As Range
Dim plage As Range

Set plage = Range('C2')
For Each c In Range('c3:c32')
   
If c <> 0 Then
&nbsp; &nbsp; &nbsp; &nbsp;
Set plage = Union(plage, c)
&nbsp; &nbsp;
End If
Next c
plage.Name = 'liste'
&nbsp; &nbsp;
End Sub


salut
 
G

gab

Guest
Non ça ne fonctionne toujours pas. Ca me nomme la plage C2:C32 complète.
C'est assez curieux, car les cellules où se trouvent les formules sont considérées comme étant non vides, même si il ne renvoient aucune valeur....

J'ai essayé différement en faisant ceci :

Range('c2:c32').Find('*').Select

et ça sélectionne la cellule C3, qu'il y ait une valeur ou non....

vraiment j'ai du mal à trouver la solution à cette énigme
 

Hervé

XLDnaute Barbatruc
re

Moi, ou j'ai du mal, c'est comprendre ce que tu veux nommer.

pourrais-tu mettre un fichier avec des données type en c2 : c32 et nous dire dans cette exemple qu'elles sont les cellules à nommer.

je commence à manquer d'imagination en terme de syntaxe :)

salut
 

Discussions similaires

Réponses
5
Affichages
136

Statistiques des forums

Discussions
312 345
Messages
2 087 485
Membres
103 557
dernier inscrit
gerard.messerlin68@orange