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
- Télécharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Jitbit macro recorder - Télécharger - Confidentialité
- Excel compter cellule couleur sans vba - Guide
- Arreter une macro vba ✓ - Forum VB / VBA
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