Incrementer un tableau VBA
Bonjour à tous,
Je viens vers vous car j'ai un petit soucis sur une macro que "j'essaie" de faire fonctionner...(et je débute sur VBA) je m'explique :
principe de la feuille Excel :
effectuer un tri manuel des différentes colonnes et afficher certaines données dans différents graphiques dans d'autres onglets.
If Sheets("données").Cells(lignesActives(Compteur - 1), 8).Value = 2003 Then Tableau2003(Compteur) = (Sheets("données").Cells(lignesActives(Compteur - 1), 19).Value)
En gros, là, je vérifie si la colonne 8 contient bien la bonne année (2003) et "j'essaie"
Mon but ultime étant d'afficher graphiquement les différentes valeurs que contiendrais ma colonne 19 en fonction des années.
Si une personne à une idée... Merci d'avance ::
CdT
Amaury
bonjour,
pour incrémenter,prendre l'ancienne valeur du compteur, lui additionner la valeur dont on veut l'incrémenter et placer le résultat dans le compteur
avec le code que tu as fourni, cela devrait donner ceci
If Sheets("données").Cells(lignesActives(Compteur - 1), 8).Value = 2003 Then Tableau2003(Compteur) = tableau2003(compteur) + (Sheets("données").Cells(lignesActives(Compteur - 1), 19).Value)
mais j'ai un doute quant à cette instruction ...
mets-nous ton fichier avec les explications des ce que tu veux faire.
Merci beaucoup pour ta réponse H2so4, je te partage mon fichier.
par contre par souci de confidentialité j'ai dus supprimer certaines données.
Mon but :
- Dans l'onglet "Données" je veux choisir mes véhicules par type "diesel" ou "essence" ou encore par segment "citadine", "routière"... je fait un filtrage manuel comme j'ai envie.
- Ma macro cherche toute les lignes que j'ai choisis et les comptes.
- enfin, elle affiche dans un graphique le niveau de bruit des véhicules sélectionnés ==> onglet "HISTOGRAMME BF place AVG"
> la macro est très très mal compilée mais pour l'instant elle fait à quelque chose près le job.
- C'est maintenant que j'attaque la partie qu'il me pause problème : je cherche à afficher le niveau de bruit des tout les véhicules d'une même année, en fonction justement des années, dans un graphe type nuage de points, genre il peut il y avoir 20 véhicules dans l'année 2003 et je veux afficher les 20 valeurs de niveaux en fonction des années... je sais pas si c'est clair.
je te mets le fichier en PJ.
Merci encore.
Amaury
Bonjour,
peux-tu faire manuellement le graphique que tu voudrais obtenir sur base de ces données ?
Oui, j'ai réussi à le faire.
- onglet "nombre de véhicule par année"
cdt
Amaury
Bonjour,
proposition d'adaptation de ta macro
Sub AttachLabelsToPoints()
Dim Compteur, ChartName As String, xVals As String
'Trouve le nb de lignes affichées après filtrage
Dim Ligne, index As Integer
Dim lignesActives() As Integer
index = 0
For Ligne = 2 To trouveDerniereLigne("Données", "B") - 1
If Sheets("Données").Range("B" & Ligne).EntireRow.Hidden = False Then
ReDim Preserve lignesActives(index)
lignesActives(index) = Ligne
index = index + 1
End If
Next Ligne
'Histogramme AVG
Dim i%
Dim pack(58 To 90), packccv(58 To 89), indccv(58 To 90)
For i = 58 To 90
indccv(i) = i
Next i
For Compteur = 1 To index
i = Int(Sheets("données").Cells(lignesActives(Compteur - 1), 19))
If i > 0 Then
If Sheets("données").Cells(lignesActives(Compteur - 1), 1).Value = "PSA" Then
pack(i) = pack(i) + 1
Else
packccv(i) = packccv(i) + 1
End If
End If
Next Compteur
With Graph2
.SeriesCollection(1).Name = "PSA" 'changement du nom de la serie "1"
.SeriesCollection(1).XValues = indccv 'Creation des données abscisses = voir pour optimiser
.SeriesCollection(1).Values = pack 'Creation des données ordonnées = voir pour optimiser
.SeriesCollection(2).Name = "CCV" 'changement du nom de la serie "2"
.SeriesCollection(2).XValues = indccv 'Creation des données abscisses = voir pour optimiser
.SeriesCollection(2).Values = packccv
End With
'Histogramme ARD
For Compteur = 1 To index
i = Int(Sheets("données").Cells(lignesActives(Compteur - 1), 20))
If i > 0 Then
If Sheets("données").Cells(lignesActives(Compteur - 1), 1).Value = "PSA" Then
pack(i) = pack(i) + 1
Else
packccv(i) = packccv(i) + 1
End If
End If
Next Compteur
With Graph3
.SeriesCollection(1).Name = "PSA" 'changement du nom de la serie "1"
.SeriesCollection(1).XValues = indccv 'Creation des données abscisses = voir pour optimiser
.SeriesCollection(1).Values = pack 'Creation des données ordonnées = voir pour optimiser
.SeriesCollection(2).Name = "CCV" 'changement du nom de la serie "2"
.SeriesCollection(2).XValues = indccv 'Creation des données abscisses = voir pour optimiser
.SeriesCollection(2).Values = packccv
End With
'Graph évolution niveau de bruit BF place AVG en fonction des années
ReDim serie1(index)
ReDim serie2(index)
For Compteur = 1 To index
i = Sheets("données").Cells(lignesActives(Compteur - 1), 19).Value
If i > 0 Then
'If Sheets("données").Cells(lignesActives(Compteur - 1), 1).Value = "PSA" Then
ctr = ctr + 1
serie1(ctr) = Sheets("données").Cells(lignesActives(Compteur - 1), 8).Value
serie2(ctr) = Sheets("données").Cells(lignesActives(Compteur - 1), 19).Value
'End If
End If
Next
With Graph4
.SeriesCollection(1).Name = "niveau de bruit" 'changement du nom de la serie "1"
.SeriesCollection(1).XValues = serie1 'Creation des données abscisses = voir pour optimiser
.SeriesCollection(1).Values = serie2 'Creation des données ordonnées = voir pour optimiser
End With
End Sub
Public Function trouveDerniereLigne(ByVal feuille As String, ByVal a As String)
' trouve la derniere ligne remplie
nb = 2
While (IsEmpty(Worksheets("Données").Range("a" & nb)) = False)
nb = nb + 1
Wend
trouveDerniereLigne = nb
End Function
Un grand merci à toi H2so4, c'est exactement ce que je cherchais à faire, et en plus tu a compilé mon horrible codage !!
je te remercie encore pour le temps passé à m'aider.
CdT
Amaury