Compteurs variable copier /coller
Bonjour,
je suis bloqué sur un projet pour mon école.
Alors le sujet :
J'ai un Tableau se présentant sous cette forme.(voir ci dessous)
but : je dois connaitre la somme totale des consommations
Mais il faut savoir que le maximum de combustible est de 5 et qu'il peut changer: c'est une variable
Pour les dates,les consommations et les unités cela est pareil: Variable.
Combustible Date Consommation Unité
CHALEUR COGE 09/01/2012 336,000 MWH
GAZ NATUREL 17/02/2012 149,424 MWHPCS
CE que j'ai essayé de faire :
Explication du programme vba ci dessus:
je voulais identifier grâce à des compteurs le nombres de combustibles et combien de valeurs il y avaient pour chaque combustible:
Ensuite je voulais déplacer l'ensemble (chaque combustible) par un copîer/coller cote à cote
Pour ensuite permettre une addition simple car on a déjà fixer au préalable les emplacements des différentes variables.
LA OU JE BLOQUE: La phase de copier coller avec les compteurs.
Merci d'avance pour votre aide et piste à suivre.
Sub nb_combu_et_releve()
Dim comb As String
Dim variable_comb As String
Dim cpt_comb As Integer
Dim cpt_releve1 As Integer
Dim cpt_releve2 As Integer
Dim cpt_releve3 As Integer
Dim cpt_releve4 As Integer
cpt_comb = 0
cpt_releve = 2
cpt_releve1 = 0
cpt_releve2 = 0
cpt_releve3 = 0
cpt_releve4 = 0
range("A4").Select
While ActiveCell.Value <> ""
comb = ActiveCell.Offset(1, 0).Value
variable_comb = ActiveCell.Offset(2, 0).Value
If comb <> variable_comb Then
cpt_comb = cpt_comb + 1
End If
If cpt_comb = 0 Then
cpt_releve = cpt_releve + 1
End If
If cpt_comb = 1 Then
cpt_releve1 = cpt_releve1 + 1
End If
If cpt_comb = 2 Then
cpt_releve2 = cpt_releve2 + 1
End If
If cpt_comb = 3 Then
cpt_releve3 = cpt_releve3 + 1
End If
If cpt_comb = 4 Then
cpt_releve4 = cpt_releve4 + 1
End If
ActiveCell.Offset(1, 0).Activate
Wend
'Cells(6, 5) = cpt_comb
'Cells(6, 6) = cpt_releve
'Cells(6, 7) = cpt_releve1
'Cells(6, 8) = cpt_releve2
'Cells(6, 9) = cpt_releve3
'Cells(6, 10) = cpt_releve4
Dim vtab(4) As Integer
Dim j As Integer
vtab(1) = cpt_releve1: vtab(2) = cpt_releve2: vtab(3) = cpt_releve3: vtab(4) = cpt_releve4
For j = 1 To 4
ActiveCell.Offset(0, 1).Activate
selection.Copy
Next j
End Sub
bonjour
VBA obligatoire ou pas ? car de tels calculs se font avec des sous-totaux ou des TCD habituellement
dans tous les cas joins un morceau de ton fichier
Oui, je sais, mais obliger de le faire par VBA.
ci joint le fichier excel.
Merci de votre réponse.
Voici le fichier ci joint :
Est ce que quelqu'un pourrai me donner un semblant de piste?
Je vous serai très reconnaissant.
Merci d'avance.
Bonjour,
en respectant la charte de ce forum, tu donnerais un peu plus envie de t'aider ‼
Éditer le message initial et utiliser l'icône pour baliser le code, il sera plus lisible …
Une présentation digne de ce nom - claire & exhaustive avec tenants & aboutissants - aiderait aussi …
Dans la pièce jointe, y-a-t-il une feuille de calculs pour le résultat désiré et si oui, laquelle ? Si non, tu sais ce qu'il te reste à faire !
Rappel : les codes VBA les plus efficaces sont ceux utilisant au mieux les formules de calculs d'Excel.
Ceux pur VBA sont souvent bien plus lents, comportant bien plus de lignes de code …
A part une initiation à l’algorithmie, aucun intérêt si ce n'est produire une usine à gaz !
Heureux l'étudiant qui, comme la rivière, suit son cours sans quitter son lit …
Je reformule :
Le but de ce programme est que n'importe qui en cliquant sur un bouton puissent l'utiliser sans avoir a ce poser de question et est directement le résultat.
Ce que je cherche a faire n'est que le début du programme mais néanmoins le plus compliqué (d'où la demande d'aide).
Ce que je cherche a faire est de copier coller cote à cote des données qui doivent être toutes considérées comme des variables.
Je vous joins la feuille excel : la feuille de base que j'utilise : "consommation par combustible" et il y a une feuille avec le final que je veux obtenir comme indiqué dans ton conseil.
Merci de ton aiguillage et de tes conseils.
Cdt,
Faut-il aussi traiter les combustibles sans donnée dans les colonnes B à D ?
Le résultat doit-il être dans la feuille source ou pas ?
Pourquoi le zéro dans la cellule A179 ?
Alors oui, j'ai juste mis les dernière données a titre indicatifs pour voir si ce que j'avais fais était bien pris en compte ( le maximum de combustible que je peux avoir est au nombre de 5) : j'ai donc mis 5 combustibles.
Alors dans l'idéal oui, afin de ne pas surcharger en feuille le fichier excel, car a la suite de cela je vais créer une autre feuille rassemblant les données concernant le total de combustible et en déduire par le calcul bon nombres de données et un graphique.
Le but étant de synthétiser au maximum.
Merci de ton aide.
Cdt,
Ah oui pour le zéro, j'ai faire une tentative ratée, que je n'ai pas supprimé.
Désolé cela m'a échappé.
Cdt,
Bonsoir à tous,
Un peu confus tout çà
A tester :
Option Explicit
Sub Copier()
Dim dico As Object, i As Long, n As Long, e
Application.ScreenUpdating = False
Set dico = CreateObject("Scripting.Dictionary")
dico.CompareMode = 1: n = 1
With Sheets("Consommation par combustible").Range("a3").CurrentRegion
For i = 2 To .Rows.Count
If Not dico.exists(.Cells(i, 1).Value) Then
Set dico(.Cells(i, 1).Value) = .Rows(1)
End If
Set dico(.Cells(i, 1).Value) = _
Union(dico(.Cells(i, 1).Value), .Rows(i))
Next
End With
'Restitution
With Sheets("ce que je veux faire")
.Cells.Clear
For Each e In dico
dico(e).Copy .Cells(1, n)
With .Cells(1, n).CurrentRegion
n = .Columns.Count + 1
End With
Next
With .Cells(1).CurrentRegion
With .Rows(1)
.Font.Bold = True
.Interior.ColorIndex = 40
.BorderAround Weight:=xlThin
.Borders(xlInsideVertical).Weight = xlThin
End With
.Columns.AutoFit
End With
End With
Set dico = Nothing
Application.ScreenUpdating = True
End Sub
klin89Attention au nom de la feuille de restitution
Voici une démonstration à la gloire du filtre avancé remaniant directement la feuille source :
Sub Demo()
Dim Rg As Range
Application.ScreenUpdating = False
With Feuil4.[A3].CurrentRegion.Rows
.Columns(1).AdvancedFilter xlFilterInPlace, , , True
.Columns(1).Copy .Cells(.Count, 1)(4)
Set Rg = .Cells(.Count, 1)(4).CurrentRegion
For C& = 3 To Rg.Count
Rg(2).Value = Rg(C).Value
.Columns(1).AdvancedFilter xlFilterInPlace, Rg.Rows("1:2")
.Copy .Cells(1).End(xlToRight)(1, 2)
.Item("2:" & .Count).Clear
Next
With .Parent
If .FilterMode Then .ShowAllData
.[A3].CurrentRegion.Columns.AutoFit
.Activate: ActiveWindow.ScrollRow = 1
End With
End With
Rg.Clear: Set Rg = Nothing
End Sub
Merci Marc L, ça marche vraiment bien.
Si ce n'est pas trop demander, pourrai tu m'expliquer brièvement t'as démarche, afin que je comprenne ton code, et où chercher certaines informations, dans le but de m'améliorer en VBA. (Car j'ai du mal à voir comment tu as fait).
En tout cas, un immense MERCI !!!!!
Et merci à tout ceux qui ont voulu m'aider!!!
Cdt,
Les codes VBA les plus efficaces (compacité, rapidité, simplicité, …) sont ceux utilisant au mieux les fonctionnalités d'Excel
(code pur VBA interprété forcément plus lent que les fonctions natives d'Excel pré-compilées).
Penser donc d'abord Excel avant d'envisager un code VBA (car souvent des formules de calculs ou un TCD suffisent) …
Partant de ce principe, la démarche est simple : effectuer dans Excel les manipulations vers l'objectif à atteindre.
Une fois atteint, activer le Générateur de macros puis reproduire les manipulations : le squelette du code est livré sur un plateau !
Ici un filtre avancé est utilisé une première fois afin de créer sous le tableau la liste des combustibles.
Ensuite une boucle utilise de nouveau un filtre avancé pour déplacer les combustibles à partir du second de la liste.
Afin d’appréhender au mieux le fonctionnement d'un filtre avancé, s'entraîner manuellement depuis Excel;
ce n'est pas compliqué, il dispose d'un assistant et au besoin consulter l'aide d'Excel comme les tutoriels sur la Toile …
Quant à l'aide VBA, là aussi c'est simple : placer dans le code le curseur sur une instruction puis appuyer sur la touche F1 ‼
Suivre aussi la progression d'un code en mode pas à pas via la touche F8 permet de contrôler l'incidence
de chaque ligne dans une feuille de calculs comme le contenu de la fenêtre des Variables locales …
Si déboguer est l’art de corriger les bogues, alors programmer est l’art d’en faire !