Report résultats des formules en valeurs suivant l'année

Citaro

XLDnaute Occasionnel
Bonjour au forum,

Report résultats des formules en valeurs suivant l'année

Pour l'année 2015
Sur la feuille" Budget" on rentre le budget prévu 2015 colonne C à la main et le budget réalisé 2015 colonne D se fait avec la formule somme.si des données de la feuille "Compte" pour l'année en cours.

Pour l'année 2016
Je souhaite conserver le réalisé 2015 colonne D en valeur(sans formule) et saisir le prévu 2016 colonne E.
Pour le réalisé colonne F la formule somme.si des données de la feuille "Compte" pour l'année en cours.
Et ainsi de suite
Précision importante la feuille "Compte" repart à zéro (au du haut ) chaque année


Avez vous une idée, si possible en VBA
Bonne journée
 

Pièces jointes

  • Report budget.xlsx
    15.4 KB · Affichages: 14

vgendron

XLDnaute Barbatruc
Re : Report résultats des formules en valeurs suivant l'année

bonjour

essaie avec ce code

Code:
Sub Macro1()
'

    formule = "=SOMME.SI(Analytique;A2;Charge)"
    
    'année à consolider
    Année = Range("A1")
    
    With ActiveSheet.Rows(1)
    'recherche de la colonne contenant l'année: la recherche va s'arreter à la première occurence; donc la colonne Prévu
    Set c = .Find(Année, LookIn:=xlValues)
        If Not c Is Nothing Then
            col = c.Column + 1 '+1 pour tomber sur la colonne Réalisé
        End If
    End With
    
    'copier coller special valeur
    Columns(col).Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
    
    'application de la formule sur l'année suivante
    Cells(2, col + 2).FormulaLocal = formule
    Cells(2, col + 2).AutoFill Range(Cells(2, col + 2), Cells(55, col + 2))

End Sub


ca t'impose juste de rentrer manuellement l'année que tu souhaites conserver en A1
exemple; 2015
note: aucun controle pour savoir si l'année est existante ou si elle a déjà été "sauvegardée"
 

Citaro

XLDnaute Occasionnel
Re : Report résultats des formules en valeurs suivant l'année

Bonjour vgendron,
Merci pour ton aide
La macro est bonne pour la 1ere partie du tableau c'est à dire les charges, mais dans la seconde elle transforme les produits en charges
 

vgendron

XLDnaute Barbatruc
Re : Report résultats des formules en valeurs suivant l'année

Ha oui pardon, j'avais pas noté le changement de formule

en supposant qu'il y a toujours le meme nombre de lignes pour charges et produits

Code:
Sub Macro1()
'

    formuleCharges = "=SOMME.SI(Analytique;A2;Charge)"
    formuleProduits = "=SOMME.SI(Analytique;A2;Produit)"
    
    'année à consolider
    Année = Range("A1")
    
    With ActiveSheet.Rows(1)
    'recherche de la colonne contenant l'année: la recherche va s'arreter à la première occurence; donc la colonne Prévu
    Set c = .Find(Année, LookIn:=xlValues)
        If Not c Is Nothing Then
            col = c.Column + 1 '+1 pour tomber sur la colonne Réalisé
        End If
    End With
    
    'copier coller special valeur
    Columns(col).Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
    
    'application de la formule sur l'année suivante
    Cells(2, col + 2).FormulaLocal = formuleCharges
    Cells(2, col + 2).AutoFill Range(Cells(2, col + 2), Cells(27, col + 2))
    
    Cells(30, col + 2).FormulaLocal = formuleProduits
    Cells(30, col + 2).AutoFill Range(Cells(30, col + 2), Cells(55, col + 2))
End Sub
 

vgendron

XLDnaute Barbatruc
Re : Report résultats des formules en valeurs suivant l'année

avec ceci

