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 Combustible, Date,Consommation,Unité).

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 :

10vba-excel.zip (28.24 Ko)

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,

17vba-excel.zip (31.54 Ko)

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

Attention au nom de la feuille de restitution

klin89

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 !

Rechercher des sujets similaires à "compteurs variable copier coller"