OVH Cloud OVH Cloud

VBA - syntaxe ultra compacte "à la cacou AV" [[flux.xls]Graph1!B4] pour cells et graph

7 réponses
Avatar
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

7 réponses

Avatar
Michel Gaboly
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 <[>(brackets?)).

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

Avatar
AV
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

Avatar
twinley
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 <[>(brackets?)).

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







Avatar
twinley
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





Avatar
anomymousA
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 <[>(brackets?)).

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










Avatar
Michel Gaboly
De rien ;-))


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 <[>(brackets?)).

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



Avatar
twinley
Bonjour aA

Comme quoi, il ne faut pas hésiter à poser la question. Je vais libérer
de temps en temps. Ptet toutes les heures. Je vais suveiller si la RAM
s'engorge.

Par ailleurs,un programme qui tourne toute la journée sous Excel, ca
doit être quelque chose !!!!


Eh eh, nous ne faisons pas les choses à moitié très chaèèèèr.
Et ça tourne !!! Je suis sur que j'arriverais à épater plus d'une
vieille tige...Pas sur la qualité du code, certes.
Avec le recul je me dis que j'ai été un peu gonflé de me lancer mais
avec l'aide du forum c'est une question de temps et de patience.

J'ai encore une question :
si je met Public f as Worksheet, c as Chart au lieu de Dim

faut-il mettre les set dans chaque module ou bien je met les deux lignes
ci-dessous seulement dans le module principal qui amorce le programme et
je suis tranquille ?
Et si je rédéclare à chaque tour sans libérer ?

Set f = WorkBooks("flux.xls").Sheets("Graph1")
Set c = f.ChartObjects("Graphique1").Chart

Je pose la question avant de tester car tout est en chantier. Alors
autant partir sur de bonne base. Je ne cache pas que cette déclaration
des variables me préoccupait et j'y suis allé en reculant.

Merci pour l'aide.

à+twinley

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 <[>(brackets?)).

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