VBA - syntaxe ultra compacte "à la cacou AV" [[flux.xls]Graph1!B4] pour cells et graph
Le
twinley
Bonjour à tous,
Dans la série "les chaînes impossible d'AV", je baisse les bras.
Je modifie mon code en ajoutant le nom du classeur pour éviter des aléas.
Partout ou c'est possible je met [[flux.xls]Graph1!B4] en lieu et place
de WorkBooks("flux.xls").Sheets("Graph1").Range("B4").
Déjà c'est le truc qui s'invente pas
Comment remplacer ce qui suit à la façon AV avec une formule
ultra-compacte ?
WorkBooks("flux.xls").Sheets("Graph1").Range(revcol & 12) = "=NA()"
la réponse précédente devrait régler le cas suivant aussi :
x = Worksheets("Graph1").Range(Cells(lign1, 6), Cells(lign2,
6)).Address
Pendant que j'y suis aussi, pour le chemin complet d'un graphique ?
With
Workbooks("flux.xls").Worksheets("Graph1").ChartObjects("Graphique1").Chart.Axes(xlValue)
If Right(Int(Mini), 1) < 5 Then
end with
Petite curiosité, cette syntaxe ultra ramassée semble donner la main
automatiquement à l'éditeur pour placer le tiret de découpage de ligne.
J'ai des lignes qui sont longues et j'avais posé le tiret underscore là
ou je voulais.
Avec la syntaxe "à la papa", le tiret reste là ou on l'a placé.
Avec la syntaxe "à la cacou AV", le tiret se tire tout seul et se place
là ou cela l'arrange.
Merci pour l'aide
--
à+twinley
Dans la série "les chaînes impossible d'AV", je baisse les bras.
Je modifie mon code en ajoutant le nom du classeur pour éviter des aléas.
Partout ou c'est possible je met [[flux.xls]Graph1!B4] en lieu et place
de WorkBooks("flux.xls").Sheets("Graph1").Range("B4").
Déjà c'est le truc qui s'invente pas
Comment remplacer ce qui suit à la façon AV avec une formule
ultra-compacte ?
WorkBooks("flux.xls").Sheets("Graph1").Range(revcol & 12) = "=NA()"
la réponse précédente devrait régler le cas suivant aussi :
x = Worksheets("Graph1").Range(Cells(lign1, 6), Cells(lign2,
6)).Address
Pendant que j'y suis aussi, pour le chemin complet d'un graphique ?
With
Workbooks("flux.xls").Worksheets("Graph1").ChartObjects("Graphique1").Chart.Axes(xlValue)
If Right(Int(Mini), 1) < 5 Then
end with
Petite curiosité, cette syntaxe ultra ramassée semble donner la main
automatiquement à l'éditeur pour placer le tiret de découpage de ligne.
J'ai des lignes qui sont longues et j'avais posé le tiret underscore là
ou je voulais.
Avec la syntaxe "à la papa", le tiret reste là ou on l'a placé.
Avec la syntaxe "à la cacou AV", le tiret se tire tout seul et se place
là ou cela l'arrange.
Merci pour l'aide
--
à+twinley

Poser une question


Contrairement à toi, je ne suis pas du tout amateur de l'emploi des
crochets ; cf. mon post d'hier à 17h18 heure de Paris (fil Re: VBA
Utilisation des
Une des faiblesses de cette syntaxe est la difficulté à construire une
chaine de caractères en manipulant une variable (revcol ou ligne2 dans
tes exemples).
Tu peux aussi raccourcir ton code avec des variables objets :
Dim f as Worksheet, c as Chart
Set f = WorkBooks("flux.xls").Sheets("Graph1")
Set c = f.ChartObjects("Graphique1").Chart
f.Range(revcol & 12) = "=NA()"
x = f.Range(Cells(lign1, 6), Cells(lign2, 6)).Address
With c.Axes(xlValue)
...
End With
--
Cordialement,
Michel Gaboly
www.gaboly.com
Il n'y a pas de miracle mais simplement l'utilisation de références extérieures
dans l'objet Range
[[flux.xls]Graph1!B4] (utilisation de la méthode Evaluate)
est l'équivalent de :
Range("[flux.xls]Graph1!B4")
Ne pas faire de confusion donc entre les crochets issus de l'Evaluate et ceux
destinés à encadrer le nom du classeur
Comme ça (attention à la concaténation des variables)
Range("[flux.xls]Graph1! " & revcol & "12") = "=NA()"
AV
Je suis surtout fan de ce qui marche et de ce que je retiens et de ce
qui est performant. :-D
Les crochets sont sympa pour un range sur une cellule.
J'étais en train de travailler sur les variables objets ( tu m'apprends
le nom !) mais bien moins vite que toi pour les range(cells... et les chart.
Il y aura un peu des deux dans mon code pour ne faire offense à personne.
Pas de doute, il faut maitriser toutes les syntaxes...
J'ai lu qu'il fallait libérer la mémoire à la fin par
Set f = Nothing.
Je suppose que si le programme tourne toute la journée, cela ne sert à
rien de mettre = nothing. Quand on ferme le classeur, tout se vide.
Merci pour tes exemples.
à+twinley
Je viens de faire une réponse à Michel Gaboly pour les syntaxes avec des
variables objets.
Je prend mes repères doucement.
à+twinley
si le programme tourne toute la journée
Il y a très souvent un interet à liberer l'espace mémoire, donc il convient
de ne pas s'en priver.
Par ailleurs,un programme qui tourne toute la journée sous Excel, ca doit
être quelque chose !!!!
Enfin, sur les crochets, je partage assez l'avis de Michel Gaboly. Il y a
des moments où l' élegance nuit plus qu'elle ne sert. En gos, le mieux est
parfois l'ennemi du bien.
A+