AutomaVB

Résolu
cindy001 Messages postés 102 Date d'inscription   Statut Membre Dernière intervention   -  
ccm81 Messages postés 10909 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Je veux terminer cette macro mais je n'y arrive pas:

ce que je veux faire c ajouter un p au début de la macro que je peux faire varier(dans la 1ère macro ci dessous c le cas particulier ou p=60 de DC à FJ y'a 60 colonnes comme de AU à DC, et pour la deuxième en dessou c p=40), ca serait plus facile de partir de la dernière colonne(celle ou ya les derniers chiffres dans la Feuil1 du fichier ci-joint:
http://www.cijoint.fr/cjlink.php?file=cj201101/cijgMdNsm1.xls
J'ai essayé avec la fonction Offset mais j'arrive pas.


Donc avec cette macro c le cas particulier ou p=60
Sub CCM()

Const imax = 1200


Dim lig As Long
Dim f1 As String, f2 As String, f3 As String, f4 As String

lig = 20

For i = 2 To imax Step 2

f1 = "=product('Coef Mul Titre Large Ret1m'!$DC$" & lig & ":$FJ$" & lig & ")-1"
f2 = "=Feuil1!$DB$" & lig

f3 = "=product('Coef Mul Titre Large Ret1m'!$AU$" & lig & ":$DC$" & lig & ")-1"
f4 = "=Feuil1!$AT$" & lig

Range("A" & i).Formula = f1
Range("B" & i).Formula = f2

Range("A" & (i + 1)).Formula = f3
Range("B" & (i + 1)).Formula = f4

lig = lig + 1

Next i

End Sub


Avec celle ci c'est le cas particulier ou p=40(résultat dans l'onglet p=40)

Sub CCM()

'cas p = 40

Const imax = 1800


Dim lig As Long
Dim f1 As String, f2 As String, f3 As String, f4 As String, f5 As String, f6 As String

lig = 20

For i = 2 To imax Step 3

f1 = "=product('Coef Mul Titre Large Ret1m'!$DW$" & lig & ":$FJ$" & lig & ")-1"
f2 = "=Feuil1!$DV$" & lig

f3 = "=product('Coef Mul Titre Large Ret1m'!$CJ$" & lig & ":$DW$" & lig & ")-1"
f4 = "=Feuil1!$CI$" & lig

f5 = "=product('Coef Mul Titre Large Ret1m'!$AW$" & lig & ":$CJ$" & lig & ")-1"
f6 = "=Feuil1!$AV$" & lig

Range("A" & i).Formula = f1
Range("B" & i).Formula = f2

Range("A" & (i + 1)).Formula = f3
Range("B" & (i + 1)).Formula = f4

Range("A" & (i + 2)).Formula = f5
Range("B" & (i + 2)).Formula = f6


lig = lig + 1

Next i

End Sub

Merci d'avance pour votre aide

30 réponses

cindy001 Messages postés 102 Date d'inscription   Statut Membre Dernière intervention   2
 
C trop compliquer?
0
ccm81 Messages postés 10909 Date d'inscription   Statut Membre Dernière intervention   2 433
 
re

bon, je vois que je ne suis pas le seul dans l'expectative
peut etre pas trop compliqué, mais ta demande est difficile a comprendre, je vais tenter d'éclaircir la situation
- la valeur de p a apparemment un lien avec tes noms de feuilles (lequel)
- veux tu une creation auto de feuille, une recopie de feuille modele) avec modif de formule ?
- ta macro doit elle avoir p comme parametre ?
- quelle(s) formule(s) est concernée par p?
- que veux tu faire de p?
- si tu donnais un exemple où p figure, et par quoi tu veux le remplacer (formule - même mal redigée contenant p - avant remplacement de p, formule après remplacement de p par 40 par exemple)

bon courage
0
cindy001 Messages postés 102 Date d'inscription   Statut Membre Dernière intervention   2
 
Merci de me répondre

