Modification macro
Résolu/Fermé
A voir également:
- Modification macro
- Suivi de modification word - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Logiciel gratuit modification pdf - Guide
- Macro word - Guide
- Modification dns - Guide
7 réponses
yg_be
Messages postés
23471
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
15 février 2025
Ambassadeur
1 568
17 juil. 2017 à 16:29
17 juil. 2017 à 16:29
bonjour, prenant la colonne K comme exemple, je suggère d'essayer ceci:
Set r1 = Range( "K" & i)
Merci pour la réponse, cela fonctionne !
Maintenant je cherche à créer un graphique à partir de cette sélection, mais je n'arrive pas à coder mon graphique pour cette même sélection. j'ai essaie plusieurs choses mais sans grands résultats...Voici le programme actuel :
Dim i As Integer
Dim istart, imax As Integer
Dim istep As Integer
Dim r1, tout As Range
Dim MonGraphe As Chart, MaPlage As Range
Sub Selection()
Set tout = Nothing
i = 0
istart = 6
imax = 26
istep = 4
Application.ScreenUpdating = False
For i = istart To imax Step istep
Set r1 = Range("C" & i)
If tout Is Nothing Then
Set tout = r1
Else
Set tout = Union(tout, r1)
End If
Next
tout.Select
Set MaPlage = Worksheets("Détails DI").Range(tout).Select
Set MonGraphe = ThisWorkbook.Charts.Add
MonGraphe.ChartType = xlColumnStacked100
MonGraphe.SetSourceData MaPlage, xlColumns
With MonGraphe.SeriesCollection(5)
.ChartType = xlXYScatterSmoothNoMarkers
.AxisGroup = 2
With .Border
.Weight = xlMedium
.LineStyle = xlAutomatic
.ColorIndex = 4
End With
End With
With MonGraphe
.HasTitle = True
With .ChartTitle
.Characters.Text = "Tech1"
.Shadow = True
.Border.Weight = xlHairline
End With
With .Axes(xlValue, xlPrimary)
.HasTitle = True
.AxisTitle.Characters.Text = "Pourcentage"
End With
With .Axes(xlValue, xlSecondary)
.HasTitle = True
.AxisTitle.Characters.Text = "Total (hrs)"
End With
End With
End Sub
Le but n'est pas que vous fassiez mon programme à ma place, mais pouvez vous m'expliquer les différentes étapes à effectuer, que je puisse à l'avenir le faire de moi même ?
Maintenant je cherche à créer un graphique à partir de cette sélection, mais je n'arrive pas à coder mon graphique pour cette même sélection. j'ai essaie plusieurs choses mais sans grands résultats...Voici le programme actuel :
Dim i As Integer
Dim istart, imax As Integer
Dim istep As Integer
Dim r1, tout As Range
Dim MonGraphe As Chart, MaPlage As Range
Sub Selection()
Set tout = Nothing
i = 0
istart = 6
imax = 26
istep = 4
Application.ScreenUpdating = False
For i = istart To imax Step istep
Set r1 = Range("C" & i)
If tout Is Nothing Then
Set tout = r1
Else
Set tout = Union(tout, r1)
End If
Next
tout.Select
Set MaPlage = Worksheets("Détails DI").Range(tout).Select
Set MonGraphe = ThisWorkbook.Charts.Add
MonGraphe.ChartType = xlColumnStacked100
MonGraphe.SetSourceData MaPlage, xlColumns
With MonGraphe.SeriesCollection(5)
.ChartType = xlXYScatterSmoothNoMarkers
.AxisGroup = 2
With .Border
.Weight = xlMedium
.LineStyle = xlAutomatic
.ColorIndex = 4
End With
End With
With MonGraphe
.HasTitle = True
With .ChartTitle
.Characters.Text = "Tech1"
.Shadow = True
.Border.Weight = xlHairline
End With
With .Axes(xlValue, xlPrimary)
.HasTitle = True
.AxisTitle.Characters.Text = "Pourcentage"
End With
With .Axes(xlValue, xlSecondary)
.HasTitle = True
.AxisTitle.Characters.Text = "Total (hrs)"
End With
End With
End Sub
Le but n'est pas que vous fassiez mon programme à ma place, mais pouvez vous m'expliquer les différentes étapes à effectuer, que je puisse à l'avenir le faire de moi même ?
yg_be
Messages postés
23471
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
15 février 2025
1 568
18 juil. 2017 à 16:59
18 juil. 2017 à 16:59
au lieu de:
je suggère:
Ou bien, encore plus simple, utiliser "tout" au lieu de "MaPlage"
je te recommande d'éviter les
connais-tu l'enregistreur de macros? il peut t'aider à comprendre comment automatiser des actions.
tout.Select Set MaPlage = Worksheets("Détails DI").Range(tout).Select
je suggère:
Set MaPlage = tout
Ou bien, encore plus simple, utiliser "tout" au lieu de "MaPlage"
je te recommande d'éviter les
.Selectautant que possible: ils sont presque toujours inutiles, et souvent sources de confusion et d'ennuis.
connais-tu l'enregistreur de macros? il peut t'aider à comprendre comment automatiser des actions.
Oui j'avais essayé par cette méthode, la programmation qui en découle est plutôt "basique" et ne permets pas de faire ce que je souhaite ^^
Je vais essayer comme ça
Je vais essayer comme ça
yg_be
Messages postés
23471
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
15 février 2025
1 568
18 juil. 2017 à 19:16
18 juil. 2017 à 19:16
L'enregistreur de macro est pratique pour découvrir les objets à manipuler. Les programmes générés ainsi sont horribles, bien d'accord.
J'ai suivi votre conseil, à première vue, il me créé bien la graphique avec les données que je souhaite, mais il me reste deux problèmes :
- j'obtiens un graphique en histogramme, mais je souhaite en courbe
- les noms d'axes et de titres ne s'affichent pas
- j'obtiens un graphique en histogramme, mais je souhaite en courbe
- les noms d'axes et de titres ne s'affichent pas
de plus, en abscisse de mon graphique je dois mettre des dates à la colonnes A, faut t'ile que je modifie mon code en conséquence avec quelque chose du genre ? :
Sub Selection()
Set tout = Nothing
i = 0
istart = 6
imax = 26
istep = 4
Application.ScreenUpdating = False
For i = istart To imax Step istep
Set r1 = Range("C" & i)
Set r2 = Range("A" & i)
If tout Is Nothing Then
Set tout = r1 + r2
Else
Set tout = Union(tout, r1, r2)
End If
Next
tout.Selec
Sub Selection()
Set tout = Nothing
i = 0
istart = 6
imax = 26
istep = 4
Application.ScreenUpdating = False
For i = istart To imax Step istep
Set r1 = Range("C" & i)
Set r2 = Range("A" & i)
If tout Is Nothing Then
Set tout = r1 + r2
Else
Set tout = Union(tout, r1, r2)
End If
Next
tout.Selec
yg_be
Messages postés
23471
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
15 février 2025
1 568
19 juil. 2017 à 18:34
19 juil. 2017 à 18:34
Je suggère de commencer par ton point #7, et de faire le #6 ensuite.
Afin de découvrir comment programmer cela, je te suggère de faire les changements à la main, pendant que tu enregistres une macro. Cela te permettra de comprendre comment changer les attributs de ton graphe par VBA.
Afin de découvrir comment programmer cela, je te suggère de faire les changements à la main, pendant que tu enregistres une macro. Cela te permettra de comprendre comment changer les attributs de ton graphe par VBA.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Ca a pas mal avancé..
Je veux donc créer des noms d'axes, mais l'erreur persiste au niveau de la ligne où j'ai notifié l'erreur
Dim Emplacement As Range
Dim Grph As ChartObject
Sub Test()
Call Selection
ActiveSheet.Shapes.AddChart2(332, xlLineMarkers).Select
ActiveChart.SetSourceData Source:=Range( _
"'Détails DI'!$C$6,'Détails DI'!$A$6,'Détails DI'!$C$10,'Détails DI'!$A$10,'Détails DI'!$C$14,'Détails DI'!$A$14,'Détails DI'!$C$18,'Détails DI'!$A$18,'Détails DI'!$C$22,'Détails DI'!$A$22,'Détails DI'!$C$26,'Détails DI'!$A$26" _
)
ActiveChart.Axes(xlValue).MajorGridlines.Select
ActiveChart.Axes(xlCategory).Select
ActiveChart.Axes(xlCategory).CategoryType = xlCategoryScale
With ActiveChart
.HasTitle = True
.ChartTitle.Characters.Text = "Testgraph"
End With
With Grph
With .Axes(xlValue, xlPrimary) 'L'erreur se trouve ici
.HasTitle = True
.AxisTitle.Characters.Text = "Densité d'occurence"
End With
With .Axes(xlCategory, xlPrimary)
.HasTitle = True
.AxisTitle.Characters.Text = "Taux de rentabilité"
End With
'Définit le premier graphique de la feuille
Set Grph = Feuil1.ChartObjects(1)
'Définit la plage de cellule pour positionner le grpahique
Set Emplacement = Range("A29:I46")
With Grph
.Left = Emplacement.Left
.Top = Emplacement.Top
.Height = Emplacement.Height
.Width = Emplacement.Width
End With
End With
End Sub
Je veux donc créer des noms d'axes, mais l'erreur persiste au niveau de la ligne où j'ai notifié l'erreur
yg_be
Messages postés
23471
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
15 février 2025
1 568
20 juil. 2017 à 12:38
20 juil. 2017 à 12:38
il suffit peut-être de déplacer la ligne "set grph" avant la première utilisation de grph (donc avant la première ligne "With Grph").
je te recommande d'éviter les .Select autant que possible: ils sont presque toujours inutiles, et souvent sources de confusion et d'ennuis. également, éviter d'utiliser "active", ActiveSheet, ActiveChart.
je te recommande d'éviter les .Select autant que possible: ils sont presque toujours inutiles, et souvent sources de confusion et d'ennuis. également, éviter d'utiliser "active", ActiveSheet, ActiveChart.
Vivi76
>
yg_be
Messages postés
23471
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
15 février 2025
20 juil. 2017 à 14:47
20 juil. 2017 à 14:47
Malheureusement j'ai réussi à faire fonctionner ma macro sans me passer de "active"...
un gros problème subsiste :
cette liste :
Je cherche à faire appel à ma plage que je sélectionne avec la macro suivante :
Mais actuellement, je n'arrive pas en faisant appel à cette macro, à reporter ma plage
un gros problème subsiste :
ActiveSheet.Shapes.AddChart2(332, xlLineMarkers).Select
ActiveChart.SetSourceData Source:=Range(tout.Select)
ActiveChart.Axes(xlValue).MajorGridlines.Select
ActiveChart.Axes(xlCategory).Select
ActiveChart.Axes(xlCategory).CategoryType = xlCategoryScale
cette liste :
ActiveChart.SetSourceData Source:=Range(tout.Select)
Je cherche à faire appel à ma plage que je sélectionne avec la macro suivante :
Sub Selection()
Set tout = Nothing
i = 0
istart = 6
imax = 26
istep = 4
Application.ScreenUpdating = False
For i = istart To imax Step istep
Set r1 = Range("C" & i)
If tout Is Nothing Then
Set tout = r1
Else
Set tout = Union(tout, r1)
End If
Set r2 = Range("A" & i)
If tout Is Nothing Then
Set tout = r2
Else
Set tout = Union(tout, r2)
End If
Next
tout.Select
End Sub
Mais actuellement, je n'arrive pas en faisant appel à cette macro, à reporter ma plage
yg_be
Messages postés
23471
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
15 février 2025
1 568
>
Vivi76
20 juil. 2017 à 15:16
20 juil. 2017 à 15:16
moi, je ferais ainsi (pas testé):
au lieu de
faire
dans la fonction, au lieu de
ensuite, dans sub test,
tu ajoutes
au lieu de
et au lieu de
tu fais
en passant, tu auras supprimé deux "select"!
au lieu de
sub selection,
faire
function obtenirrange () as range
dans la fonction, au lieu de
tout.select, faire
obtenirrange=tout(peut-être avec
setdevant)
ensuite, dans sub test,
tu ajoutes
dim donnees as range
au lieu de
call selection, tu fais
set donnees = obtenirrange()
et au lieu de
ActiveChart.SetSourceData Source:=Range(tout.Select)
tu fais
ActiveChart.SetSourceData Source:=donnees
en passant, tu auras supprimé deux "select"!
Merci beaucoup pour votre aide !
Après quelques modifications et grâce à vos conseils, j'ai obtenu ce que je souhaitais. J'aurais quelques améliorations à apporter mais je verrais plus tard.
Après quelques modifications et grâce à vos conseils, j'ai obtenu ce que je souhaitais. J'aurais quelques améliorations à apporter mais je verrais plus tard.
Bonjour,
j'aurais une dernière requête, je cherche à sauvegarder une valeur d'une de mes cellules sur un autre feuille en la copiant sur la dernière cellule vide de ma colonne B.
Cependant le code que j'ai actuellement ne fonctionne pas et m'affiche 0. Je pense comprendre le problème, je voulais donc détourner ce problème en utilisant ce modèle effectué par l'enregistreur de macro :
Mais je ne sais pas comment l'intégrer dans ma macro actuelle
j'aurais une dernière requête, je cherche à sauvegarder une valeur d'une de mes cellules sur un autre feuille en la copiant sur la dernière cellule vide de ma colonne B.
Cependant le code que j'ai actuellement ne fonctionne pas et m'affiche 0. Je pense comprendre le problème, je voulais donc détourner ce problème en utilisant ce modèle effectué par l'enregistreur de macro :
Selection.PasteSpecial Paste:=xlPasteValues
Mais je ne sais pas comment l'intégrer dans ma macro actuelle
Sub Save()
Dim Source As String
Dim Cible As String
Dim LigneEncours As Long
'Chargement du nom des feuilles origine et destination
Cible = "feuille1"
Source = "feuille2"
'Calcul de la ligne courante
LigneEncours = Worksheets(Cible).Range("B" & Rows.Count).End(xlUp).Row + 1
'Copie des valeurs
With Worksheets(Cible)
Worksheets(Source).Range("O14").Copy .Range("B" & LigneEncours)
End With
End Sub
yg_be
Messages postés
23471
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
15 février 2025
1 568
24 juil. 2017 à 10:02
24 juil. 2017 à 10:02
il suffit peut-être de faire:
Worksheets(Cible).Range("B" & LigneEncours) = Worksheets(Source).Range("O14").Value