GNT sans publicité, site mobile, fonctionnalitées exclusives...

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
Lire les 7 réponses

Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Michel Gaboly
Le #1960828
Bonjour twinley,

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


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




--
Cordialement,

Michel Gaboly
www.gaboly.com

AV
Le #1960826
Dans la série "les chaînes impossible d'AV", je baisse les bras.


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

Comment remplacer ce qui suit à la façon AV avec une formule
WorkBooks("flux.xls").Sheets("Graph1").Range(revcol & 12) = "=NA()"


Comme ça (attention à la concaténation des variables)
Range("[flux.xls]Graph1! " & revcol & "12") = "=NA()"

AV

twinley
Le #1960824
Bonjour Michel,

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

Bonjour twinley,

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



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
Le #1960819
Merci AV pour les précisions.
Je viens de faire une réponse à Michel Gaboly pour les syntaxes avec des
variables objets.
Je prend mes repères doucement.

à+twinley

Dans la série "les chaînes impossible d'AV", je baisse les bras.



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


Comment remplacer ce qui suit à la façon AV avec une formule
WorkBooks("flux.xls").Sheets("Graph1").Range(revcol & 12) = "=NA()"



Comme ça (attention à la concaténation des variables)
Range("[flux.xls]Graph1! " & revcol & "12") = "=NA()"

AV





anomymousA
Le #1960818
salut, 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+


Bonjour Michel,

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

Bonjour twinley,

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



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










Publicité
Suivre les réponses
Poster une réponse
Anonyme