Pour le p je voulais dire:
le calcul product on le bas dans chaque cas sur AU-FJ, y'a en tout 120 colonnes normalement:
dans le premier cas ci dessus on l'a couper en deux en gros: AU-DC DC-FJ
(c'était ca mon p = 2)
dans le deuxième cas en trois(ici p = 3)
normalement FJ correspon à une date je dis n'importe quoi:31/12/2009
et AU à 31/12/1999, pour moi le p c'est par exemple couper ca en 2 fois, 3 fois, 4fois, et arreter cette boucle jusqu'à 10, un p ou un i ou j dans cette boucle ca n'a pas d'importance


l'idée c d'automatiser ca


demain jpourrais meme un autre fichier plus précis si je ne suis toujours pas très clair?

une creation auto de feuille pour ces 10 cas serait parfait.

Merci encore
0
cindy001 Messages postés 102 Date d'inscription   Statut Membre Dernière intervention   2
 
Merci de m'avoir répondu
Alors dans ma formule j'ai mis FJ en f1 parceque dans la feuille Coef Mul Titre Large Ret1m les chiffres s'arretent en FJ mais j'ai d'autres fichiers ou ca se termine plus loin donc j'aimerai que ma macro sache reconnaitre quelle est cette dernière colonne
donc remplacer FJ par un LastColumn qu'on ferait calculer.

FJ ca correspond par exemple à la date 31/12/2009 et AU 31/12/1999(y' a 120 mois)

le premier cas que j'ai fais au dessus correpondrait au cas ou on coupe cette intervalle en deux(AU-DC en f1 et DC-FJ en f3) donc 120mois/2 = 60 c'était ca mon p =60 mais je me suis mal exprimer

la deuxième cas on le coupe en 3(qu'on peut mettre dans une autre feuille) c'était ca mon cas: p= 40 au dessus car 120/3(3 car on coupe en 3)

puis ensuite j'en ai besoin en 4, 5 ..... jusqu'à 10, qu'on peut mettre à chaque fois dans une nouvelle feuille, en automatique je sais pas comment faire mais ca serait parfait

c ca que je voulais dire que jai dis p mais je me suis mal exprimer



p comme paramètre ou autre aucune importance
pour la formule f2
f2 = "=Feuil1!$DB$" & lig , DB c en fait une colonne avant le DC de f1 ci dessous
automatiser ca serait

f1 = "=product('Coef Mul Titre Large Ret1m'!$DC$" & lig & ":$FJ$" & lig & ")-1"

comme pour f4
f4 = "=Feuil1!$AT$" & lig
le AT c en fait une colonne avant le AU de f3:
f3 = "=product('Coef Mul Titre Large Ret1m'!$AU$" & lig & ":$DC$" & lig & ")-1"

si je suis pas assez précis dis le moi??? comme ca demain jpourrais mettre un autre fichier sur cijoint en fesant plus de cas

Merci encore
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ccm81 Messages postés 10909 Date d'inscription   Statut Membre Dernière intervention   2 433
 
re

sur le fichier de ton pos1, il y a deux feuilles p=60 et p=40
donc si je comprends p = 60 coreespond a quelque chose coupé en 2 et les 4 cellules A2:B3 se referent à la ligne 20.
et p=40 à coupé en 3 ? et les 6 cellules A2:B4 se referent à la ligne 20.
donc le probleme est la gestion (numerique) des n° de colonnes
pour cela il faudrait passer en mode L1C1 (outils/option/general/Style L1C1 (en VBA style R1C1 et ça devient cells(lig,col).formulaR1C1 = fxx )

questions
- pour chaque feuille la reference $FJ$J (col 166) est elle la même
- expliquer alors comment la valeur de p influe t'elle sur $DC$20 (de combien recule t'on depuis FJ en fonction de p?)
- la 1° col du cas p=40 est AW (col 49) et celle du cas p=60 et AU (col 47) est ce normal, comment varie cette colonne en fonction de p?
- quels sont les 10 cas pour p : comment couper 120 en autre chose qu'en 2,3,4,6 (seuls diviseurs de 120 <= 10) me parait bizarre!
- si tu eux m'expliquer tout ça en utilisant des numéros de colonnes (numérique), ça serait plus clair
- envoies ton exemple avec les premieres lignes de chaque cas

bonne suite
0
cindy001 Messages postés 102 Date d'inscription   Statut Membre Dernière intervention   2
 
- la 1° col du cas p=40 est AW (col 49) et celle du cas p=60 et AU (col 47) est ce normal, comment varie cette colonne en fonction de p? NON c une erreur
pour cette 3 ème question c une bonne question car on a en tout 120 colonnes et on veut donc couper en 2, 3... jusqu'à 10 donc c pas AW mais AU, bref on veut couper de 6 en 6(je parle en colonne là)
on coupe en 2: on aura 60 et 60 colonnes(120/2)
puis j'aimerai ensuite les cas 54, 48, 42, 36 jusqu'à 12(12 c le dernier cas que j'ai dis ou on coupe en 10(120/10)...... au lieu du 60 juste au dessus donc de 6 en 6 je veux qu'on fasse cette boucle(c la réponse à ta deuxième question on bouge de 6 en 6 à partir de FJ (enfin non à partir de la dernière colonne qui est FJ dans ce cas ci)FJ qu'on fige enfin on part de là, on fait donc 60 àpartir de FJ, 54 à partir de FJ,.....jusqu'à 12 à partir de FJ)


le cas p = 40 on coupe en 3 c'était juste pour illustrer ce que je voulais
mais jpense que t'as compris c bien ca:

sur le fichier de ton pos1, il y a deux feuilles p=60 et p=40
donc si je comprends p = 60 coreespond a quelque chose coupé en 2 et les 4 cellules A2:B3 se referent à la ligne 20.
et p=40 à coupé en 3 ? et les 6 cellules A2:B4 se referent à la ligne 20.

Merci encore
0
cindy001 Messages postés 102 Date d'inscription   Statut Membre Dernière intervention   2
 
Alors voila comme je l'avais dis

j'ai fait d'autres cas, 4 en tout et les résultats sont bon ils sont dans les feuilles cas1(p=120 c tout AU-FJ macro CCM1 module1) cas2(p = 60 c la macro CCM2 que j'ai lancé) cas3(macro CCM3) et cas4(p = 24 j'ai coupé AU-FJ en 5(120/5 pour le p=24) )
http://www.cijoint.fr/cjlink.php?file=cj201101/cijLrxkd2S.xls

Merci
0
cindy001 Messages postés 102 Date d'inscription   Statut Membre Dernière intervention   2
 
Et enfin avec le dernier cas on coupe AU-FJ en 10, les formules c ca:

f1 = "=product('Coef Mul Titre Large Ret1m'!$EY$" & lig & ":$FJ$" & lig & ")-1"
f2 = "=Feuil1!$EX$" & lig


f3 = "=product('Coef Mul Titre Large Ret1m'!$EM$" & lig & ":$EX$" & lig & ")-1"
f4 = "=Feuil1!$EL$" & lig



f5 = "=product('Coef Mul Titre Large Ret1m'!$EA$" & lig & ":$EL$" & lig & ")-1"
f6 = "=Feuil1!$DZ$" & lig

f7 = "=product('Coef Mul Titre Large Ret1m'!$DO$" & lig & ":$DZ$" & lig & ")-1"
f8 = "=Feuil1!$DN$" & lig

f9 = "=product('Coef Mul Titre Large Ret1m'!$DC$" & lig & ":$DN$" & lig & ")-1"
f10 = "=Feuil1!$DB$" & lig

f11 = "=product('Coef Mul Titre Large Ret1m'!$CQ$" & lig & ":$DB$" & lig & ")-1"
f12 = "=Feuil1!$CP$" & lig

f13 = "=product('Coef Mul Titre Large Ret1m'!$CE$" & lig & ":$CP$" & lig & ")-1"
f14 = "=Feuil1!$CD$" & lig

f15 = "=product('Coef Mul Titre Large Ret1m'!$BS$" & lig & ":$CD$" & lig & ")-1"
f16 = "=Feuil1!$BR$" & lig

f17 = "=product('Coef Mul Titre Large Ret1m'!$BG$" & lig & ":$BR$" & lig & ")-1"
f18 = "=Feuil1!$BF$" & lig

f19 = "=product('Coef Mul Titre Large Ret1m'!$AU$" & lig & ":$BF$" & lig & ")-1"
f20 = "=Feuil1!$AT$" & lig


c la dernière macro CCM5 résultats Feuille Cas5
http://www.cijoint.fr/cjlink.php?file=cj201101/cijvtryCLz.xls




Bon si j'arrive toujours pas à me faire comprendre, dis le moi stp comme ca je le fais à la main, en tout y'a que 10 cas j'en ai déja fais 5 (document cijoint)
0
ccm81 Messages postés 10909 Date d'inscription   Statut Membre Dernière intervention   2 433
 
re

bon ccm etait dans les choux du moins depuis chez moi .... ce qui m'a obligé a reflechir tranquille !!!

je n'ai pas vu ton dernier ccm5

ce qui est sur c'est que le style L1C1 convient beaucoup mieux a ton pb que le style A1, ça permet de travailler sur les n° de colonnes ce qui est nettement plus commode que les lettres (ça permet des calculs)
j'ai traité les cas p = 2 et p = 3 (sans macro - avec decaler)
j'ai traité le cas p = 2 avec macro.
les numéros de colonnes doivent pouvoir se calculer en fonction de p (a toi de voir)

RQ. j'ai ajouté une feuille F0 pour essayer d'y voir clair !!! elle ne m'a pas servi, mais on ne sait jamais !

http://www.cijoint.fr/cjlink.php?file=cj201101/cij62xK4qC.xls

bonne suite
0
ccm81 Messages postés 10909 Date d'inscription   Statut Membre Dernière intervention   2 433
 
re

excuses, ce message est une erreur

bonne suite
0
ccm81 Messages postés 10909 Date d'inscription   Statut Membre Dernière intervention   2 433
 
re

j'ai repris ton dernier envoi
en essayant d'automatiser le cas p = 3
j'ai mis un bouton sur cette feuille et code la procedure
MAIS il y a pb voir RQ dans le code du bouton

http://www.cijoint.fr/cjlink.php?file=cj201101/cijG2lkuuj.xls

tu peux toujours t'en inspirer pour les cas suivants, mais si on veut vraiment automatiser, , il faut regler le pb des tailles de paquets

bonne suite
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
Salut ccm81,
Avant de me pencher sur le problème en cours, je désirais attirer ton attention sur la déclaration de variables. Tu dis, dans ton code VBA ne pas être obligé de déclarer toutes les variables, car cela fonctionne. Il faut déclarer systématiquement toutes les variables utilisées dans la macro! Voici deux liens cadeaux :
http://www.info-3000.com/vbvba/variableconstante.php
et surtout :
ftp://ftp-developpez.com/silkyroad/VBA/LesVariables/LesVariables.pdf

Si tu veux être sur de ne jamais oublier de déclarer tes variables, commence systématiquement tes macros par :
Option Explicit
Sub ...()
Cordialement,
0
cindy001 Messages postés 102 Date d'inscription   Statut Membre Dernière intervention   2
 
Ok
donc tu comprends ce que je voulais faire maintenant

mais bon c peut etre impossible d'aller aussi loin dans l'automatisation.

meme si raisonner en terme de L C plutot que mettre les lettres des colonnes FJ... c'était une bonne idée

sinon t'as rien touché aux macros t'as juste changé dans les formules FJ en C166..... à la main.

Merci quand meme d'avoir regardé
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
Bonjour vous deux,
Besoin d'un coup de main?
J'ai téléchargé le fichier joint à la dernière réponse de ccm81, mais honnêtement, je ne comprends pas du tout ou vous voulez en venir.
Pourriez vous, si vous en avez toujours besoin, reposer votre question simplement?
0
cindy001 Messages postés 102 Date d'inscription   Statut Membre Dernière intervention   2
 
Merci de répondre merci à vous deux
http://www.cijoint.fr/cjlink.php?file=cj201101/cijpb4ged3.xls

Je veux juste une macro qui soit capable de me créer ces onglets( que j'ai appelé Cas1...cas6 mais peu importe les noms) automatiquement avec ces formules à l'interieur dépendant des 3 premières feuilles, mon idée du Offset n'est peut etre pas terrible mais peut importe la méthode ou fonction utiliser.

J'ai 6 macros que j'ai lancé chacune dans un onglet que j'ai créer à la main.

Mais je crois que c trop dur à faire?
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
Bon je n'ai touché à rien dans le code, je n'ai même pas cherché à en comprendre le but.
Ce que j'ai fait par contre :
création du module : "création onglets" dans lequel j'ai automatisé la création des feuilles et réunit les 6 macros.
Vous dites...
http://www.cijoint.fr/cjlink.php?file=cj201101/cijldex3Ga.xls
0
ccm81 Messages postés 10909 Date d'inscription   Statut Membre Dernière intervention   2 433
 
re

j'ai toujours des pb pour me connecter au site !!!

au vu de ton dernier envoi, il y a bien cette fois une logique de découpage selon la valeur de p
du coup, le code est grandement simplifié

- tu mets un bouton (avec la boite a outils controle) dans la feuille
- tu y attaches le code suivant

Const p = 10   
Const imax = 70   
Const co1 = 5   'j'ai execute en colonnes 4 et 5   
Const co2 = 6   
Const colder = 166   
Const FCoeff = "'Coef Mul Titre Large Ret1m'"   
Const f1 = "'Feuil1'"   
Const ideb = 20    ' ligne 1 feuille cas = 3   

Dim lig As Long, col1 As Long, col2 As Long, i As Long, j As Long, pp As Long   
Dim a1 As String, a2 as string   

lig = 20   
pp = 120 \ p   

i = ideb   
  While i < imax   
    col1 = colder - pp + 1   
    col2 = colder   
     
    For j = 1 To p   
      a1 = "=product(" & FCoeff & "!R" & lig & "C" & col1 & ":" & "R" & lig & "C" & col2 & ")-1"   
      b1 = "=" & f1 & "!R" & lig & "C" & col1 - 1   
      Cells(i, co1).FormulaR1C1 = a1   
      Cells(i, co2).FormulaR1C1 = b1   
      i = i + 1   
      col1 = col1 - pp   
      col2 = col2 - pp   
    Next j   
       
    lig = lig + 1   
  Wend   


- tu changes la valeur de p
- et les valeurs de constantes col1 et col2 (colonnes pour l'affichge des resultats)

http://www.cijoint.fr/cjlink.php?file=cj201101/cij2tl7Lkx.xls


RQ1. on peut aussi passer la valeur de p en parametre à la procedure, histoire de n'avoir qu'un seul exemplaire du code
RQ2. pijaku a reglé le problème de la creation des onglets donc ...

bonne suite
0
cindy001 Messages postés 102 Date d'inscription   Statut Membre Dernière intervention   2
 
j'avou que je ne suis pas assez fort en vb pour comprendre tout de suite .

j'ai mis un bouton sur la feuille j'y ai mis le code.
Mais quend je clique dessus il se passe.

Jconnais pas trop ca, peut-etre faut il que je rajoute mon code avant le End Sub avec??

jvais continuer à essayer de le comprendre il mfaut ptere juste un peu de temps

Merci de rseter avec moi
0
ccm81 Messages postés 10909 Date d'inscription   Statut Membre Dernière intervention   2 433
 
re
as tu
- regarde le la feuille cas 5 de mon dernier post
(clic-droit sur l'onglet/Visualiser le code)
- mis ton bouton dans la feuille a remplir
- mis un bouton avec la boite a outils controle
Au cas où !!
- Affichage/boite a outils controle/
- passer en mode creation (le petit triangle bleu)
- clic-clic sur le bouton pour passer a l'editeur VB
- et mettre le code entre Private Sub CommandButton1_Click() et end sub
- repasser en mode execution (le petit triangle bleu)
bonne suite
0
lermite222 Messages postés 8724 Date d'inscription   Statut Contributeur Dernière intervention   1 191
 
Bonjour le forum,
J'ai parcouru le topic en diagonal et je compte pas aller plus loin, mais ce qui me fait intervenir c'est... pourquoi faire une macro qui insère une formule plutôt que de mettre directement la fonction qui génère la réponse. ???
Ce serait quand même plus rationnel.
A+
0
ccm81 Messages postés 10909 Date d'inscription   Statut Membre Dernière intervention   2 433
 
> lermitte222
- à l'origine, la demande a ete faite avec des formules
- si les données changent, les formules permettront la mise a jour
a+
-
0
lermite222 Messages postés 8724 Date d'inscription   Statut Contributeur Dernière intervention   1 191
 
Mais oui, mais avec des fonctions ça se met à jour aussi !!
0
ccm81 Messages postés 10909 Date d'inscription   Statut Membre Dernière intervention   2 433
 
re

j'ai rajouté la creation et le remplissage des feuilles selon la valeur de p > feuille F0, (p =2 correspond a ton 60, p = 3 à ton 40 etc ... )


http://www.cijoint.fr/cjlink.php?file=cj201101/cijYHPIBGu.xls

les modules deviennent inutiles (sauf module 6 qui contient le code) et pourront etre supprimes
si c'est bon, il te faudra modifier dans le code de CreerFeuille, les valeurs de col1, col2 et imax

bonne suite
0
cindy001 Messages postés 102 Date d'inscription   Statut Membre Dernière intervention   2
 
bon jpeux pas rgarder la parceque j'ai pas excel chez moi mais comme t'as compris ce que je voulais jpense que t'as bien traité ca:(c ce que j'avais mis plus haut le 12 jan 2011 à 23:33)

on coupe en 2: on aura 60 et 60 colonnes(120/2)
puis j'aimerai ensuite les cas 54, 48, 42, 36 jusqu'à 12(12 c le dernier cas que j'ai dis ou on coupe en 10(120/10)......on bouge de 6 en 6 à partir de FJ


quand jdisais à la fin 120 , puis 120/2(p = 2), puis 120/3 (p =3)....., c'était pour que tu saisisses le truc, qui était un peu difficile à expliquer.

Mais bon c peut etre ce que t'as fais.

Alors Merci jpourrais rgarder ca que lundi.
0
ccm81 Messages postés 10909 Date d'inscription   Statut Membre Dernière intervention   2 433
 
re
en relisant ton dernier post, j'ai encore quelques doutes, donc je re-précise comment j'ai compris/traité le decoupage

- le cas p=5 correspond au decoupage de C47:C166 (AU:FJ) en 5 paquets de 120/5 = 24 colonnes (166:143 , 142:119 , ... , 70:47)
- donc pour p (obligatoirement diviseur de 120) on découpe C47:C166 en p paquets de 120/p

puis j'aimerai ensuite les cas 54, 48, 42, 36 jusqu'à 12(12 c le dernier cas que j'ai dis ou on coupe en 10(120/10)......on bouge de 6 en 6 à partir de FJ
si on bouge de 6 en 6, pour moi, on coupe en p = 20 (120/20 = 6)

sur mon envoi, j'ai traité le cas p = 10,
enfin, tu verifies avec les cas que tu as déjà fabriqués et tu dis ...

bonne suite
0