Incrémentation et fonction range

chnico38 Messages postés 2 Date d'inscription jeudi 25 septembre 2008 Statut Membre Dernière intervention 26 septembre 2008 - 25 sept. 2008 à 10:55
chnico38 Messages postés 2 Date d'inscription jeudi 25 septembre 2008 Statut Membre Dernière intervention 26 septembre 2008 - 26 sept. 2008 à 09:58
Bonjour j'essaye de modifier une macro sur excel 2000 me permettant de générer une nouvelle feuille et de reprendre la formule d'un groupe de cellule sur la feuille précédente. Pour être plus clair voici un extrait de la macro :
n = 0
b = 0
n = Sheets.Count
b = (n - 1) / 2
Sheets("sA" & b).Copy After:=Sheets("pda" & b)
Sheets(n + 1).Name = "sA" & b + 1
Range("L6").Select
ActiveCell.FormulaR1C1 = b + 1


If Range("L6") 2 Then Range("(y10:y14)") "=sa1!R[0]C[2]"If Range("L6") 3 Then Range("(y10:y14)") "=sa2!R[0]C[2]"

etc.....

Mais seulement en fonction des projets que j'ai à réaliser la plage de cellule peut changer, il peut y avoir plusieurs plages et j'ai 100 occurences, ça fait pas mal de ligne à corriger

Je ne sais pas si je suis sur la bonne voir mais je voudrais n'avoir qu'une seule ligne de commande pour les 100 occurences (le chiffre 100 est un ordre d'idée aucune limite ne m'est imposée)
j'ai essayé une ligne de commande du style :
If Range("L6") b + 1 Then Range("(y10:y14)") ""sA & b - 1"R[0]C[2]"
Mais biensur ça ne fonctionne pas!

Quelqu'un pourrais t'il m'aider SVP. Je ne cache pas que je suis débutant. Et que je galère dessus depuis quelques jours.

Merci d'avance!

chnico

2 réponses

bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
25 sept. 2008 à 15:57
Salut,

n = 0
b = 0
n = Sheets.Count
b = (n - 1) / 2
Sheets("sA" & b).Copy After:=Sheets("pda" & b) <---- ici je pense que "pda" & b ne sert a rien et que tu peux le remplacer par n ou alors j'ai rien compris a la structure de ton fichier !
Sheets(n + 1).Name = "sA" & b + 1
Range("L6").Select
ActiveCell.FormulaR1C1 = b + 1 If Range("L6") 2 Then Range("(y10:y14)") "=sa1!R[0]C[2]" <---- ici il y a un probleme car la R[0] n'existe pas, le comptage des lignes commence a 1If Range("L6") 3 Then Range("(y10:y14)") "=sa2!R[0]C[2]" <---- ici il y a un probleme car la R[0] n'existe pas, le comptage des lignes commence a 1
Je ne comprend pas l'objectif de ces 2 lignes.
- Est ce que tu veux ecrire une formule"=sa1!R[1]C[2]" dans la plage de cellules y10:y14 ?
- ou tu veux recuperer la formule qui ce trouve en sa1!R[1]C[2] et l'ecrire dans la plage de cellule y10:y14 ? Pour la suite j'ai choisi cette option

donc ton code en version corrigé :

n = 0

b = 0

n = Sheets.Count

b = (n - 1) / 2

Sheets("sA" & b).Copy After:=Sheets(n)

Sheets(n + 1).Name = "sA" & b + 1

Range("L6").Value = b + 1

If Range("L6") 2 Then Range("y10:y14").Formula Sheets("sa1").Range("B2").Formula

If Range("L6") 3 Then Range("y10:y14").Formula Sheets("sa2").Range("B2").Formula

A+
0
chnico38 Messages postés 2 Date d'inscription jeudi 25 septembre 2008 Statut Membre Dernière intervention 26 septembre 2008
26 sept. 2008 à 09:58
Merci pour tout d'abord de m'avoir répondu. En fait mon problème est le suivant :
Mon dossier est composé au départ de 3 feuilles :  une feuille "données de base", une feuille de situation appellée "sa1" faisant figurer des pourecntage d'avancement et une 3ème feuille "pda1"faisant une synthèse des montants à payer selon le poucentage d'avancement dans la période considérer dans la macro

Cette macro doit me permettre de génerer automatiquement une nouvelle feuille de type Sa(i) et pda(i)

Dans la macro, la variable (i) correspond à "b"

j'ai un bout de ligne de commnande suivante : If Range("L6") 2 Then Range("(y10:y14)") "=sa1!R[0]C[2]"                If Range("L6") 3 Then Range("(y10:y14)") "=sa2!R[0]C[2]"                If Range("L6") 4 Then Range("(y10:y14)") "=sa3!R[0]C[2]"                If Range("L6") 5 Then Range("(y10:y14)") "=sa4!R[0]C[2]"                If Range("L6") 6 Then Range("(y10:y14)") "=sa5!R[0]C[2]"
                etc...jusque 99 :                If Range("L6") 99 Then Range("(y10:y14)") "=sa98!R[0]C[2]"

Mais je suis amené à modifier en fonction de chaque projet la plage de cellule concernée "range("(y10:y14)")".
Cette ligne me permet d'attibuer à une cellule désignée dans ma plage range (située dans la feulleSa2), le  résulat de la cellule située dans la feuille Sa1, même ligne mais 2 colonnes plus loin...

Pour me faciliter la vie je voudrais écris cela en 1 à 2 lignes et non en 99 lignes

Est ce que cela est possible?

PS : le code que tu m'as donné me renvoi la valeur 0 dans les cellule y et je n'ai pas compris la définition de range "B2"

Merci d'avance

A+
0
Rejoignez-nous