XL 2010 VBA Boucle pour faire mes entête de colonne

jlbcall

XLDnaute Occasionnel
Bonjour à tous,

J'ai une base de données de la colonne A à AM
Je vais devoir valoriser ces données en les multipliant par un nombre de jours par mois.
Les mois se trouvant de la colonne AN à AY (12 mois).
Dans la première étape de ma marco je souhaiterais donc mettre des entêtes.
Je concatène donc le mois exemple Janvier avec les 18 colonnes dont j'ai besoin.
Pour le mois de Janvier ma macro fait cela ci dessous. Pour éviter de refaire les même formules pour les 11 autres mois je voudrais faire une boucle qui reprenne les même colonne mais avec le mois de Février , puis mars etc...
Je concatène à chaque fois le mois et les 18 autres colonnes
si quelqu'un peut me proposer une solution merci

Sub ValorisationUO()

Range("AZ1").Select
ActiveCell.FormulaR1C1 = "=CONCATENATE(RC[-12],R1C18)"
Range("BA1").Select
ActiveCell.FormulaR1C1 = "=CONCATENATE(RC[-13],R1C19)"
Range("Bb1").Select
ActiveCell.FormulaR1C1 = "=CONCATENATE(RC[-14],R1C22)"
Range("BC1").Select
ActiveCell.FormulaR1C1 = "=CONCATENATE(RC[-15],R1C23)"
Range("BD1").Select
ActiveCell.FormulaR1C1 = "=CONCATENATE(RC[-16],R1C24)"
Range("BE1").Select
ActiveCell.FormulaR1C1 = "=CONCATENATE(RC[-17],R1C25)"
Range("BF1").Select
ActiveCell.FormulaR1C1 = "=CONCATENATE(RC[-18],R1C26)"
Range("BG1").Select
ActiveCell.FormulaR1C1 = "=CONCATENATE(RC[-19],R1C27)"
Range("BH1").Select
ActiveCell.FormulaR1C1 = "=CONCATENATE(RC[-20],R1C28)"
Range("BI1").Select
ActiveCell.FormulaR1C1 = "=CONCATENATE(RC[-21],R1C29)"
Range("BJ1").Select
ActiveCell.FormulaR1C1 = "=CONCATENATE(RC[-22],R1C30)"
Range("BK1").Select
ActiveCell.FormulaR1C1 = "=CONCATENATE(RC[-23],R1C31)"
Range("BL1").Select
ActiveCell.FormulaR1C1 = "=CONCATENATE(RC[-24],R1C32)"
Range("BM1").Select
ActiveCell.FormulaR1C1 = "=CONCATENATE(RC[-25],R1C33)"
Range("BN1").Select
ActiveCell.FormulaR1C1 = "=CONCATENATE(RC[-26],R1C33)"
Range("BN1").Select
ActiveCell.FormulaR1C1 = "=CONCATENATE(RC[-26],R1C34)"
Range("BO1").Select
ActiveCell.FormulaR1C1 = "=CONCATENATE(RC[-27],R1C35)"
Range("BP1").Select
ActiveCell.FormulaR1C1 = "=CONCATENATE(RC[-28],R1C36)"
Range("BQ1").Select
ActiveCell.FormulaR1C1 = "=CONCATENATE(RC[-29],R1C37)"
Range("AZ1").Select
End Sub
 

Pièces jointes

  • test.xlsm
    1.6 MB · Affichages: 23

youky(BJ)

XLDnaute Barbatruc
Bonjour Jibcali,
Remplace ta macro par celle ci
Bruno
VB:
Sub ValorisationUO()
' ValorisationMensuelle
For col = 40 To 51
Z = 18
For k = 52 + i To 69 + i
If Z = 20 Then Z = 22
Cells(1, k) = Cells(1, col) & Cells(1, Z)
Z = Z + 1
Next
i = i + 18
Next
End Sub
 

jlbcall

XLDnaute Occasionnel
Bruno si je veux étendre cette boucle de la ligne 2 à la dernière ligne de ma base de données en changeant la concaténation des cellules par une multiplication. Je change la formule ok mais comment je dis à ma formule de passé de la ligne 2 à al dernière ligne.
comme dire à la macro en ligne 2 tu fais des multiplications entre les mêmes cellules que les entêtes.
La boucle marche super bien mais j'avoue ne pas tout comprendre.
 

youky(BJ)

XLDnaute Barbatruc
Bonsoir,
Pour faire pareil sur la dernière ligne+1 voici la macro
Par contre concaténer par multiplication là je pige rien.
Besoin de plus amples renseignements.
Bruno
Code:
Sub ValorisationUO()
' ValorisationMensuelle
lig = [A6500].End(3).Row + 1
For col = 40 To 51
Z = 18
For k = 52 + i To 69 + i
If Z = 20 Then Z = 22
Cells(lig, k) = Cells(1, col) & Cells(1, Z)
Z = Z + 1
Next
i = i + 18
Next
End Sub
 

jlbcall

XLDnaute Occasionnel
oui désolé j'ai pas été très clair je joints un fichier
Je voudrais faire une boucle qui reprendre l'idée de la macro que tu m'as fait pour les entêtes.
Exemple pour Janvier et Février et faire une boucle avec les même formule pour les 18 entête par mois de janvier à décembre.

