Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2963 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [VBA][Excel]definir la selection dans une macro [resolu]

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[VBA][Excel]definir la selection dans une macro [resolu]

n°610619
Oliver The​ Great
There is no plan B
Posté le 13-01-2004 à 16:46:15  profilanswer
 

Salut,
 
Je veux ecrire une macro qui me fera un joli graphe avec des titres, etc. Ca c'est facile, surtotu avec l'enregistreur.
 
Mais mon workbook contient plein de sheets.
 
Comment commencer ma macro pour que la source des donnees soit la selection courante ? (i.e. dans la page courante, quel que soit son nom)
 
Grosso modo, pour le moment j'ai ca :

Code :
  1. Range("B6:F9" ).Select
  2. '    Application.CutCopyMode = False
  3. '    Charts.Add
  4. '    ActiveChart.ChartType = xlColumnClustered
  5. '    ActiveChart.SetSourceData Source:=Sheets("Sheet3" ).Range("B6:F9" ), PlotBy:= _
  6. '        xlRows
  7. '    ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet3"


 
je veux que toutes les refs relatives a B6:F9 et Sheet3 deviennent un truc du style CurrentRange et CurrentSheet.
 
Apres, je me debrouillerai. A noter que j'ai a cote de moi Office 97 VB programmer's guide, et que ca n'est mentionne nulle part (et j'ai ausi cherche dans des tutoriaux sur le net, mais j'ai rien trouve...)
 
Merci beaucoup de votre aide.


Message édité par Oliver The Great le 20-01-2004 à 09:51:17

---------------
"The two most common elements in the universe are Hydrogen and stupidity." - Harlan Ellison
mood
Publicité
Posté le 13-01-2004 à 16:46:15  profilanswer
 

n°610679
dalcap
Posté le 13-01-2004 à 17:02:36  profilanswer
 

heu, c'est pas directement 'Selection' l'objet que tu cherches ??
 
exemple: je sélectionne une zone de ma feuille,
je lance l'enregistrement de ma macro
j'applique une modif bidon (ici la couleur des cellules)
j'arrete l'enregistrement et j'ai la macro suivante
 

Code :
  1. Sub Macro2()
  2.     With Selection.Interior
  3.         .ColorIndex = 6
  4.         .Pattern = xlSolid
  5.     End With
  6. End Sub


 
c'est ça que tu cherches ?


Message édité par dalcap le 13-01-2004 à 17:03:10
n°610709
Oliver The​ Great
There is no plan B
Posté le 13-01-2004 à 17:13:30  profilanswer
 

Oui, ca serait bon, mais comment on remplace ca dans les refs au milieu des fonctions ? (chart, table, etc.) ?
 
Par exemple, dans
 
ActiveChart.SetSourceData Source:=Sheets("Sheet3" ).Range "B6:F9" ), PlotBy:= _xlRows
 
je remplace alors sheets et range par quoi ?
 
Merci
 


---------------
"The two most common elements in the universe are Hydrogen and stupidity." - Harlan Ellison
n°610773
dalcap
Posté le 13-01-2004 à 17:42:21  profilanswer
 

pourrais-tu essayer cela

Code :
  1. ActiveChart.SetSourceData Source:=Selection

??

n°610776
Oliver The​ Great
There is no plan B
Posté le 13-01-2004 à 17:45:06  profilanswer
 

J'ai essaye, ca reste en jaune, il aime pas... :(


---------------
"The two most common elements in the universe are Hydrogen and stupidity." - Harlan Ellison
n°610814
dalcap
Posté le 13-01-2004 à 17:59:36  profilanswer
 

ok, ok,
 
ça marcherait si l'on peut donner un nom à ta sélection

Code :
  1. ActiveChart.SetSourceData Source:=Range("Ma_Selection" ), PlotBy _        :=xlColumns


 
on peut donner un nom à une zone dynamiquement ?

n°610826
Oliver The​ Great
There is no plan B
Posté le 13-01-2004 à 18:05:54  profilanswer
 

si je fais un set mySelection = Selection.Interior p-e... je regarde ca.


---------------
"The two most common elements in the universe are Hydrogen and stupidity." - Harlan Ellison
n°610828
Oliver The​ Great
There is no plan B
Posté le 13-01-2004 à 18:07:53  profilanswer
 

