chrsitophe
Messages postés11Date d'inscriptionmercredi 16 avril 2008StatutMembreDernière intervention21 avril 2008
-
17 avril 2008 à 19:34
Acta_6
Messages postés29Date d'inscriptionmercredi 25 avril 2007StatutMembreDernière intervention22 avril 2008
-
18 avril 2008 à 12:59
J'ai un programme à faire qui doit recopier des valeurs d'une feuille vers une autre feuille un certain nombre de fois. Ce nombre de fois est correspond à la valeur d'une cellule.
L'exemple ci-dessous sera plus parlant:
feuil1
B C D E
7 nb 2 1 2 nb est le nombre de fois que les données doivent être copiées
8 donnée1 typ1 typ2 typ3
9 donnée2 rep1 rep2 rep3
feuil2
B C D E F G
8 donnée1 typ1 typ1 typ2 typ3 typ3
9 donnée2 rep1 rep1 rep2 rep3 rep3
En réalité les données vont jusqu'à la ligne 38 et jusqu'à la colonne R
Voici mon code
For j = 3 To 18
'Boucle pour balayer les colonnes C (C=3) à R (R=18)
j correspond au numéro de la colonne pour la feuille1
For h = (3 + k) To (2 + k + Cells(9, j).Value)
'Boucle pour copier les données en fonction
du nombre "nb"
h correspond au numéro de la colonne pour la feuille 2
3 provient du fait que les données commence à partir de la colonne 'c'
2 provient du fait qu'il faut tenir compte du 3 et il faut ajouter -1
Cells(9, j).Value est le nombre de fois à copier les données
k est une variable incrémentée après juste après cette boucle for, elle permet de ne
pas réécrire deux fois dans la même colonne dans la feuille 2 Sheets("feuil1").Select<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>
Range("& j & 8: & j & 38").Select 'Séléction des données à copier
Selection.Copy
Sheets("feuil2").Select
Range("& h & 8: & h & 38").Select 'Séléction de la plage à où les données seront récopier
ActiveSheet.Paste
Next h
k = k + Cells(9, j).Value 'Incrémentantation de la variable 'k' de Cells(9, j).Value
Next j
Ca fait longtemps que je suis sur cette macro et je ne vois plus comment m'en sortir.
Merci de votre aide
Acta_6
Messages postés29Date d'inscriptionmercredi 25 avril 2007StatutMembreDernière intervention22 avril 2008 18 avril 2008 à 12:59
MPi a raison pour la définition du range.
En plus, il est inutile, avant le Paste, de sélectionner toute la plage que va prendre tes cellules copiées. Sélectionne juste la première cellule. Ca devrait suffire.
Ensuite, ta 2ème boucle (celle pour copier les données) est inutile puisque la colonne d'insertion dépend forcément de la colonne de ta Feuill1 et du nb que tu récupères dans cette feuille aussi.
Il te suffit d'avoir une boucle For... to... ou Do...while qui va boucler nb fois pour faire ton Paste dans la colonne voulue de Feuill2.
Sans trop changer ton code (vais faire des ptits copier-coller), ca donnerait quelquechose de ce type:
Col2= 3 ' 1ère colonne dans laquelle tu dois copier tes données
For j =3 to 18
Sheets("feuil1").Select
Range(Cells(8, j), Cells(38, j)).select
selection.Copy
Sheets("feuil2").Select
Nb=1
Do
Cells(8,Col2+Nb-1).Select
ActiveSheet.Paste
Loop Until Nb=Cells(9,j) 'cela dit, j'ai pas compris pourquoi c'était pas la ligne 7 mais bon...
Col2=Col2+Nb
Next j
Bon, j'ai juste planché sur tes boucles un peu complexe a mon gout mais le reste du code (les copy-paste) sont a toi.