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
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"
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
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
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..
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
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.....