Enregistrer un nouveau classeur avec données tableau filtré
Bonjour,
j'ai un tableau sur la feuille 1 (10 000 lignes) la colonne C, contient le nom de 60 communes.
Je souhaiterais enregistrer le nombre de ligne par commune dans un classeur différent. en gros je veux me retrouver avec 60 fichiers excel, soit 1 par commune.
1 - est-ce possible manuellement? je n'arrive pas a enregistrer seulement les données filtrés?
2 - Une macro serait vraiment cool
est-ce possible?
Je ne connais pas le VBA, mais je connais le JS et autre langage web.
merci de votre aide !
Simple:
Devrait marcher
Sub toto
dim i as integer, j as long, k as long
For i = 1 to 60
Set NewBook = Workbooks.Add
With NewBook
.SaveAs Filename:=cstr(thisworkbook.Sheets("Feuille2").cells(i,1))&".xls"
End With
'création nouveau classeur
k = 1
For j = 1 to thisworkbook.Sheets("Feuille1").range("C" & thisworkbook.Sheets("Feuille1").rows.count).end(xlup).row
If thisworkbook.Sheets("Feuille1").cells(j,3) = thisworkbook.Sheets("Feuille2").cells(i,1) then
thisworkbook.Sheets("Feuille1").cells(j,3).entirerow.copy Destination:=NewBook.Sheets(1).Range("A" & k)
k = k+1
end if
next j
NewBook.save
newbook.close
next i
end subBonjour,
et merci de cette réponse rapide.
Alors les classeurs sont bien créés avec le nom de la commune, mais ils sont vide.
J'apporte des précisions :
feuille_1 s'appelle listing
feuille-2 s'appelle liste_commune
nombre de colonne du tableau de A à AB = 28
Nom de la commune colonne B
59 communes
voici donc comment je l'ai adapté :
Sub toto
dim i as integer, j as long, k as long
For i = 1 to 59
Set NewBook = Workbooks.Add
With NewBook
.SaveAs Filename:=cstr(thisworkbook.Sheets("liste_commune").cells(i,1))&".xlsx"
End With
'création nouveau classeur
k = 1
For j = 1 to thisworkbook.Sheets("listing").range("B" & thisworkbook.Sheets("listing").rows.count).end(xlup).row
If thisworkbook.Sheets("listing").cells(j,3) = thisworkbook.Sheets("liste_commune").cells(i,1) then
thisworkbook.Sheets("listing").cells(j,3).entirerow.copy Destination:=NewBook.Sheets(1).Range("A" & k)
k = k+1
end if
next j
NewBook.save
newbook.close
next i
end subsi je comprend bien, la variable J détermine le nombre de ligne et le k le nombre de colonne?
Merci de ton aide!
EDIT : Je viens de m'apercevoir, que j'ai changé le nom de la colonne mais pas le numéro dans la condition (j,3) en fait c'est (j,2) car colonne B.
Cela fonctionne parfaitement
un grand merci
Tu avais dit que tes communes étaient en C
Sub toto
dim i as integer, j as long, k as long
For i = 1 to 59
Set NewBook = Workbooks.Add
With NewBook
.SaveAs Filename:=cstr(thisworkbook.Sheets("liste_commune").cells(i,1))&".xlsx"
End With
'création nouveau classeur
k = 1
For j = 1 to thisworkbook.Sheets("listing").range("B" & thisworkbook.Sheets("listing").rows.count).end(xlup).row
If thisworkbook.Sheets("listing").cells(j,2) = thisworkbook.Sheets("liste_commune").cells(i,1) then
thisworkbook.Sheets("listing").cells(j,1).entirerow.copy Destination:=NewBook.Sheets(1).Range("A" & k)
k = k+1
end if
next j
NewBook.save
newbook.close
next i
end subon a poster en même temps, je m'en suis aperçu! un poil trop tard on dirait!!
autre question, maintenant dans ce classeur par commune que je viens de créer, je souhaite faire la même chose extraire dans un nouveau classeur, toutes les lignes qui sont en jaune est-ce possible?
Un grand merci, tu viens de me faire gagner un temps précieux!
Sub toto
dim i as integer, j as long, k as long, l as long, m as long
For i = 1 to 59
Set NewBook = Workbooks.Add
With NewBook
.SaveAs Filename:=cstr(thisworkbook.Sheets("liste_commune").cells(i,1))&".xlsx"
End With
'création nouveau classeur
k = 1
For j = 1 to thisworkbook.Sheets("listing").range("B" & thisworkbook.Sheets("listing").rows.count).end(xlup).row
If thisworkbook.Sheets("listing").cells(j,2) = thisworkbook.Sheets("liste_commune").cells(i,1) then
thisworkbook.Sheets("listing").cells(j,1).entirerow.copy Destination:=NewBook.Sheets(1).Range("A" & k)
k = k+1
end if
next j
NewBook.save
Set NewBook2 = Workbooks.Add
With NewBook2
.SaveAs Filename:=cstr(thisworkbook.Sheets("liste_commune").cells(i,1))& "lignesjaunes.xlsx"
End With
m=2
For l = 1 to Newbook.sheets(1).range("A" & Newbook.sheets(1).rows.count).end(xlup).row
if Newbook.sheets(1).range("A" & l).interior.color = RGB(100,100,100) then
Newbook.sheets(1).range("A" & l).entirerow.copy destination:=NewBook2.Sheets(1).Range("A" & m)
m=m+1
end if
next l
newbook2.save
newbook2.close
newbook.close
next i
end subModifie le RGB vers la couleur de ton choix
Pour info:
Le jaune classique excel 2010 vaut RGB(255,255,0)
Ok!
merci à toi
tout fonctionne à merveille!
sujet résolu!
Bonjour,
je remonte le sujet car j'ai oublié une petite chose dans cette macro, je voudrais que le nouveau classeur généré comporte mes entetes de colonne, soit la premiere ligne.
a partir de cette macro :
Sub toto
dim i as integer, j as long, k as long
For i = 1 to 60
Set NewBook = Workbooks.Add
With NewBook
.SaveAs Filename:=cstr(thisworkbook.Sheets("Feuille2").cells(i,1))&".xls"
End With
'création nouveau classeur
k = 1
For j = 1 to thisworkbook.Sheets("Feuille1").range("C" & thisworkbook.Sheets("Feuille1").rows.count).end(xlup).row
If thisworkbook.Sheets("Feuille1").cells(j,3) = thisworkbook.Sheets("Feuille2").cells(i,1) then
thisworkbook.Sheets("Feuille1").cells(j,3).entirerow.copy Destination:=NewBook.Sheets(1).Range("A" & k)
k = k+1
end if
next j
NewBook.save
newbook.close
next i
end subj'ai essayé d'arranger le code notamment en rajoutant cette ligne :
thisworkbook.Sheets("Feuille1").cells(1,1).entirerow.copy Destination:=NewBook.Sheets(1).Range(A,1)mais je n'y arrive pas,
si quelqu'un pourrais m'aider.
Merci
Si mes souvenirs sont bons...
Sub toto
dim i as integer, j as long, k as long
For i = 1 to 60
Set NewBook = Workbooks.Add
With NewBook
.SaveAs Filename:=cstr(thisworkbook.Sheets("Feuille2").cells(i,1))&".xls"
End With
'création nouveau classeur
thisworkbook.Sheets("Feuille1").cells(1,1).entirerow.copy Destination:=NewBook.Sheets(1).Range("A" & 1)
k = 2
For j = 2 to thisworkbook.Sheets("Feuille1").range("C" & thisworkbook.Sheets("Feuille1").rows.count).end(xlup).row
If thisworkbook.Sheets("Feuille1").cells(j,3) = thisworkbook.Sheets("Feuille2").cells(i,1) then
thisworkbook.Sheets("Feuille1").cells(j,3).entirerow.copy Destination:=NewBook.Sheets(1).Range("A" & k)
k = k+1
end if
next j
NewBook.save
newbook.close
next i
end submerci de cette réponse rapide,
déjà voici ma macro que j'ai adapté à une nouvelle demande mais le principe est bien le même
Sub toto()
Dim i As Integer, j As Long, k As Long
For i = 1 To 36
Set newbook = Workbooks.Add
With newbook
.SaveAs Filename:=CStr(ThisWorkbook.Sheets("liste_armoire").Cells(i, 1)) & ".xlsx"
End With
'création nouveau classeur
ThisWorkbook.Sheets("foyer").Cells(1, 1).EntireRow.Copy Destination:=newbook.Sheets(1).Range("A" & 1)
'copie en-tete colonne
k = 2
For j = 2 To ThisWorkbook.Sheets("foyer").Range("C" & ThisWorkbook.Sheets("foyer").Rows.Count).End(xlUp).Row
If ThisWorkbook.Sheets("foyer").Cells(j, 3) = ThisWorkbook.Sheets("liste_armoire").Cells(i, 1) Then
ThisWorkbook.Sheets("liste_armoire").Cells(j, 3).EntireRow.Copy Destination:=newbook.Sheets(1).Range("A" & k)
k = k + 1
End If
Next j
newbook.Save
newbook.Close
Next i
End SubCette macro ne fonctionne pas :
J'ai bien l'ensemble de mes nouveaux classeurs avec le bon nom de créés
J'ai bien la première ligne contenant mes entetes dans chaque classeurs
Mais je n'ai pas le contenu.
Par contre quand je lance la macro, elle s'exécute parfaitement sans message d'erreur, je vois bien que le contenu est récupéré et collé dans un nouveau classeur mais ce nouveau classeur ne porte pas le nom de la cellule comme celui précédemment crée. Les valeurs copiées sont déplacé dans un classeur au nom générique du style classeur0120 (je voie cette info défiler en haut rapidement)
impossible de retrouver se classeur par la suite
une idée?
EDIT : vraiment désolé je me suis trompé de nom de feuille :
ThisWorkbook.Sheets("liste_armoire").Cells(j, 3).EntireRow.Copy Destination:=newbook.Sheets(1).Range("A" & k)j'ai mis le nom de la deuxieme au lieu de la premiere!
tout fonctionne merci bien!!
par contre peut faire le copier/coller des en-tetes dans le nouveau classeur avec le respect des largeurs de colonne?
Merci beaucoup!!
Vérifié la macro que je t'ai donné marche. Adapte la bien avant de dire que cela ne marche pas. L'erreur vient souvent de celui qui pense être un expert alors qu'il n'assimile même pas les bases.
Oui oui,
j'ai édité mon poste, cela fonctionne!
est-il possible de faire ce systeme de copier/coller en respectant la largeur des colonnes du document initial?
et j'ai compris le principe mais j'ai besoin de la syntaxe pour ajouter un champ en tete de page, comment faire?
merci
cherche dans les propriétés de cells ou de range. Tu dois avoir un width il suffira d'affecter à la nouvelle colonne le width de l'ancienne.