Noms variables...

  • Initiateur de la discussion Thierry
  • Date de début
T

Thierry

Guest
Je positionne ci-dessous la macro que j'utilise pour rechercher les mois dans une feuille Opération (Mvts). Le but de cette macro est de dresser une liste de tous les mois utilisés dans cette feuille, en sachant qu'il y a au moins une opération par mois, j'ai trouvé 'sage' de dresser une liste automatique du premier jour au dernier jour...
Cette liste sert ensuite de liste déroulante pour sélectionner la liste des opérations d'un mois désiré afin de les imprimer...

Le problème est le suivant :
Cette macro fonctionne la première fois seulement, le fait de nommer la plage fonctionne une fois parfaitement, et ensuite place R2C2... en zone au lieu de $B$2 ...

Ce n'est pas la première fois que j'utilise ce code, mais c'est la première fois que je n'arrive pas à le débugger... J'ai même poussé le bouchon en détruisant la feuille, et en créant une nouvelle, mais c'est pareil (évidemment, habituellement, la macro est bcp plus courte, puisque je ne fais que supprimer le nom, lui affecté une nouvelle plage, et l'insérer)

Si quelqu'un peut m'aider...

Merci d'avance

Sub ListeMois()
'
'
Dim PlageMois As Variant
Dim LgnEndMois As Variant
Dim PlgMois As Variant

Windows("Cpte.xls").Activate
Sheets("Rv").Visible = True
Sheets("Rv").Select
DateDeb = Range("PeriodeDebut")

Windows("Cpte.xls").Activate
Sheets("Mvts").Visible = True
Sheets("Mvts").Select

On Error Resume Next
ActiveSheet.ShowAllData

'Aller à la dernière ligne en B et retourner la valeur
Range("B16384").Select
Selection.End(xlUp).Select
DateFin = ActiveCell.Value

Sheets("MoisValides").Visible = True
Application.DisplayAlerts = False
Sheets("MoisValides").Delete

Sheets("Rv").Select
Sheets.Add
ActiveSheet.Name = "MoisValides"
Columns("D:IV").Select
Selection.EntireColumn.Hidden = True

Sheets("MoisValides").Select
Range("A1") = DateDeb
Range("C1") = DateFin
Range("B2") = DateDeb

'Génère la série...
Range("B2:B16384").DataSeries _
xlColumns, Type:=xlChronological, Date:=xlMonth, Stop:=DateFin

'Tri les dates par ordre décroissant
Selection.Sort Key1:=Range("B2"), Order1:=xlDescending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal

'Met à jour la liste des valeurs mois
ActiveWorkbook.Names("chpDatesListes").Delete
Range("B16384").Select
Selection.End(xlUp).Select
LgnEnd = ActiveCell.Row
PlageMois = "=MoisValides!R2C2:R" & LgnEnd & "C2 "

ActiveWorkbook.Names.Add Name:="chpDatesListes", RefersToR1C1:=PlageMois
End Sub
 
C

ChristianS

Guest
Salut,
Pour repére ta plage "PlageMois", as tu essayé d'utiliser la notation RefersToLocal ou Refers To au lieu de RefersToR1C1 dans :
PlageMois = "=MoisValides!R2C2:R" & LgnEnd & "C2 "

Pourquoi détruire ta feuille :

Sheets("MoisValides").Visible = True
Application.DisplayAlerts = False
Sheets("MoisValides").Delete

Sheets("Rv").Select
Sheets.Add
ActiveSheet.Name = "MoisValides"
Columns("D:IV").Select
Selection.EntireColumn.Hidden = True

au lieu d'un nettoyage du type :

Sub nettoie()
Application.Sheets("MoisValides").Select
Cells.Select
Selection.ClearContents
End Sub
qui conserve les plages de la feuille

Je pense que l'utilisation de la fonction "Currentregion" simplifierait la lecture et la longueur de ton code.
Bonne chance
 
T

Thierry

Guest
Non, je ne connais pas la différence de ces Refers... Es-tu à même de me préciser dans quels cas on utilise l'un ou l'autre ?
Et le currentregion (connais pas non plus)

Le VBA n'a qu'une semaine pour moi, merci de votre indulgence !
 
C

ChristianS

Guest
Salut,
Qhand tu es dans un classeur Excel, tu vas dans Outils--->Macros-->Visual Basic Editor. Une fois dans le Visual tu peux avoir toutes les explications en ligne (avec des exemples d'utilisation) soit en faisant :
- Affichage-->Explorateur d'objets ou bien F2 ou en cliquant sur l'icone "boîte jaune de la deuxième ligne , à droite.
Là, dans la nouvelle fenêtre tu saisie ton mot clé (par exemple "Refers" ou "currentregion" et tu cliques sur la paire de jumelles. Toutes les membres VBA contenant ces mots sont selectionnées.Tu cliques sur celle qui t'interessent en fonction de la classe avec laquelle tu travailles (name, range worbok etc...).
Quand ton objet choisi est surligné en bleu tu cliques alors sur le gros point d'interrogation jaune et l'aide en ligne concernant le mot entré s'affiche. il y a un bouton exemple en haut et tu cliques dessus.
Les autres méthodes d'aide en ligne sont :
- le compagnon offfice (aide intuitive en posant une question et qui n'est pas toujours efficace).
- le ? du menu principal (à droite de "Fenêtre")-->Sommaire et Index -->Index (trié par ordre alphabétique avec selections successives en entrant ton mot) ou -->Recherche
-dans ton code, tu double-cliques sur l'instruction à expliquer, tu appuies sur le bouton droit de la souris puis sur définition. Ceci ne marche pas quand tu es en mode execution. Il faut abandonner l'execution de la macro.
- Il existe aussi de bons bouquins pour lesquels ce sitesfait de la pub
salut
 
T

Thierry

Guest
Oups, désolé de la question, et malgré tout, merci pour la réponse... Tu sais, des livres, j'en ai acheté des tonnes, du débutant à l'expert, et, en fait, j'ai toujours le même niveau :-(

Si, en revanche, il existe de VRAIS BOUQUINS, je veux bien les acquérir... Si, un jour, Thierry, mon homonyme faisait un bouquin, avec ces grandioses exemples, je veux bien acheter son livre... Mais acheter du 'Pour les nuls' ou du Micro App... ...
 
T

Thierry

Guest
Euh, juste pour donner la solution...

En fait, n'arrivant pas à le gérer par macro... je passe par la fonction décaler directement sur la plage concernée, et là, ô grand bonheur, ça fonctionne parfaitement !
 

Discussions similaires

Réponses
2
Affichages
812

Statistiques des forums

Discussions
314 121
Messages
2 106 128
Membres
109 495
dernier inscrit
jerome bonneau