Macro et VBA
Résolu
CHARLYJACK
Messages postés
345
Date d'inscription
Statut
Membre
Dernière intervention
-
CHARLYJACK Messages postés 345 Date d'inscription Statut Membre Dernière intervention -
CHARLYJACK Messages postés 345 Date d'inscription Statut Membre Dernière intervention -
Bonjour à toutes et à tous,
je suis grand débutant en VBA,
et j'ai besoin d'une manipulation pour le boulot.
J'ai une série de numéros de comptes clients dans la colonne A.
Cette liste est de taille variable.
Mon besoin est le suivant:
je dois diviser la liste en pages de 40 comptes.
Je prends 40 comptes dans la colonne A
je copie et je colle dans une nouvelle feuille 1.
je prends les 40 suivants et je les colle dans une feuille 2.
et etc ... jusqu'au dernier compte de la liste.
Pourriez vous m'aider, car les livres VBA pour l'instant
c'est du chinois pour moi.
merci
David
je suis grand débutant en VBA,
et j'ai besoin d'une manipulation pour le boulot.
J'ai une série de numéros de comptes clients dans la colonne A.
Cette liste est de taille variable.
Mon besoin est le suivant:
je dois diviser la liste en pages de 40 comptes.
Je prends 40 comptes dans la colonne A
je copie et je colle dans une nouvelle feuille 1.
je prends les 40 suivants et je les colle dans une feuille 2.
et etc ... jusqu'au dernier compte de la liste.
Pourriez vous m'aider, car les livres VBA pour l'instant
c'est du chinois pour moi.
merci
David
A voir également:
- Macro et VBA
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Jitbit macro recorder - Télécharger - Confidentialité
- Télécharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Macro word - Guide
- Excel compter cellule couleur sans vba - Guide
2 réponses
Bonjour,
Un exemple:
Bien sélectionner la feuille concernée avant de lancer la macro.
Si elle a un nom déterminé remplacer :
Set sh = ActiveSheet
par :
Set sh = Worksheets("nom_de_la_feuille")
De plus je ne contrôle pas si on arrive en fin de feuille, il y aura une erreur si n° dernière ligne remplie+ nlig > 65536 (sur excel 2003)
eric
Un exemple:
Sub eclate() Const nlig As Long = 40 'nombre de lignes à copier Const ncol As Long = 3 ' nombre de colonnes à copier Dim sh As Worksheet, numf As Long, lig As Long Set sh = ActiveSheet Application.ScreenUpdating = False numf = 1: lig = 1 For lig = 1 To sh.[A65536].End(xlUp).Row Worksheets.Add after:=Worksheets(Worksheets.Count) ActiveSheet.Name = "Part " & numf ActiveSheet.Range("A1").Resize(nlig, ncol) = sh.Cells(lig, 1).Resize(nlig, ncol).Value lig = lig + nlig - 1 numf = numf + 1 Next lig sh.Activate Application.ScreenUpdating = True End Sub
Bien sélectionner la feuille concernée avant de lancer la macro.
Si elle a un nom déterminé remplacer :
Set sh = ActiveSheet
par :
Set sh = Worksheets("nom_de_la_feuille")
De plus je ne contrôle pas si on arrive en fin de feuille, il y aura une erreur si n° dernière ligne remplie+ nlig > 65536 (sur excel 2003)
eric
Bonjour,
Bonjour Eric, (+1)
Je ne connaîssais pas cette facon de recopier.
Au regard de ton code, peut-être moyen d'un peu le simplifier ?
PS: Surtout intéressant pour remplacer Copy par valeur. Éviter le PasteSpecial qui nécessite le passage par un select.
L'expérience instruit plus sûrement que le conseil. (André Gide)
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Ça doit se passer sur le forum pour que tous puisse y participer ou en profiter.
Bonjour Eric, (+1)
Je ne connaîssais pas cette facon de recopier.
Au regard de ton code, peut-être moyen d'un peu le simplifier ?
Sub eclate() Const nLig As Long = 40 'nombre de lignes à copier Const nCol As Long = 3 ' nombre de colonnes à copier Dim sh As Worksheet, Lig As Long Set sh = ActiveSheet Application.ScreenUpdating = False For Lig = 1 To sh.[A65536].End(xlUp).Row Step nLig Worksheets.Add after:=Worksheets(Worksheets.Count) ActiveSheet.Name = "Part " & Lig & " - " & Lig + 39 ActiveSheet.Range("A1").Resize(nLig, nCol) = sh.Cells(Lig, 1).Resize(nLig, nCol).Value Next Lig sh.Activate Application.ScreenUpdating = True End SubA+
PS: Surtout intéressant pour remplacer Copy par valeur. Éviter le PasteSpecial qui nécessite le passage par un select.
L'expérience instruit plus sûrement que le conseil. (André Gide)
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Ça doit se passer sur le forum pour que tous puisse y participer ou en profiter.
merci pour cette réponse rapide et efficace !!!
ça va me faire gagner beaucoup de temps
mais promis je continue à bosser mon VBA.
à plus
David
encore merci pour cette programmation
je sais que j'abuse
mais peux tu m'indiquer
comment selectionner la colonne B en plus de la colonne A
dans cette même programmation
merci
David
Tout dépend de comment tu veux les traiter, et ça sera + ou - simple selon ton choix...
- en prendre 20 sur A et 20 sur B ?
ou
- traiter tout A puis tout B ?
- si la dernière feuille générée par A est incomplète faut-il absolument la compléter à 40 (oui/non/ça serait mieux) ?
Est-ce que le nombre de colonnes peut être amené à s'étendre encore ?
eric
à mes interrogations.
En effet, pour des besoins statistiques le nombre de colonnes peut varier:
Numéro client / Montant de dette / Montant retard / Date ...
La dernière feuille générée par A sera incomplète ( et peut rester inachevée) dans la mesure
où le nombre de clients varie en fonction des arrêtés comptables.
Je pense que A, B, C ... peuvent être traîtés simultanément car les infos de chaque
ligne correspondent au même client.
merci d'avance
David
J'ai modifié le code au post 1.
Maintenant le nombre de lignes et de colonnes à copier sont définis par 2 constantes au début.
Tu peux faire évoluer comme tu veux.
eric