plusieurs petit problème

P

petitange

Guest
bonjour,

j'utilise une macro, qui récupère des données.
J'utilise la fonction Range ("A1") par exemple comment je peux faire pour passé à ("B1")
j'utilise déjà une boucle for i pour passé d'une ligne à l'autre ("A") & i mais pour les colonnes comment je peux faire?

J'ai utilisé aussi l'enregistreur de macro pour réaliser un graphique, mon problème est quand j'efface le graphique et que je relance ma macro ca ne fonctionne pas car pour mon premier graphique il me donne graphique 1 et quand je relance ma macro c'est graphique 2 et ainsi de suite
y a t'il une astuce.

Comment je peux effacé un graphique via une commande vba

Merci
 
Y

Yeahou

Guest
Bonjour Petit ange, nanard, le forum

1-Pour les boucles, j'utilise souvent le offset qui me permet de programmer en relatif et rend le code plus facilement adaptable et portable.
exemple d'utilisation de offset
Range("A1").offset(1,0) correspond à la cellule A2
Range("A1").offset(0,1) correspond à la cellule B1
Range("A1").offset(1,1) correspond à la cellule B2
et ainsi de suite
trés pratique à utiliser en référence à un objet
Dim Cel_Ref as Range
Set Cel_Ref=Range("A1")
Cel_Ref.offset(1,0) correspond à la cellule A2
Cel_Ref.offset(0,1) correspond à la cellule B1
Cel_Ref.offset(1,1) correspond à la cellule B2
Si je veux insérer une ligne au début aprés coup, il me suffit de modifier la référence sans avoir à modifier tout le code
Set Cel_Ref=Range("A2")
Cel_Ref.offset(1,0) correspond maintenant à la cellule A3
Cel_Ref.offset(0,1) correspond maintenant à la cellule B2
Cel_Ref.offset(1,1) correspond maintenant à la cellule B3

2-Pour ton graphique, il suffit d'appliquer le même principe de référence objet
Set Chart_Ref=Charts.Add
Tu pourras retrouver ton graphique avec
Chart_Ref.activate
ou le renommer de la même façon pour usage ultérieur (car la référence ne subsistera que le temps d'exécution de la macro sauf si tu la déclares en Public ou elle subsistera le temps d'ouverture du classeur)
Chart_Ref.Name="mongraphique1"

Cordialement, A+
 
P

petitange

Guest
bonjour,
voici les lignes pour réaliser mon graphique, j'ai un message d'erreur:

Erreur d'exécution -2147024809 (80070057):

L'élément portant ce nom est introuvable.


Dim MonGraphique_Ref As Chart

Set MonGraphique_Ref = Charts.Add
MonGraphique_Ref.Activate
MonGraphique_Ref.Name = "Graph"
ActiveChart.ChartType = xlColumnClustered
ActiveChart.SetSourceData Source:=Sheets("Graphique").Range("P12:Z13"), PlotBy _
:=xlRows
ActiveChart.Location Where:=xlLocationAsObject, Name:="Graphique"
With ActiveChart
.HasTitle = True
.ChartTitle.Characters.Text = "Titre du graphique"
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Catégorie"
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Euro"
End With
ActiveChart.HasDataTable = False
ActiveSheet.Shapes("Graph").ScaleHeight 1.5, msoFalse, _
msoScaleFromBottomRight
ActiveSheet.Shapes("Graph").ScaleWidth 1.49, msoFalse, _
msoScaleFromTopLeft
ActiveSheet.Shapes("Graph").ScaleWidth 1.34, msoFalse, _
msoScaleFromBottomRight
ActiveSheet.Shapes("Graph").ScaleHeight 1.33, msoFalse, _
msoScaleFromTopLeft


J'ai constaté qu'après l'instruction
ActiveChart.Location Where:=xlLocationAsObject, Name:="Graphique"

MonGraphique_Ref.Name = <Erreur Automation>

Merci
 
Y

Yeahou

Guest
Bonjour petitange, le forum

