Boucler un copier coller avec une constante
Résolu/Fermé
A voir également:
- Boucler un copier coller avec une constante
- Copier coller pdf - Guide
- Copier une vidéo youtube - Guide
- Retrouver un copier-coller iphone ✓ - Forum iPhone
- Retrouver un copier-coller android - Guide
- Copier-coller - Accueil - Windows
3 réponses
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
13 août 2015 à 11:36
13 août 2015 à 11:36
Bonjour,
version Excel ?
version Excel ?
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
13 août 2015 à 11:38
13 août 2015 à 11:38
Bonjour,
1- Si tu fais cette opération 346 fois, cela veut dire que tu dois copier-coller les données contenues dans la feuille Feuil1, de A4 à A350.
1-a) Ok?
1-b) tu dois disposer d'Excel en version supérieure ou égale à 2007. Car là, tu as besoin de 328 264 lignes.
2- Si tout bon, voici le code :
1- Si tu fais cette opération 346 fois, cela veut dire que tu dois copier-coller les données contenues dans la feuille Feuil1, de A4 à A350.
1-a) Ok?
1-b) tu dois disposer d'Excel en version supérieure ou égale à 2007. Car là, tu as besoin de 328 264 lignes.
2- Si tout bon, voici le code :
Sub test() Dim Lig As Long Sheets("Feuil1").Select 'au cas ou... For Lig = 3 To 350 With Sheets("Feuil2") .Cells(2 + (Lig - 3) * 946, 1) = Sheets("Feuil1").Cells(Lig, 1) End With Next Lig End Sub
Pas tout à fait, enfaite mon 346 est divisé en 5 groupes de longueur inégale et selon le groupe on doit ajouter 946 lignes par lignes de groupe. Un peu compliqué mais en modifiant un tout petit peu ta formule j'ai réussis à avoir le résultat attendu.
Merci pour ta réactivité !
J'ai Excel 2010, je devrais sans doute rajouter des lignes (je devrais arriver à un total de 700 000). Il y a une limite pour excel ?
Merci pour ta réactivité !
J'ai Excel 2010, je devrais sans doute rajouter des lignes (je devrais arriver à un total de 700 000). Il y a une limite pour excel ?
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
>
Stien
13 août 2015 à 12:19
13 août 2015 à 12:19
Il y a une limite pour excel ?
Oui... et non!
Oui : depuis excel 2007, le nombre de lignes est limité à 1 048 576
Mais non : ICI, Microsoft présente un fichier excel, construit sur 2010 et comportant 101 411 707 lignes.
Salutations à michel. Désolé, je n'ai pas rafraichit avant de poster.
A++
Oui... et non!
Oui : depuis excel 2007, le nombre de lignes est limité à 1 048 576
Mais non : ICI, Microsoft présente un fichier excel, construit sur 2010 et comportant 101 411 707 lignes.
Salutations à michel. Désolé, je n'ai pas rafraichit avant de poster.
A++
Je pensais à une limite dans les formules, par exemple j'ai des lignes qui ressemblent à :
" Range("A" & Range("A65500").End(xlUp).Row + 1).Select"
Le 65500 va me limiter ? ou il va continuer à faire une sélection même si j'ai 500 000 lignes ?
Deuxième petite question, je cherche à inclure un peu de dynamisme dans ma plage de données car elle risque de s'agrandir.
Si je reprends la formule que tu m'as donné (et qui marche pour l'instant super bien sur la plage fixe)
"Sub test()
Dim Lig As Long
Sheets("Feuil1").Select 'au cas ou...
For Lig = 3 To 350
With Sheets("Feuil2")
.Cells(2 + (Lig - 3) * 946, 1) = Sheets("Feuil1").Cells(Lig, 1)
End With
Next Lig
End Sub"
Au niveau de la ligne : For Lig = 3 To 350, serait-il possible d'ajuster la plage en fonction des cellules non vides ?
" Range("A" & Range("A65500").End(xlUp).Row + 1).Select"
Le 65500 va me limiter ? ou il va continuer à faire une sélection même si j'ai 500 000 lignes ?
Deuxième petite question, je cherche à inclure un peu de dynamisme dans ma plage de données car elle risque de s'agrandir.
Si je reprends la formule que tu m'as donné (et qui marche pour l'instant super bien sur la plage fixe)
"Sub test()
Dim Lig As Long
Sheets("Feuil1").Select 'au cas ou...
For Lig = 3 To 350
With Sheets("Feuil2")
.Cells(2 + (Lig - 3) * 946, 1) = Sheets("Feuil1").Cells(Lig, 1)
End With
Next Lig
End Sub"
Au niveau de la ligne : For Lig = 3 To 350, serait-il possible d'ajuster la plage en fonction des cellules non vides ?
De plus j'ai une boucle au dessus :
"Sub boucle_for()
For i = 1 To 140
Range("A" & Range("A65500").End(xlUp).Row + 1).Select
ActiveSheet.Paste
Next
End Sub"
Si je veux vraiment rendre ma formule dynamique il faudrait que mon 140 puissent varier selon un compte de ligne (j'ai une colonne qui contient 140 élèments, demain cette colonne risque de passer à 142 par exemple.)
Tu aurais une solution à me donner ?
Ps : Dans ce cas la il vaut mieux recréer un nouveau post ou je fais ma demande au bon endroit ?
"Sub boucle_for()
For i = 1 To 140
Range("A" & Range("A65500").End(xlUp).Row + 1).Select
ActiveSheet.Paste
Next
End Sub"
Si je veux vraiment rendre ma formule dynamique il faudrait que mon 140 puissent varier selon un compte de ligne (j'ai une colonne qui contient 140 élèments, demain cette colonne risque de passer à 142 par exemple.)
Tu aurais une solution à me donner ?
Ps : Dans ce cas la il vaut mieux recréer un nouveau post ou je fais ma demande au bon endroit ?
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
14 août 2015 à 11:27
14 août 2015 à 11:27
Bonjour,
Donne nous le contenu entier de ton code.
Explique nous ce que tu veux faire de manière précise.
Parce que là, tes bouts de code ne nous disent rien du tout.
Donne nous le contenu entier de ton code.
Explique nous ce que tu veux faire de manière précise.
Parce que là, tes bouts de code ne nous disent rien du tout.
Sub ca_manque_de_dynamisme_VM() Application.Goto "PLAGE1" Selection.Copy Sheets("target VM").Select Range("A2").Select ActiveSheet.Paste Call boucle_for Call numero_compte End Sub Sub boucle_for() For i = 1 To 140 Range("A" & Range("A65500").End(xlUp).Row + 1).Select ActiveSheet.Paste Next End Sub Sub numero_compte() Dim Lig As Long Sheets("Classification des Comptes").Select 'au cas ou... For Lig = 3 To 144 With Sheets("target VM") .Cells(2 + (Lig - 3) * 957, 1) = Sheets("Classification des Comptes").Cells(Lig, 1) End With Next Lig End Sub
Voila mon code en entier.
J'ai réussis à rendre mon premier copier dynamique grâce à une formule "décaler" que j'ai appelé PLAGE1.
Cette Plage contient 956 lignes (avec formules) pour le moment et peut évoluer.
Dans l'onglet classification des comptes j'ai une liste de 140 comptes (qui peut évoluer aussi). Pour chacun de ces 140 comptes, il faut que je lui colle les 956 lignes. Je devrais avoir un total de 133 840 lignes à la fin donc.
Le problème est que le 140 peut évoluer ainsi que le 956. Pour fournir un code durable dans le temps il faudrait que j'inclus cette flexibilité dans ma formule.
Le problème est que ce n'est que ma deuxième macro, pour le coup je ne maitrise pas bien le Visual Basic.
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
>
Stien
14 août 2015 à 12:12
14 août 2015 à 12:12
Essaye juste cette macro :
Pour automatiser le "dynamisme" des 140, il faudrait savoir ou se trouve (feuille + plage de cellules) ta liste des 140 comptes...
Sub essai() Dim Lig As Integer, NbCel As Integer NbCel = Range("PLAGE1").Rows.Count For Lig = 3 To 144 With Sheets("target VM") .Range("A" & 2 + (Lig - 3) * NbCel).Resize(NbCel) = Range("PLAGE1").Value End With Next Lig End Sub
Pour automatiser le "dynamisme" des 140, il faudrait savoir ou se trouve (feuille + plage de cellules) ta liste des 140 comptes...
Hello, de retour au bureau,
Ta macro me donne une erreur "dépassement de capacité" au niveau de ta ligne 7.
Pour le 140, il se trouve dans une feuille appelée "Classification des Comptes", de A3 à A142 pour le moment, mais justement j'aimerai que si ça passe de A3 à A143, la macro prenne en cours ce changement
Ta macro me donne une erreur "dépassement de capacité" au niveau de ta ligne 7.
Pour le 140, il se trouve dans une feuille appelée "Classification des Comptes", de A3 à A142 pour le moment, mais justement j'aimerai que si ça passe de A3 à A143, la macro prenne en cours ce changement
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
>
Stien
17 août 2015 à 11:56
17 août 2015 à 11:56
Bonjour,
Que te donne ce test :
Que te donne ce test :
Sub test() Dim NbCel As Integer NbCel = Range("PLAGE1").Rows.Count MsgBox NbCel End Sub
Stien
>
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
17 août 2015 à 12:49
17 août 2015 à 12:49
Bonjour,
J'ai finalement résolu mon problème, j'ai réussis à gagner en flexibilité en rajoutant une feuille contenant toutes mes données non fixe (sous forme de tableau). A l'aide de simples formules il va toujours rester à jour et ma macro va chercher les informations dedans. Beaucoup plus simple que les arrachages de cheveux.
Merci à toi Pijaku de n'avoir pas désespéré sur mon cas, et d'avoir été aussi disponible.
J'ai finalement résolu mon problème, j'ai réussis à gagner en flexibilité en rajoutant une feuille contenant toutes mes données non fixe (sous forme de tableau). A l'aide de simples formules il va toujours rester à jour et ma macro va chercher les informations dedans. Beaucoup plus simple que les arrachages de cheveux.
Merci à toi Pijaku de n'avoir pas désespéré sur mon cas, et d'avoir été aussi disponible.
13 août 2015 à 12:10