[Déplacé .Net --> VBA] répéter une macro avec décalage de colonnes
enilec89
Messages postés12Date d'inscriptionvendredi 26 septembre 2008StatutMembreDernière intervention 1 décembre 2009
-
27 nov. 2009 à 19:16
enilec89
Messages postés12Date d'inscriptionvendredi 26 septembre 2008StatutMembreDernière intervention 1 décembre 2009
-
1 déc. 2009 à 18:55
Bonsoir,
J'avais déjà fait appelle à vous il y a un an. Et vous m'aviez bien aidé, donc je reviens vers vous pour la même macro.
J'ai une macro qui se répète 30 fois, mais il faudrai maintenant qu'elle se répète 90 fois. Mon code fait déjà 102 pages en fichier word !!!
En gros en fonction de la valeur de C4, il faut copier/coller dans une cellule différente mais sur la même ligne : B8 si la valeur de C4 est 1, F8 si la valeur de C4 est 2, etc. On décale de 4 colonnes à chaque fois.
Désolée si c pas très claire, mais je débute donc je ne sait pas trop comment expliquer.....
Merci pour votre aide.
Voici une partie de mon code:
Sub S1()
Dim Lig_S As Long
Dim Lig_D As Long
Dim F_S As Worksheet
Dim F_D As Worksheet
Set F_S = Sheets("F1")
Set F_D = Sheets("F2")
Lig_D = F_D.Range("A65536").End(xlUp).Row + 1
For Lig_S = 44 To 3 Step -1
With F_S
If F_S.Range("C4").Value = 1 Then
F_D.Select
Application.CutCopyMode = False
Dim Lig_S As Long
Dim Lig_D As Long
Dim F1 As Worksheet
Dim F_S As Worksheet
Dim F_D As Worksheet
Set F1 = Sheets("F1")
Set F_S = Sheets("F2")
Set F_D = Sheets("F3")
Lig_D = F_D.Range("A65536").End(xlUp).Row + 1
For Lig_S = 44 To 3 Step -1
With F_S
If F1.Range("C4").Value = 1 Then
F_D.Select
Application.CutCopyMode = False
Dim Lig_S As Long
Dim Lig_D As Long
Dim F_S As Worksheet
Dim F_D As Worksheet
Set F_S = Sheets("F1")
Set F_D = Sheets("F3")
Lig_D = F_D.Range("A65536").End(xlUp).Row + 1
For Lig_S = 44 To 3 Step -1
With F_S
F_D.Select
Application.CutCopyMode = False
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 28 nov. 2009 à 09:23
Salut
Désolé, mais personne n'aura le courage de lire tes lignes trop nombreuses.
Une bonne explication vaut tous les programmes du monde !
Ton problème n'est qu'un problème de mathématique :
Comment désigner le numéro d'une colonne en fonction du contenu d'une cellule, sachant que le décalage est une constante, 4.
Tu dis :
B8 si la valeur est 1 (B = colonne 2)
F8 si la valeur est 2 (F = colonne 6)
Ceci n'est qu'une équation du premier degré. Tu n'as pas révisé tes cours de 6ème ?
y = a * x + b
avec
2 = a * 1 + b
6 = a * 2 + b
6-2 = a * (2-1)
donc a = 6-2 / (2-1)
donc a = 4
Si a = 4
6 = 4 * 2 + b
donc b = 6 - 4*2
donc b = -2
Au final :
NoColonne = 4 * CelluleC4 - 2
Exemple si CelluleC4 2 --> NoColonne 4*2 - 2 = 6
Exemple si CelluleC4 3 --> NoColonne 4*3 - 2 = 10
etc ...
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
us_30
Messages postés2065Date d'inscriptionlundi 11 avril 2005StatutMembreDernière intervention14 mars 201610 28 nov. 2009 à 14:16
Bonjour,
Euh... tu te tapes un délire!
Tu veux faire presque rien, et tu as un codage incroyablement long... On programme jamais avec autant de ligne pour de simples copier/coller... Il faut absolument penser les choses autrement (au niveau du codage ou de l'organisation du tableau) !
Dans l'immédiat, je n'ai pas le temps de regarder ton code... Mais si tu pouvais décrire un peu plus les actions que tu fais, cela pourrait aider à trouver une solution de codage beaucoup plus élégante...
enilec89
Messages postés12Date d'inscriptionvendredi 26 septembre 2008StatutMembreDernière intervention 1 décembre 2009 28 nov. 2009 à 19:09
Oui c'est vrais qu'il y a surement plus simple et plus élégant, mais j'ai honte de le dire, j'ai déjà eu du mal à pondre ce code très confu....
Je vais essayer de trouver les mots....
En fait, j'ai un document excel avec 3 feuilles.
- La feuille 1 est un tableau a remplir tous les jours
- la feuille 2 est un tableau dans lequel doit se reporter certaines cellules de la feuille 1 dans les colonnes Jour 1 à Jour 90 en fonction du jour inscrit sur la feuille 1. Si (J) 1, on remplira les colonnes JOUR 1 de la feuille B, si (J) 2, les colonnes JOUR 2, etc?
- la feuille 3 se met à jour par la même macro, mais reprend des cellules de la feuille 2.
Nous aurons donc chaque jour :
- une nouvelle feuille 1 qui écrase la précédente
- une feuille 2 qui se complète dans les colonnes JOUR 1 à JOUR 90 en fonction du jour de la feuille 1 (C4) et qui cumule tous les jours.
- Une nouvelle fiche 3 dont les résultats viendront de la feuille 2 et qui écrase la précédente .
Voilà, j'ai essayé d'être le plus clair possible mais soyez indulgents, je ne fait que débutanter.
Jack, j'adore ton résonement mathématique auquel je n'avait absolument pas pensé.
Cela dit je ne suis pas sure de comprendre comment l'utiliser...
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 30 nov. 2009 à 21:05
Pour le calcul, je t'ai fourni la méthode pour trouver le chiffre correspond à ta colonne en fonction du n° de ligne.
Tu n'as plus qu'à te familiariser avec la désignation d'une cellule par son numéro de ligne et de colonne : voir Cells(x, y) et éventuellement Cells(x, y).Offset(z, t) (si tu dois te désigner une cellule voisine sans déplacer ta sélection) qui sont les fonctions les plus utilisées en VBA de Excel !
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Vous n’avez pas trouvé la réponse que vous recherchez ?
enilec89
Messages postés12Date d'inscriptionvendredi 26 septembre 2008StatutMembreDernière intervention 1 décembre 2009 1 déc. 2009 à 18:55
Jack, merci pour tes explications.
J'ai essayé de m?intéressé d'un peu plus près aux Cells(x, y) mais je suis un peu perdu et j'ai peur qu'en remplaçant les ranges par des cells, mont code deviennent de plus en plus long.
Serait-il possible d'appliquer ta formule à la macro entière ?
Les Ranges avec un point devant ne changent jamais.
Seul les Ranges sans point devant varient en fonction de la valeur de C4.
Ce sont eux que je devrais décaler de 4 colonnes à chaque fois.
Peut-on demander d'exécuter la même macro en décalant toutes le range sans point devant de 4 colonnes à chaque fois ?