Copier/Coller depuis Feuille Source vers nvelle feuille
Re bonjour à tous...
Bon second post pour aujourd'hui...
Bref... en prenant manuellement chacune des feuilles créées... et vu le nombre conséquent non seulement je passe un temps fou... mais répétition de "rechercher/remplacer" aidant... il n'est pas rare que je fasse une boulette...
Si vous pouvez une fois encore m'aider... Merci beaucoup....
Alors J'ai une feuille Base & une feuille Modèle
Avec la macro jointe dans l'exemple, il y a la création de X feuille copie du modèle pour chaque ligne de la feuille Base...
Dans les feuilles créées :
J'aimerai que la plage (F1:J1) se remplisse automatiquement à la création de la nouvelle feuille avec les valeurs des colonnes (C:G) correspondant à la ligne qui génère la création de cette feuille...
Exemple lors de la création de la feuille "1" (généré par la cellule A2 non vide de la feuille "Base"), il faudrait que cette plage corresponde aux données C2:G2 de la feuille "Base"
Voici le code de la macro actuelle dans le fichier joint et en fin de ce post... donc si possible inclure le copier/coller dans cette macro...
Autres demandes (de moindre importance)...
1- A chaque fois, avant d'exécuter la macro, je dois supprimer les feuilles créées antérieurement car la macro part toujours du début de la feuille "Base"... Hélas j'ai beaucoup de feuilles...
et, de plus, plus il y a de ligne dans la feuille "Base"... plus cela prend du temps...
Alors, je me demande s'il ne serait pas mieux d'inclure avant l'exécution du code de création de feuille un code pour que la création de nouvelle feuille ne s'exécute que si le nombre de ligne de la feuille "Base" est supérieur au nombre de feuille à partir de la feuille "1" incluse que contient le dossier. Et, si tel est le cas, ne créer que les nouvelles feuilles concernées par les nouvelles lignes tout en conservant les autres... Est-ce possible à votre avis ? et si oui, comment ?...
2 - A plusieurs reprise (à force de chercher des solutions!), j'ai constaté que lorsqu'il est question de fichier assez imposant en nombre de ligne, colonne, calcul.... très souvent, il est proposé les Array... Bon alors là, je nage encore plus la brasse coulée... malgré les cours ici et l'aide microsoft... Pourtant, pour certains fichier dont celui-ci, il semblerait que cela soit plus indiqué pour la rapidité d'exécution du code... (actuellement 5 bonnes mn!)... Bon, ok, je peux faire pause café pendant ce temps là...
Alors comme tous mes fichiers différents découlent les uns des autres... je me demande s'il ne serait pas préférable d'utiliser les Array ... y compris pour le cas précis ici...
Si quelqu'un peut m'éclairer de ses lumières à ce sujet... j'apprécierai beaucoup... et, si ce n'est pas trop abuser, alors j'aimerai bien le code avec explication détaillée pour le fichier en question ici ou un exemple de code pour 5 colonnes pour m'expliquer pas à pas... comme cela je comprendrais peut-être enfin comment utiliser les Array...
Encore une fois merci à tous ceux qui nous aident, conseillent et forment...
En attendant de vous lire... Belle journée...
Lilly
Sub RapQuotPers()
'Créer et remplir les feuilles depuis les infos de la feuille BASE
Dim wsBase As Worksheet 'Feuille Base
Dim wsMod As Worksheet 'Feuille Modèle
Dim c As Range
Application.ScreenUpdating = False
Set wsBase = Worksheets("Base")
Set wsMod = Worksheets("Modèle")
Set c = wsBase.Range("A2") 'Cellule de départ de la colonne de comptage pour créer les autres feuilles
Do Until IsEmpty(c) 'boucle
wsMod.Copy After:=Worksheets(ThisWorkbook.Sheets.Count) 'copie du modèle
With Worksheets(ThisWorkbook.Sheets.Count) 'action menée :
.Name = c.Value 'Nom de l'onglet
.Range("A1") = c.Value
'Copie de la plage C:G de la ligne où est c de la feuille "Base" vers F1:J1 du nouvel onglet
End With
Set c = c.Offset(1, 0) 'prochaine ligne
Loop
Application.ScreenUpdating = True
End Sub
re bonjour Lilly
voici déjà pour mettre les données Cx à Fx de la feuille base dans chaque feuille
mettre en dessous de cette ligne :
'Copie de la plage C:G de la ligne où est c de la feuille "Base" vers F1:J1 du nouvel onglet
cette ligne
wsBase.Range("C" & c.Row & ":G" & c.Row).Copy .Range("F1")
je regarderais plus tard pour le reste
Fred
A force de me prendre la tête...
j'ai "bricolé" quelque chose qui semble fonctionner...
et cette fois-ci j'ai pas toujours le résultat de la ligne 2 qui s'affiche...
Donc toute à la joie d'avoir trouvé... mais au cas où l'on peut améliorer la macro
Attention quand même pour ceux qui souhaite utiliser ... penser à supprimer les pages créées antérieurement avant de lancer la macro...
Je vous souhaite à tous de belles fêtes... avec pleins de bons codes...
Et moi je retourne me plonger dans la création des miens et l'apprentissage vba...
Lilly
Code de la macro :
Dim wsBase As Worksheet 'Feuille Base
Dim wsMod As Worksheet 'Feuille Modèle
Dim c As Range
Dim ws As Worksheet
Dim I As Integer
Application.ScreenUpdating = False
Set wsBase = Worksheets("Base")
Set wsMod = Worksheets("Modèle")
Set c = wsBase.Range("A2") 'Cellule de départ de la colonne de comptage pour créer les autres feuilles
Do Until IsEmpty(c) 'boucle
wsMod.Copy After:=Worksheets(ThisWorkbook.Sheets.Count) 'copie du modèle
With Worksheets(ThisWorkbook.Sheets.Count) 'action menée :
.Name = c.Value 'Nom de l'onglet
.Range("A1") = c.Value
End With
Set c = c.Offset(1, 0) 'prochaine ligne
Loop
For I = 3 To Worksheets.Count
With Worksheets(I)
.Range("F1") = Application.VLookup(Worksheets(I).Range("A1"), wsBase.Range("A1:G12"), 3, 0)
.Range("G1") = Application.VLookup(Worksheets(I).Range("A1"), wsBase.Range("A1:G12"), 4, 0)
.Range("H1") = Application.VLookup(Worksheets(I).Range("A1"), wsBase.Range("A1:G12"), 5, 0)
.Range("I1") = Application.VLookup(Worksheets(I).Range("A1"), wsBase.Range("A1:G12"), 6, 0)
.Range("J1") = Application.VLookup(Worksheets(I).Range("A1"), wsBase.Range("A1:G12"), 7, 0)
End With
Next I
Application.ScreenUpdating = True
End Sub
ravi pour toi que tu ais trouver une solution, mais je pense que la mienne est plus rapide et plus simple..... a tester donc
en pièce jointe ton fichier avec la création que des nouvelles feuilles comme demandé, a tester aussi ...
en ce qui concerne les Arrays ???? => je ne sais pas
a+
fred
J'ai pas trouvé que les smileys rigolos... j'ai aussi cherché de mon côté... et trouver une petite solution à force de me triturer les neurones... nettement moins digeste que la tienne... ça c'est sur...
Alors je copie ta solution... et je vais de suite voir comment elle tourne.... et encore et encore
J'ai mis ce post en résolu vu que le sujet principal est solutionné... et que les copines me pressent un peu pour avoir les résultats finaux... (on devait être sous un parapluie le jour où fée patience à fait sa distribution...
Donc pour les questions annexes ... pour le moment... je vais faire sans... et dès que j'aurai "bien bricolé" et donné un premier jet aux filles, je referais un post... car il me semble que je suis pas la seule à galérer vu le nombre de post lus ces derniers jours...
Mais si tu as une idée...
ici aussi....
Je te souhaite à nouveaux de très belles fêtes.... pleins de cadeaux du
Au plaisir de te retrouver ici...
pour tes questions annexes la première c'est fait (rajout uniquement des nouvelles lignes/feuilles=> c'est fait dans le fichier fournis)
pour la deuxième l'utilisation des arrays je ne sais pas, mais peut-être que quelqu'un d'autre pourra t'aider dans un nouveau post.
Bonnes fêtes
Fred
Décidément nos réponses se croisent...
Encore
Et je vais faire comme les enfants impatients... vite vite essayer ta solution sur le vrai fichier...
Au plaisir de te relire... et aussi probablement vu mon faible niveau de te questionner....
Amitiés...
le fait de bloquer les calculs signifie--il que je peux avoir 25 colonnes concernant des NBSI.ENS sur ma feuille modèle qui seront calculé uniquement avant la fin de la macro ???
Si oui... Là ... ça va super m'arranger... peut-être même au niveau du temps ensuite...
???
Bon c'est peut-être une question bête...
Merci encore
Au plaisir