MonGraphique_Ref.Name = <Erreur Automation>
c'est normal car j'avais dit une bétise, la propriété name d'un graphique incorporé à une feuille est en lecture seule
pour le reste, shape fonctionnera si tu enléves la précison Graphique ajouté par Excel au nom du graphique
l'objet "Graphique 1" va renvoyer en nom "Graphique Graphique 1" alors que shapes travaille à partir de "Graphique 1". C'est une particularité propre à Excel 2000 et Xp, sous 97 le name renvoyait bien "Graphique 1".

j'ai modifié ta macro en ce sens.

Cordialement, A+


Dim MonGraphique_Ref As Chart
Charts.Add
ActiveChart.Location Where:=xlLocationAsObject, Name:="Graphique"
Set MonGraphique_Ref = ActiveChart
ActiveChart.ChartType = xlColumnClustered
ActiveChart.SetSourceData Source:=Sheets("Graphique").Range("P12:Z13"), PlotBy _
:=xlRows
With ActiveChart
.HasTitle = True
.ChartTitle.Characters.Text = "Titre du graphique"
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Catégorie"
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Euro"
End With
ActiveChart.HasDataTable = False
ActiveSheet.Shapes(Right(MonGraphique_Ref.Name, Len(MonGraphique_Ref.Name) - 10)).ScaleHeight 1.5, msoFalse, _
msoScaleFromBottomRight
ActiveSheet.Shapes(Right(MonGraphique_Ref.Name, Len(MonGraphique_Ref.Name) - 10)).ScaleWidth 1.49, msoFalse, _
msoScaleFromTopLeft
ActiveSheet.Shapes(Right(MonGraphique_Ref.Name, Len(MonGraphique_Ref.Name) - 10)).ScaleWidth 1.34, msoFalse, _
msoScaleFromBottomRight
ActiveSheet.Shapes(Right(MonGraphique_Ref.Name, Len(MonGraphique_Ref.Name) - 10)).ScaleHeight 1.33, msoFalse, _
msoScaleFromTopLeft
 
P

petitange

Guest
je l'avais fais avec un mid mais ca reviens au même
merci pour avoir passé ton temps pour moi.

Encore une petite question

quand j'exécute ma macro on vois ce que l'as macro fais, c'est a dire qu'il effectue le code
il n'y aurai pas une astuce pour pas qu'on puisse le voir?

quand je programmais en vb pour une msflexgrid j'utilisais .visible= False et apres .visible = True

encore merci a tous le monde
 
P

petitange

Guest
au fait merci pour ton explication

j'ai encore une question lol

quand j'exécute ce code a partir d'une autre feuille il me marque:
La méthode Activate de la classe Range a échoué

Set Cel2_Ref = Sheets("Graphique").Range("Q12")


Cel2_Ref.offset(1,j).activate
Selection.NumberFormat = "#,##0.00$"

Merci
 
Y

Yeahou

Guest
Bonjour petit ange, le forum

Application.ScreenUpdating = False
désactivera l'affichage écran pendant l'exécution de la macro. A mettre en début de code.

pour
Set Cel2_Ref = Sheets("Graphique").Range("Q12")
Cel2_Ref.offset(1,j).activate
Selection.NumberFormat = "#,##0.00$"
c'est normal que cela plante, tu essayes de sélectionner une cellule qui n'est pas sur la feuille active

Set Cel2_Ref = Sheets("Graphique").Range("Q12")
Cel2_Ref.offset(1,j).NumberFormat = "#,##0.00$"

fonctionnera beaucoup mieux, la sélection de la cellule étant inutile pour appliquer un format ( ou toute autre opération que l'affichage ).
c'est d'autant plus judicieux que l'opération de sélection ralentit considérablement un code.

Cordialement, A+
 
P

petitange

Guest
Bonjour,
encore un petit problème, décidément lol

voila au début de mon code j'utilise l'instruction
Application.ScreenUpdating = False

quand je réalise mon graphe, je détermine le nom des polices, la taille etc...
mais ca ne fonctionne pas et sans l'instruction Application.ScreenUpdating = False ca fonctionne.

Est ce quelqu'un a déjà eu le problème

Merci
 

Discussions similaires

Statistiques des forums

Discussions
314 168
Messages
2 106 711
Membres
109 674
dernier inscrit
François35