Sub CalculMensuel()
'
' CalculMensuel Macro
'FormuleJanvier
Range("AZ2").Select
ActiveCell.FormulaR1C1 = "=R2C40*RC[-34]"
Range("AZ2").Select
Selection.AutoFill Destination:=Range("AZ2:BA2"), Type:=xlFillDefault
Range("AZ2:BA2").Select
Range("BB2").Select
ActiveCell.FormulaR1C1 = "=R2C40*RC[-32]"
Range("BB2").Select
Selection.AutoFill Destination:=Range("BB2:BQ2"), Type:=xlFillDefault
Range("BB2:BQ2").Select
Range("BO2").Select
ActiveCell.FormulaR1C1 = "=IF(RC[-32]=""m"",R2C40*1,0)"

'FormuleFévrier
Range("BR2").Select
ActiveCell.FormulaR1C1 = "=R2C41*RC[-52]"
Range("BR2").Select
Selection.AutoFill Destination:=Range("BR2:BS2"), Type:=xlFillDefault
Range("BT2").Select
ActiveCell.FormulaR1C1 = "=R2C41*RC[-50]"
Selection.AutoFill Destination:=Range("Bt2:Ci2"), Type:=xlFillDefault
Range("BU2:CD2").Select
Range("CG2").Select
ActiveCell.FormulaR1C1 = "=IF(RC[-50]=""m"",R2C41*1,0)"
Range("CJ2").Select
End Sub
 

Pièces jointes

  • Test_Macro.xlsm
    58.3 KB · Affichages: 13

youky(BJ)

XLDnaute Barbatruc
Bon c'est bon quand on a tout,
Voici en retour le fichier ou j'ai exécuté la macro
C'est la macro EnteteValorisationUO
Merci de me tenir au courant
Fait aussi pour "m" car ca boguait hihi!!
Bruno
 

Pièces jointes

  • Test_Macro (2).xlsm
    60.5 KB · Affichages: 12

jlbcall

XLDnaute Occasionnel
Bonjour Bruno,

Merci pour ton aide, je rencontre un soucis au niveau de la seconde boucle car dans mon fichier les données descendent jusqu' à la ligne 20637.
Suivants mes hypothèses de travail, le nombre de lignes remplies dans la base donnée peut varier de 10500 à 25000 voir plus est-il possible de faire une boucle qui fassent les calculs jusqu' à la dernière ligne remplie en Colonne A.

i = 0
For lig = 2 To [A6500].End(3).Row
Est il possible avec les boucles for de faire une Dim dernière ligne car d'après ce que je comprends la boucle s'arrête à A6500 ensuite je comprends pas le End(3)

Merci encore pour ton aide et je te souhaite une belle journée
 
Dernière édition:

youky(BJ)

XLDnaute Barbatruc
Hello,
Yes pour voir la dernière ligne je suis parti de A6500 et remontait pour trouver une écriture
Donc 6500 c'est pas assez; PS je viens de voir à l'instant que d'habitude j'écris 65000 et j'ai oublié un zéro.
[A65000].end(3).row le 3 équivaux à (xlUp )
Les anciennes versions avaient 65536 lignes maintenant 1048576
Bon c'est rare d'avoir plus de 65000
Mets A65000 au lieu de A6500
Pour écrire à la suite dans une BD on dit ligneEcriture=[A65000].end(3).row+1
Bruno
 

jlbcall

XLDnaute Occasionnel
Remoi,

Toujours dispo, sans vouloir abuser je viens de me de me rendre compte que je dois diviser certaines valeurs par la colonne AL
les valeurs des colonne R -S -V-W sont juste à multiplier par le nombre de jour pour chaque mois, mais les colonne de x à AK doivent être mulitplié par la valeur en colonne AL.
Les valeurs contenues dont cette plage sont redondantes et doivent donc d'être proratisées par la valeur en AL.
Un fichier joint et espère avoir été compréhensible

Merci d'avance
 

Pièces jointes

  • Test_Macro.xlsm
    89.1 KB · Affichages: 13

job75

XLDnaute Barbatruc
Bonjour jlbcall, Bruno,

Ce problème peut se régler assez facilement sans VBA par cette formule en AZ1 à tirer vers la droite :
Code:
=INDEX($AN1:$AY1;1+ENT((COLONNES($AZ1:AZ1)-1)/18))&INDEX($R1:$AK1;INDEX(ColBase;1+MOD(COLONNES($AZ1:AZ1)-1;18)))
Formule du même style sur les lignes suivantes avec la multiplication.

Le nom ColBase est défini par la matrice ={1.2.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20}

Fichier .xlsx joint.

A+
 

Pièces jointes

  • test(1).xlsx
    1.5 MB · Affichages: 14

jlbcall

XLDnaute Occasionnel
Bonjour jlbcall, Bruno,

Ce problème peut se régler assez facilement sans VBA par cette formule en AZ1 à tirer vers la droite :
Code:
=INDEX($AN1:$AY1;1+ENT((COLONNES($AZ1:AZ1)-1)/18))&INDEX($R1:$AK1;INDEX(ColBase;1+MOD(COLONNES($AZ1:AZ1)-1;18)))
Formule du même style sur les lignes suivantes avec la multiplication.

Le nom ColBase est défini par la matrice ={1.2.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20}

Fichier .xlsx joint.

A+
 

Discussions similaires

Statistiques des forums

Discussions
312 177
Messages
2 085 977
Membres
103 078
dernier inscrit
diomy