method "range" of object "_global" failed :(


---------------
"The two most common elements in the universe are Hydrogen and stupidity." - Harlan Ellison
n°610829
dalcap
Posté le 13-01-2004 à 18:08:30  profilanswer
 

au fait, ce n'est peut-être pas la seule solution de nommer la sélection, t'imagines si tu exécutes plusieurs fois la macro, il faut qu'à chaque fin de traitement tu détruises (?) le nom de la sélection qui doit être unique dans excel je crois
il ya peut-être un autre moyen...
up :bounce:

n°610831
Oliver The​ Great
There is no plan B
Posté le 13-01-2004 à 18:10:06  profilanswer
 

idem avec Set dans ou hors du With


---------------
"The two most common elements in the universe are Hydrogen and stupidity." - Harlan Ellison
mood
Publicité
Posté le 13-01-2004 à 18:10:06  profilanswer
 

n°610833
Oliver The​ Great
There is no plan B
Posté le 13-01-2004 à 18:12:44  profilanswer
 

toutes ces infos sont dans un bouquin precis ? Je ne trouve que des machins qui traitent d'objets, de methodes, rien qui parte de la base, ou qui ait une liste des fonctions avec les arguments
 
C'est vraiment du B-a-ba il me semble, mais dur a trouver...


---------------
"The two most common elements in the universe are Hydrogen and stupidity." - Harlan Ellison
n°610836
dalcap
Posté le 13-01-2004 à 18:15:52  profilanswer
 

Oliver The Great a écrit :

method "range" of object "_global" failed :(


heu  :??:  
 
voici le code que m'a généré l'enregistreur de macro
j'ai rempli quelques lignes:
1   10
2   20
3   10
4   15
je sélectionne ces 8 cellules, je les nomme 'Ma_Selection', je lance l'enregistreur

Code :
  1. Sub Macro1()
  2. '
  3.     With Selection.Interior
  4.         .ColorIndex = 6
  5.         .Pattern = xlSolid
  6.     End With
  7.     Charts.Add
  8.     ActiveChart.ChartType = xlColumnClustered
  9.     ActiveChart.SetSourceData Source:=Range("Ma_Selection" ), PlotBy _
  10.         :=xlColumns
  11.     ActiveChart.Location Where:=xlLocationAsObject, Name:="Feuil1"
  12.     With ActiveChart
  13.         .HasTitle = False
  14.         .Axes(xlCategory, xlPrimary).HasTitle = False
  15.         .Axes(xlValue, xlPrimary).HasTitle = False
  16.     End With
  17. End Sub


 
ca me fait mon tableau.
 
bon, je suis d'accord que cela ne se réfère plus à la sélection pointée à la souris mais à celle nommée, mais, bon, si l'on peut faire un truc du genre

Code :
  1. ActiveWorkbook.Names.Add Name:="Ma_selection2", RefersToR1C1:= _
  2.         Selection


ca serait pas mal...

n°610850
dalcap
Posté le 13-01-2004 à 18:20:16  profilanswer
 

Oliver The Great a écrit :

toutes ces infos sont dans un bouquin precis ? Je ne trouve que des machins qui traitent d'objets, de methodes, rien qui parte de la base, ou qui ait une liste des fonctions avec les arguments
 
C'est vraiment du B-a-ba il me semble, mais dur a trouver...


 
Heu, je ne sais pas, pour le peu que je me sers d'excel, j'ai commencé par l'enregistreur de macro. je le lance, j'essaye plein de trucs, et je regarde le résultat dans le code...
après on m'avait montrer l'explorateur d'objets, qui peut être lui aussi très pratique pour voir ce que l'on peut faire...
t'as regardé du côté de ActiveCell ? La première chose que je vois c'est

Citation :

Property ActiveCell As Range


si cela peut sélectionner plusieurs cellules, c bon :)

n°610861
Oliver The​ Great
There is no plan B
Posté le 13-01-2004 à 18:25:41  profilanswer
 

ben nommer une plage, c'est pas cool, parce que le but c'est d'utiliser une macro tout simplememt sur une selection (OK, tu pensais p-e a faire 2 subs en meme temps ?)
 
MDR, en mettant ActiveCell au lieu de Selection, ca a plante Excel.exe :D


---------------
"The two most common elements in the universe are Hydrogen and stupidity." - Harlan Ellison
n°610862
dalcap
Posté le 13-01-2004 à 18:25:41  profilanswer
 

dsl pour le plantage,  
chez moi, cela a mis le meme message sur global machin...
je pensais nommer la sélection dans la même macro.
en une seule macro je pensais que ct faisable...
mais bon, moi y en a pas etre excel-guru :D
...
d'autres solutions peut-être ?


Message édité par dalcap le 13-01-2004 à 18:27:43
n°610863
Oliver The​ Great
There is no plan B
Posté le 13-01-2004 à 18:26:56  profilanswer
 

Ca l'a plante 2 fois de suite meme... apparememnt il n'aime pas du tout.
 
merci pour ton aide :jap:


---------------
"The two most common elements in the universe are Hydrogen and stupidity." - Harlan Ellison
n°611020
jaalar
Posté le 13-01-2004 à 20:41:21  profilanswer
 

Selection.address
peut etre

n°611085
Oliver The​ Great
There is no plan B
Posté le 13-01-2004 à 21:29:36  profilanswer
 

j'ai essaye aussi, ca marche pas non plus. C'est penible :(


---------------
"The two most common elements in the universe are Hydrogen and stupidity." - Harlan Ellison
n°611223
jebb
pacman -S fantomes
Posté le 14-01-2004 à 00:14:00  profilanswer
 

Oliver The Great a écrit :

j'ai essaye aussi, ca marche pas non plus. C'est penible :(


 
L'objet que tu cherches à manipuler, c'est pas Selection, mais Selection.Areas(1)
 
Et hop ! Un bout de code qui marche :
 
Sub Macro1()
'
Dim My_Sheet As Object, My_Chart As Object
 
    Set My_Sheet = ActiveSheet
     
    Charts.Add
    Set My_Chart = ActiveChart
     
    My_Chart.ChartType = xlColumnClustered
    My_Sheet.Activate
    My_Chart.SetSourceData Source:=Selection.Areas(1), PlotBy:= _
        xlRows
    My_Chart.Location Where:=xlLocationAsObject, Name:="Feuil1"
 
    Set My_Sheet = Nothing
    Set My_Chart = Nothing
 
End Sub

n°611226
Oliver The​ Great
There is no plan B
Posté le 14-01-2004 à 00:21:44  profilanswer
 

Merci, je teste ca...
 
Ouais, ca a l'air de marcher :bounce:
 
Tu peux m'expliquer le principe stp ? (pkoi ca ne peut pas marcher si tu ne fais pas ca...)
 
En tout cas merci :jap:


---------------
"The two most common elements in the universe are Hydrogen and stupidity." - Harlan Ellison
n°611350
jebb
pacman -S fantomes
Posté le 14-01-2004 à 08:07:23  profilanswer
 

Oliver The Great a écrit :

Merci, je teste ca...
 
Ouais, ca a l'air de marcher :bounce:
 
Tu peux m'expliquer le principe stp ? (pkoi ca ne peut pas marcher si tu ne fais pas ca...)
 
En tout cas merci :jap:


 
J'en sais foutrement rien. D'après ce que j'en comprends, Selection ne renvoie pas directement un objet Range. Ca permet manifestement, dans le cas où tu sélectionnes plusieurs plages de cellules (en maintenant Ctrl enfoncé pendant que tu cliques à la souris, par exemple), d'avoir accès à chacune d'entre elles comme un objet en soi. Selection.Areas pointe sur la collection des plages selectionnées, du coup chacune d'entre elles peut être appelée par Selection.Areas(i). Et là i vaut 1, puisque tu n'as qu'une seule plage de cellules dans ta Selection.
 
J'ai le même problème que toi, je suis pas informaticien du tout, et 100% autodidacte du VBA, sauf que ca fait un poil plus longtemps que j'ai commencé à me prendre la tête avec, manifestement... Donc si un informaticien, un vrai, veut se donner la peine de nous faire une explication en bonne et due forme, il est le bienvenu.

n°611418
Oliver The​ Great
There is no plan B
Posté le 14-01-2004 à 10:37:38  profilanswer
 

Il se peut que ca repondre aussi a un pb de tableau que j'avais depuis super longtemps... je regarderai ca plus tard.
 
Je confirmerai dans la journee si ca marche bien dans le cas exact de ce que je veux faire (mais y a pas de raison...)
 
Par contre, ca relance le pb de tutorial VBA, qui est absolument inexistant (en tout cas introuvable). Je pense aussi qu'une liste de fonctions avec la nature de l'argument et la nature de l'output simplifierait la tache, non ? (de meme que des messages d'erreur un peu plus explicites)


---------------
"The two most common elements in the universe are Hydrogen and stupidity." - Harlan Ellison
n°611433
Oliver The​ Great
There is no plan B
Posté le 14-01-2004 à 11:00:54  profilanswer
 

Ca marche plus ! :( Ca marchait bien hier sur Excel 2003, mais sur Excel 97 ca marche pas :(
 
Pourtant je fais pareil... :(
 
edit 1: Ouais, je confirme, error 1004 ici alors que ca marche chez moi :cry:
 
edit 2: en fait ca fait le graph (en enlevant My_Chart.Location Where:=xlLocationAsObject), mais ca termine quand meem par une erreur (sasn finir ce que je lui demande avec la serie 3, i.e. un axe secondaire)


Message édité par Oliver The Great le 14-01-2004 à 11:36:48

---------------
"The two most common elements in the universe are Hydrogen and stupidity." - Harlan Ellison
n°611688
jebb
pacman -S fantomes
Posté le 14-01-2004 à 15:42:18  profilanswer
 

Oliver The Great a écrit :

Ca marche plus ! :( Ca marchait bien hier sur Excel 2003, mais sur Excel 97 ca marche pas :(
 
Pourtant je fais pareil... :(
 
edit 1: Ouais, je confirme, error 1004 ici alors que ca marche chez moi :cry:
 
edit 2: en fait ca fait le graph (en enlevant My_Chart.Location Where:=xlLocationAsObject), mais ca termine quand meem par une erreur (sasn finir ce que je lui demande avec la serie 3, i.e. un axe secondaire)


 
Je viens de tester exactement le code que j'ai posté hier soir sur un machine NT4/XL97, ca marche comme chez moi. Tu peux préciser ton histoire d'axe secondaire ? Ou poster le code que tu as en plus ?

n°611720
Oliver The​ Great
There is no plan B
Posté le 14-01-2004 à 16:20:32  profilanswer
 

OK...
 
j'ai un tableau par page, du style


  2002 2003 2004 2005  
m   1   2    3    4
u   5   6    7    8
p   0.1 0.3  0.4  0.8


 
Le code approprie devient :
 

Code :
  1. Sub macro3()
  2. Dim My_Sheet As Object, My_Chart As Object
  3.     Set My_Sheet = ActiveSheet
  4.     Charts.Add
  5.     Set My_Chart = ActiveChart
  6.     My_Chart.ChartType = xlLineMarkers
  7.     My_Sheet.Activate
  8.     My_Chart.SetSourceData Source:=Selection.Areas(1), PlotBy:=xlRows
  9.     With My_Chart
  10.         .HasTitle = True
  11.         .ChartTitle.Characters.Text = "titre a la con"
  12.         .Axes(xlCategory, xlPrimary).HasTitle = True
  13.         .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Year"
  14.         .Axes(xlValue, xlPrimary).HasTitle = True
  15.         .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "unite a la con"
  16.     End With
  17.     My_Chart.HasLegend = True
  18.     My_Chart.Legend.Select
  19.     Selection.Position = xlRight
  20. (a partir d'ici ca n'a pas l'air d'etre execute : la 3e serie n'est pas sur le 2e axe)
  21.     My_Chart.PlotArea.Select
  22.     My_Chart.SeriesCollection(3).Select
  23.     My_Chart.SeriesCollection(3).AxisGroup = 2
  24.     My_Chart.Axes(xlValue, xlSecondary).Select
  25.     With My_Chart.Axes(xlValue, xlSecondary)
  26.         .MinimumScaleIsAuto = True
  27.         .MaximumScale = 1
  28.         .MinorUnitIsAuto = True
  29.         .MajorUnitIsAuto = True
  30.         .Crosses = xlAutomatic
  31.         .ReversePlotOrder = False
  32.         .ScaleType = xlLinear
  33.     End With
  34.     Set My_Sheet = Nothing
  35.     Set My_Chart = Nothing
  36. End Sub


 
Ca me fait le graphe, ca le place sur une feuille independante (la ligne qui le placait en objet deconnait, je l'ai supprimee), puis j'ai un message d'erreur 1004 qui pointe sur My_Chart.Legend.Select et ca s'arrete


Message édité par Oliver The Great le 14-01-2004 à 16:24:48

---------------
"The two most common elements in the universe are Hydrogen and stupidity." - Harlan Ellison
n°611800
jebb
pacman -S fantomes
Posté le 14-01-2004 à 17:47:35  profilanswer
 

Pas eu le temps de le tester sous XL97, celui-là (demain peut-être), mais il marche sous XL2000. Tu devrais l'exécuter pas-à-pas (menu debugger, pas à pas, ou directement F8), pour repérer précisemment où ca plombe.

n°615771
Oliver The​ Great
There is no plan B
Posté le 19-01-2004 à 15:35:50  profilanswer
 

Ca s'arrete a :

Code :
  1. My_Chart.Legend.Select
  2.     Selection.Position = xlRight
  3.     My_Chart.PlotArea.Select
  4.     ActiveChart.SeriesCollection(3).Select
  5.     ActiveChart.SeriesCollection(3).AxisGroup = 2
  6.     ActiveChart.Axes(xlValue, xlSecondary).Select
  7.     With ActiveChart.Axes(xlValue, xlSecondary)
  8.         .MinimumScaleIsAuto = True
  9.         .MaximumScale = 1
  10.         .MinorUnitIsAuto = True
  11.         .MajorUnitIsAuto = True
  12.         .Crosses = xlAutomatic
  13.         .ReversePlotOrder = False
  14.         .ScaleType = xlLinear
  15.     End With
  16. 'end of insert
  17.     Set My_Sheet = Nothing
  18.     Set My_Chart = Nothing
  19. End Sub


Je n'ai pas trouve pourquoi. Il dit "Select method of Legend Class failed".
 
J'ai essaye de remplacer My_Chart par ActiveChart, mais c'est pareil.
J'ai commande un bouquin a la bibliotheque, mais il va mettre pas mal de temps a arriver :(


---------------
"The two most common elements in the universe are Hydrogen and stupidity." - Harlan Ellison
n°616214
Oliver The​ Great
There is no plan B
Posté le 20-01-2004 à 00:15:18  profilanswer
 

Je devrais faire un chtit stage VBA le 23/02, j'espere quand meme avoir fini ce truc d'ici la... personne pour me filer un coup de main ? :(


---------------
"The two most common elements in the universe are Hydrogen and stupidity." - Harlan Ellison
n°616282
itawa
Posté le 20-01-2004 à 04:59:59  profilanswer
 

Bonjour,
 
Essayes ce code:
 
  Sub macro3()
  Dim My_Sheet As Object, My_Chart As Object, depart As Range
   
'Definit la selection
  Set depart = Range(Selection.Address)
 
  Set My_Sheet = ActiveSheet
      Charts.Add
  Set My_Chart = ActiveChart
 
  My_Chart.ChartType = xlLineMarkers
 
  My_Sheet.Activate
  My_Chart.SetSourceData Source:=depart, PlotBy:=xlRows
   
      With My_Chart
          .HasTitle = True
          .ChartTitle.Characters.Text = "titre a la con"
          .Axes(xlCategory, xlPrimary).HasTitle = True
          .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Year"
          .Axes(xlValue, xlPrimary).HasTitle = True
          .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "unite a la con"
      End With
   
      My_Chart.HasLegend = True
      My_Chart.Legend.Position = xlRight
       
      My_Chart.SeriesCollection(3).AxisGroup = 2
   
      With My_Chart.Axes(xlValue, xlSecondary)
          .MinimumScaleIsAuto = True
          .MaximumScale = 1
          .MinorUnitIsAuto = True
          .MajorUnitIsAuto = True
          .Crosses = xlAutomatic
          .ReversePlotOrder = False
          .ScaleType = xlLinear
      End With
   
      Set My_Sheet = Nothing
      Set My_Chart = Nothing
      Set depart = Nothing
     
  End Sub
 
J'ai enleve tous les select qui ne servent pas.
Tu definis au debut ta selection, qui va servir ensuite pour creer le graph.
 
Itawa

n°616333
Oliver The​ Great
There is no plan B
Posté le 20-01-2004 à 09:50:26  profilanswer
 

C'etait ca :D
J'avais eu un indice hier soir, en le montrant a un collegue, et en remarquant que la legende "Unite a la con" etait selectionnee.
 
Merci beaucoup de votre aide :jap:
 
(Quand meme, ca manque un bon chtit bouquin avec des exemples de ce type)


---------------
"The two most common elements in the universe are Hydrogen and stupidity." - Harlan Ellison
n°616485
itawa
Posté le 20-01-2004 à 12:28:16  profilanswer
 

Perso, autodidacte aussi en VBA, et avec les newsgroup de Microsoft (Microsoft.Public.Fr.Excel, excellent, et les participants le sont aussi), les differents sites sur VBA, y a plus besoin de bouquin !!!

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [VBA][Excel]definir la selection dans une macro [resolu]

 

Sujets relatifs
[Resolu] JLabel: setBackground ?[XSLT/XPath] Sélection de la liste d'attributs sans doublons
Obtenir une image a partir d'une rotation d'une autre... [RESOLU][access] Liste déroulante et requête [Résolu]
Impression sous Excel via VB[résolu] Streaming avec FLASH
[VB] Excel et RichTextBoxExecuter une macro a partir d'une autre
[ASP+SQL SERVER] Affichage de la structure d'une BDD (Résolu)[VB.net] Ouvrir un fichier Excel a un endroit spécifié.
Plus de sujets relatifs à : [VBA][Excel]definir la selection dans une macro [resolu]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR