[excel/VBA] aide sur macro

antic80 Messages postés 4877 Statut Contributeur -  
antic80 Messages postés 4877 Statut Contributeur -
Bonjour,

j'ai un tableau qui se présente comme suit

Décembre 2006 0 0 0 0 1 0 0
Décembre 2007 0 0 1 0 1 0 0
Novembre 2006 0 0 0 0 0 0 0
Novembre 2007 0 0 0 0 3 0 2
Octobre 2006 0 0 0 0 0 0 0
Octobre 2007 0 0 0 0 0 0 0

c comme ca jusqu'a janvier

j'aimerai une boucle qui au niveau de chaque ligne vide permette de calculer la progression en pourcentage de chaque colonne.

le tableau commence a la cellule a1.
Configuration: Windows XP
Internet Explorer 6.0

3 réponses

  1. LePierre Messages postés 249 Statut Membre 338
     
    bonjour

    qu'appelles-tu "ligne vide" ? Est-ce à la fin de ton tableau de données ? Tu veux faire la somme de chaque colonne et voir l'évolution d'une colonne à l'autre ?
    0
    1. antic80 Messages postés 4877 Statut Contributeur 1 178
       
      en fait entre chaque mois il y a une ligne vide

      entre décembre et novembre donc il faut faire la progression entre décembre 2006 et décembre 2007
      0
      1. LePierre Messages postés 249 Statut Membre 338 > antic80 Messages postés 4877 Statut Contributeur
         
        soit Décembre 2006 en A1, Décembre 2007 en A2 et ligne 3 vide

        dans la cellule B3 tu colles la formule : =SI(B1>0;(B2-B1)*100/B1;0)
        et tu obtiens le pourcentage d'évolution sauf si la valeur de Décembre 2006 est nulle.

        Recopies la formule de B3 à H3 pour calculer les autres colonnes de Décembre

        Ensuite recopie la ligne 3 pour la coller dans la ligne vide suivante (en principe la 6 si j'ai bien compris) pour le mois de Novembre.

        A plus
        0
      2. antic80 Messages postés 4877 Statut Contributeur 1 178 > LePierre Messages postés 249 Statut Membre
         
        le probleme est que ce tableau est généré par une macro donc a la suite de cette macro j'aimerai en insérer une autre qui une fois le tableau généré pourrais directement calculer la progression
        0
      3. LePierre Messages postés 249 Statut Membre 338 > antic80 Messages postés 4877 Statut Contributeur
         
        voici la macro obtenue en enregistrement complétée d'une boucle pour recopier la ligne des formules toutes les 3 lignes :

        Sub Copie_Formules()
        Range("B3").Select
        ActiveCell.FormulaR1C1 = "=IF(R[-2]C>0,(R[-1]C-R[-2]C)*100/R[-2]C,0)"
        Range("B3").Select
        Selection.Copy
        Range("C3:H3").Select
        ActiveSheet.Paste
        Rows("3:3").Select
        Selection.Copy

        Lig = 6
        Do
        If Cells(Lig - 1, 1).Value = "" Then Exit Do
        Rows(Lig & ":" & Lig).Select
        ActiveSheet.Paste
        Lig = Lig + 3 'car il y a une ligne vierge toutes les 3 lignes
        Loop

        Range("A3").Select
        Application.CutCopyMode = False
        End Sub
        0
  2. Ivan-hoe Messages postés 433 Date d'inscription   Statut Membre Dernière intervention   310
     
    Salut Antartic,
    ci-dessous une petite procédure dont tu pourrais t'inspirer :
    boucle sur les lignes ; si ligne vide détectée, alors boucle sur les colonnes pour y inscrire le calcul
    En partant du principe que la colonne A contient les mois, la colonne 2 contient les années et les calculs se font à partir de la colonne 3 (d'où le 2 dans For i = 2 to DernColonne-1)

    Sub Progression()
    Dim DernLigne As Long, DernColonne As Long
    Dim i As Integer

    DernLigne = Range("A65536").End(xlUp).Row + 1
    DernColonne = Range("A1").End(xlToRight).Column

    Range("A1").Select
    While ActiveCell.Row <= DernLigne
    With ActiveCell
    If Not .Value = Empty Then GoTo SUITE
    .EntireRow.NumberFormat = "+0%;-0%;="
    For i = 2 To DernColonne - 1
    .Offset(0, i).Value = (.Offset(-1, i).Value / .Offset(-2, i).Value) - 1
    Next i
    End With

    SUITE: ActiveCell.Offset(1, 0).Activate
    Wend

    End Sub

    Au plaisir.
    I.
    0
  3. antic80 Messages postés 4877 Statut Contributeur 1 178
     
    merci a Ivan-hoe et lepierre pour vos réponses je teste ca dès que possible et vous tiens au courant
    0