Utilisation plage nommée en dehors d'une macro

Pseudoto

XLDnaute Nouveau
Bonjour !

De retour en ayant bien avancé sur mon tableau, petite problématique.

Ma macro de tri réalise des zones de données par filtre élaboré. A chaque critère succesif de tri, je nomme la zone ainsi créée à la suite des précédentes : affaires_critère1, affaire_critère2, etc....Pour l'instant, j'ai fait dans la simplicité, je les nomme directement après l'opération de filtre élaboré en prenant la dernière zone ajoutée (via un usedrange).

Code:
Sub Nommer_zone(nomdezone)

    Sheets("2011.test").Select
    Set nomdezone = ActiveSheet.Rows(numerosaut2lignes() - 2).CurrentRegion

End Sub

et

Code:
Function numerosaut2lignes()

Dim Derligne&
Derligne = Sheets("2011.test").UsedRange.Cells.Find("*", , , , xlByRows, xlPrevious).Row
numerosaut2lignes = Derligne + 2

End Function

(en fait, j'avais créé la fonction numerosaut2lignes parce qu'entre chaque range collé, je saute 2 lignes).



J'ai besoin de ces noms de range pour d'autres macros (par exemple, une macro qui mets en forme ces ranges ou bien une autre qui va agir uniquement à partir de la range affaire_critère2.

Comment puis je faire ?
Dois je faire une fonction de nommage de zone mieux foutue (par exemple grâce à l'union de ligne qui serait testée une par une et qui les ajouterait au range ainsi créé ?) ?
Y'as t'il une possibilité de définir un range comme "absolu" ?
Je sais qu'on peut par exemple définir des "Public Const".

Je suis preneur de conseils ^^
 

Bebere

XLDnaute Barbatruc
Re : Utilisation plage nommée en dehors d'une macro

bonjour Pseudoto
un fichier - de 50k .xls ou .zip(compressé) serait le bienvenu
ce que je pense il faut copier le résultat du filtre et à partir de là créer les noms
à bientôt
 

Gorfael

XLDnaute Barbatruc
Re : Utilisation plage nommée en dehors d'une macro

Salut Pseudoto et le forum
Personnellement, je ne comprends rien à ta demande
Tu ne nommes pas de plage de cellules, tu affectes à une variable (déclarée en globale, j'espère) une plage de cellules.
Mais ce n'est pas avec ton embryon d'explication que je peux t'aider réellement.
A+
 

Pseudoto

XLDnaute Nouveau
Re : Utilisation plage nommée en dehors d'une macro

@Bebere : malheureusement, je manie des données confidentielles donc compliqué de t'envoyer un fichier...je vais essayer de tester ta solution

@Gorfael : ok, pigé ... vais me débrouiller hein ... navré de pas être clair, j'ai débuté les macros y'a 3 semaines donc entre "définir une plage de données par une range" et faire un "set ...." je sais pas faire la différence

navré...
 

Bebere

XLDnaute Barbatruc
Re : Utilisation plage nommée en dehors d'une macro

bonjour Gorfael
Pseudodo
tu mets un fichier avec quelques données fictives et explications
sur ce que tu veux obtenir
un fichier de Jb pour te donner des idées
à bientôt
 

Pièces jointes

  • FiltreElaboreExtraitMacro3(1).xls
    28 KB · Affichages: 62
  • FiltreElaboreExtraitMacro3(1).xls
    28 KB · Affichages: 65
  • FiltreElaboreExtraitMacro3(1).xls
    28 KB · Affichages: 64
Dernière édition:

Pseudoto

XLDnaute Nouveau
Re : Utilisation plage nommée en dehors d'une macro

Compliqué à faire le tableau avec données fictives.

Ma demande me semble claire pourtant :'( = comment utiliser des plages de données (range ???? définies dans une macro) dans une AUTRE macro ... ?

J'ai testé

Code:
Public affaires_critère1 as range

ça donne rien ...
 

Pseudoto

XLDnaute Nouveau
Re : Utilisation plage nommée en dehors d'une macro

Erf, j'ai déjà vu ces filtres mais ma demande n'est donc pas claire vu ta réponse...

J'ai déjà utilisé les filtres de JB pour copier dans un nouvelle onglet des listes d'affaires classées par critères.

Exemple : premier bloc = affaires ciblées, deuxième bloc = affaire suivies, etc.

Dans ma macro de tri, j'ai affecté un nom à ces blocs (via "Set zone = ActiveSheet.Rows(numerosaut2lignes() - 2).CurrentRegion").

Je veux maintenant faire une macro qui prend ces blocs et inscris verticalement de façon dynamique du texte le long de ces blocs ... d'où la nécessité de sélectionner ces zones ...ce que je ne peux pas faire puisque les "zone" sont définies localement dans ma macro) ...
 

Bebere

XLDnaute Barbatruc
Re : Utilisation plage nommée en dehors d'une macro

un peu de code,tu peux diminuer 65536
'une zone d'une colonne et plusieurs lignes
Set Zone = ActiveSheet.Range("A1:A" & ActiveSheet.Range("A65536").End(xlUp).Row)
'une zone 3 colonnes et plusieurs lignes
Set Zone = ActiveSheet.Range("A1:C" & ActiveSheet.Range("A65536").End(xlUp).Row)
'donne un nom à la zone(insertion,nom défini)
Zone.Name = "Nom1"
'parcourir les lignes
For l = 1 To Zone.Rows.Count

Next
'ou
For l = 1 To Range("Nom1").Rows.Count
 

Gorfael

XLDnaute Barbatruc
Re : Utilisation plage nommée en dehors d'une macro

Salut Pseudoto et le forum
Au vu de tes différents postes, je crois comprendre ton problème : tu veux définir une plage de cellules dans une macro et utiliser cette plage dans une autre macro.
Si c'est ça, ça n'a rien à voir avec le fait de nommer une plage.

Soit tu transmets des paramètres d'une macro à une autre. Mais faut savoir exactement ce que tu veux faire.
Soit tu déclares variable dans la zone d'en-tête d'un module.
3 possibilités :
- Tu déclares ta variable dans une macro => son domaine de travail est la macro, et elle se réinitialise à chaque lancement de la macro
- Tu déclares ta variable dans l'en-tête (la partie notée (Générale) dans la case en haut à gauche du module) dans un module de classe feuille ou WorkBook => son domaine de travail est le module en question et elle est remise à jour à chaque fois que tu ferme le module (donc le classeur).
-Tu déclares ta variable dans un module général (dans la dossier module de la fenêtre explorateur de projet) => son domaine de travail est Excel et elle n'est remise à jour que lorsqu'on ferme (et ouvre) le fichier la contenant. => C'est une variable qualifiée de Globale

Donc, dans le module où tu déclares tes function, tout en haut de la feuille, tu mets
Dim DerLigne as long
Tu supprimes ton Dim Derligne& dans ta function numerosaut2lignes
Tu exécutes ta function une fois => si tu utilises derligne dans une autre fonction, tu verras qu'elle n'est pas à 0.

Il ne faut pas confondre un fichier de travail (qui contient des données confidentielles, entre autres) avec un fichier d'essais.
Un fichier d'essais contient une feuille, quelques rares fois 2, et 10 lignes/colonnes max de données. Il sert juste à exposer un problème (ou une question) avec les données de départ, et ce qu'on voudrait obtenir par formule/function ou macro. C'est plus simple que de le décrire en français. C'est souvent une copie d'un fichier de travail, avec des données simples (une lettre pour un texte, un chiffre pour un nombre) pour expliquer la disposition de la feuille : c'est pour ça que tu n'as droit qu'à des fichiers de taille limitée.
Il faut qu'on saisisse en une simple lecture le problème, et ne pas chercher à travers des dizaines de feuilles, des centaines de lignes de code, où est le problème. Personnellement, je n'aime pas perdre plus de temps à chercher le problème qu'à le résoudre.
A+
 

Pseudoto

XLDnaute Nouveau
Re : Utilisation plage nommée en dehors d'une macro

Merci Gorfael. Le fait est que te transmettre mon fichier de "travail" ne peut pas se faire sans un minimum de données "test". Je viens de le faire avec un ami et comme un idiot, j'ai laissé des données. Je ne veux pas prendre le risque ici. Désolé :/ je comprends que mon soucis soit compliqué du coup à traiter.


Je reviens à la charge avec mon soucis. J'ai décidé de faire autrement.

En définitive, je souhaites sélectionner ces plages de données (tu as bien saisi mon sujet) pour les mettre en forme.
C'est finalement le seul but.

Voici donc le début de macro que j'ai écrit :

Code:
Sub Titrage_lateral(critere)
        
    Select Case critere

    Case "affaires_traitees"
        Meslignes = ""
        i = 1
        NombreLignes = 200
        While i < NombreLignes + 1
        If Sheets("2011.test").Cells(i, 9).Value = "Traitée" Then
        Meslignes = Meslignes & "E" & i & ":" & "Q" & i & ","
        End If
        i = i + 1
        Wend
        Meslignes = Left(Meslignes, Len(Meslignes) - 1)
        Sheets("2011.test").Range(Meslignes).Select
        
    Case "bureaux_neufs"
        Meslignes = ""
        i = 1
        NombreLignes = 49 'fait bugguer au delà de 50 lignes
        While i < NombreLignes + 1
        If Sheets("2011.test").Cells(i, 15).Value = "Bureau" Then
            If Sheets("2011.test").Cells(i, 16).Value = "N" Then
            Meslignes = Meslignes & "E" & i & ":" & "Q" & i & ","
            End If
        End If
        i = i + 1
        Wend
        
        Meslignes = Left(Meslignes, Len(Meslignes) - 1)
        Sheets("2011.test").Range(Meslignes).Select '<================ BUG DESSUS
    
    End Select

End Sub

En clair, je test une valeur sur la ligne et si elle est égale à une données (exemple dans le premier cas), je la sélectionne. Je les rassemble ensuite ensemble et cela forme ma sélection pour la suite.

J'ai un soucis dès le deuxième cas .... j'ai imbriqué 2 if pour faire en fait un "if ... and ... " mais comme le résultat de la sélection est plus important, j'ai l'impression que excel bug. En clair, si je mets un autre critère dans le cas 2 avec moins de résultats, ça marche, sinon, erreur 1004.

Auriez vous une piste ? On me parle de limite de nombres de lignes dans le cas d'une sélection discontinue ...
 

Discussions similaires

Statistiques des forums

Discussions
312 493
Messages
2 088 957
Membres
103 990
dernier inscrit
lamiadebz