Code:
Sub Macro1()
'

    formuleCharges = "=SOMME.SI(Analytique;A2;Charge)"
    formuleProduits = "=SOMME.SI(Analytique;A2;Produit)"
       
    'année à consolider
    Année = Range("A1")
    
    'recherche de la colonne contenant l'année: la recherche va s'arreter à la première occurence; donc la colonne Prévu
    With ActiveSheet.Rows(1)
        Set c = .Find(Année, LookIn:=xlValues)
        If Not c Is Nothing Then
            col = c.Column + 1 '+1 pour tomber sur la colonne Réalisé
        End If
    End With
    
    'copier coller special valeur
    Columns(col).Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
    
    'recherche des lignes de départ et fin des Charges et Produits
    With ActiveSheet.Columns(2)
        lchargeD = 1
        lChargeF = Range("A" & lchargeD).End(xlDown).Row
        
        Set lP = .Find("Produits", LookIn:=xlValues)
        If Not lP Is Nothing Then
            lProduitD = lP.Row
            lProduitF = Range("A" & lProduitD + 1).End(xlDown).Row
            
        End If
    End With
    
    'application de la formule sur l'année suivante
    Cells(lchargeD + 1, col + 2).FormulaLocal = formuleCharges
    Cells(lchargeD + 1, col + 2).AutoFill Range(Cells(lchargeD + 1, col + 2), Cells(lChargeF, col + 2))
    
    Cells(lProduitD + 1, col + 2).FormulaLocal = formuleProduits
    Cells(lProduitD + 1, col + 2).AutoFill Range(Cells(lProduitD + 1, col + 2), Cells(lProduitF, col + 2))
End Sub

attention. TOUTES les lignes de la colonne A doivent etre renseignées avec un numéro
c'est pour ca que j'ai pris sur la colonne A, car sur la colonne B, il y a des trous..
 

Citaro

XLDnaute Occasionnel
Re : Report résultats des formules en valeurs suivant l'année

Merci vgendron, pour m'endormir moins ce soir, tu peux m'expliquer cette parti de la macro, le reste j'ai compris

En tout cas merci de ton aide

'recherche des lignes de départ et fin des Charges et Produits
With ActiveSheet.Columns(2)
lchargeD = 1
lChargeF = Range("A" & lchargeD).End(xlDown).Row

Set lP = .Find("Produits", LookIn:=xlValues)
If Not lP Is Nothing Then
lProduitD = lP.Row
lProduitF = Range("A" & lProduitD + 1).End(xlDown).Row

End If
End With
 

vgendron

XLDnaute Barbatruc
Re : Report résultats des formules en valeurs suivant l'année

alors
Code:
'recherche des lignes de départ et fin des Charges et Produits
With ActiveSheet.Columns(2)
lchargeD = 1
lChargeF = Range("A" & lchargeD).End(xlDown).Row

Set lP = .Find("Produits", LookIn:=xlValues)
If Not lP Is Nothing Then
lProduitD = lP.Row
lProduitF = Range("A" & lProduitD + 1).End(xlDown).Row

End If
End With

en Français, ca donne

avec la colonne 2 (Colonne B) de la feuille active: donc ici, la feuille Budget.. aie.. ca oblige a lancer la macro à partir de cette feuille..
sinon. il faudra dire à la macro
with sheets("Budget").columns(2)

la varialbe lchargeD est mise à 1: ligne charge Début ;-)
pour la variable lChargeF ;F comme Fin ;-)
je pars de la cellule A1 (Range("A" &lchargeD)
pour aller jusqu'à la fin (end) vers le bas (xldown): la macro va donc detecter la premiere ligne non vide (d'ou impératif d'avoir toutes les lignes avec un numéro)
et je récupère le Numéro de ligne: .row
donc ici: 27

maintenant. autant je savais (hmm. pas sur en fait) l'emplacement de "CHARHES" en ligne 1
la. je dois chercher la position de Produits. avec find
si le find me retourne quelque chose, alors,
je récupère la ligne de ce quelque chose (lProduitD=lP.row)
et idem; à partir de cette ligne Produit Début, je vais à la fin vers le bas...


maintenant. THE question: pourquoi ne pas utiliser find AUSSI pour trouver Charges..(parce que si ca se trouve.. il ne sera pas toujours en ligne 1)...
c'est une bizarrerie de find (que je ne comprendrai jamais. à moins qu'il y ait une explication que j'ignore)
quand tu lui dit, "va chercher "Charges" dans la colonne 2 (colonne qui commence de B1 jusqu'à B222222222222)
et bah va savoir pourquoi..il ne "trouve" JAMAIS la première occurence qui se trouve justement dès la première cellule.. B1
Démonstration
si tu fais
With ActiveSheet.Columns(2)
set lC=.find("Charges"; lookin:=xlvalues)
lChargesD=lC.row

il va te retourner 3: ligne dans laquelle il a trouvé Charges.. mais la cellule complète, c'est Charges communes.....
 

Discussions similaires

Réponses
0
Affichages
230
Réponses
8
Affichages
391

Statistiques des forums

Discussions
312 277
Messages
2 086 716
Membres
103 378
dernier inscrit
phdrouart