Nouvelle feuille Excel

Nouvelle feuille Excel - VB/VBA/VBS - Programmation

Marsh Posté le 05-07-2010 à 09:52:13    

Salut,  
 
j'ai besoin de faire une macro qui va créer de nouvelles feuilles portant chacune un nom de projet différent rentré au préalable dans un feuille Excel : "Sheets.Add.Name = wks1.Cells(i, 1)" jusque la tout va bien.
Il me faudrai ensuite pouvoir faire des opérations à l'intérieur de ces feuilles, et là je bloque... Comment appeler la ou les nouvelles feuilles créées ? wksi me semble impossible donc je vois pas trop.
 
PS : j'y connaîs pas grand chose en programmation mais c'est pour mon boulot
 
Merci d'avance.

Reply

Marsh Posté le 05-07-2010 à 09:52:13   

Reply

Marsh Posté le 05-07-2010 à 10:18:53    

Hello
 
Sois plus précis...
Tu créés des feuilles dont le nom est stocké dans une feuille, pourquoi ne pas repartir a partir de cette meme feuille ?
Ou tu veux faire des operations juste apres la creation ?


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 05-07-2010 à 10:46:36    

J'ai une feuille Excel qui retrace toutes les opérations comptables de l'entreprise (environ 2500 lignes). Ces valeurs comptables sont assimilées à différents projets. Je dois donc répartir automatiquement ces valeurs classées par projets et par catégorie (une dizaine de catégorie par projet). J'ai réussi à faire une macro ou il fallait juste changer le nom du projet mais je devais alors créer manuellement une nouvelle feuille par projet avec les différentes catégories :  
 
Sub Bouton9_Clic()
Set wks1 = Worksheets("journal" ) 'journal reprend la totalité des opérations comptables
Set wks2 = Worksheets("cuentas" ) 'cuentas reprend les différentes catégories de chaque projet
'Set wks3 = Worksheets("projets" )
Set wks4 = Worksheets("TATA" ) 'TATA est un nom de projet
'With wks
'.Select
'.Cells.Select
 
a = 9 ' le tableau débute à la ligne 9
 
For i = 1 To 2385 ' nombre de lignes comptable
 
For k = 1 To 13 'catégories par projet
 
If wks1.Cells(i, 13) = "TATA" Then ' ligne comptable de tel ou tel projet
If wks1.Cells(i, 4) >= 600000 Then ' charges de l'entreprise classe 6
If wks1.Cells(i, 4) < 700000 Then ' charges de l'entreprise classe 6
If wks1.Cells(i, 16) = wks2.Cells(k, 9) Then 'catégorie de la charge
 
wks4.Cells(a, k) = wks1.Cells(i, 11) ' rangement dans un tableau
a = a + 1
 
End If
End If
End If
End If
 
Next k
Next i
 
End Sub
 

Reply

Marsh Posté le 05-07-2010 à 10:49:12    

On peut avoir un exemple de cette feuille ? (En mettant des exemples bidons biensur... Confidentialité toussa...)
En fonction de la tronche de la feuille, si ca se trouve un rapport de tableau croisé dynamique peut suffire...!


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 05-07-2010 à 11:02:45    

http://hfr-rehost.net/self/pic/c549682a84bc4b5bce289f75dc055916de7f0c9d.gif


Message édité par pouchelop le 05-07-2010 à 11:09:54
Reply

Marsh Posté le 05-07-2010 à 11:08:19    

je dois ainsi créer une nouvelle feuille par projet (colonne M). Et dans chaque nouvelle feuille classer les dépenses (valeur de la colonne K si compte supérieur à 600000 de la colonne D) par type de frais (colonne P) !!!

Reply

Marsh Posté le 05-07-2010 à 11:09:18    

Et en fait tu veux quoi ?
Un regroupement de toutes les transaction sur la classe 6 sur une feuille ?
Ou regroupé par fournisseur ? (D'ailleurs pourquoi utiliser un compte générique 401...? Ah non autant pour moi, j'avais pas vu la référence du compte auxiliaire.)


Message édité par SuppotDeSaTante le 05-07-2010 à 11:09:45

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 05-07-2010 à 11:13:23    

Ok alors imaginons pour les lignes 17 à 18 et 19 à 21. Une a de la tva, l'autre pas.
A quoi ressemble la feuille qui recupere les infos por otros gastos et contabilidad ?


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 05-07-2010 à 11:19:32    

juste 2 colonnes avec numéro de compte et à quoi ça correspond. Une macro compare les comptes et marque dans la colonne P à quoi cela correspond

Reply

Marsh Posté le 05-07-2010 à 11:24:52    

Genre pour otros gastos :
606300 champion
625700 palais st lazarre
Etc.
 
??


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 05-07-2010 à 11:24:52   

Reply

Marsh Posté le 05-07-2010 à 11:28:22    

Non une colonne n° de compte, une autre type de frais :
 
601920 Fungibles / expendable
611000 Subcontratas / subcontracts
613200 Alquilar / Rent
613210 Alquilar / Rent
613500 Alquilar / Rent
613520 Viajes / Trip

Reply

Marsh Posté le 05-07-2010 à 12:31:47    

Et elles sortent d'où les infos de la seconde colonne ?


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 05-07-2010 à 13:39:46    

Elles sont rentrées à la main. Et sortent d'une grille imposée par la direction.
Donc ce que je désire faire c'est classer toutes les charges (compte >=600000 et <700000) par catégorie (otros gastos, viajes, alquilar...) dans chaque feuille projet correspondante.
 
C'est faisable ???

Reply

Marsh Posté le 05-07-2010 à 14:05:40    

Désolé je ne pige pas...
 
Avec le tableau que tu montres, nul part il y a les infos type "Alquilar / Rent ".
Comment la macro peut savoir que le compte 613200 c'est "Alquilar / Rent " ??
Où sont ces infos ? Dans un autre fichier ? Dans une autre feuille ?
 
Dans ta macro tu fais :
wks4.Cells(a, k) = wks1.Cells(i, 11) ' rangement dans un tableau  
Or, la colonne 11 c'est le débit... Chose qui ne ressort pas dans ton exemple :

Citation :

601920 Fungibles / expendable  
611000 Subcontratas / subcontracts  
613200 Alquilar / Rent  
613210 Alquilar / Rent  
613500 Alquilar / Rent


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 05-07-2010 à 14:23:36    

Sur une autre feuille j'ai la correspondance entre le numéro de compte (613210 par exemple) et sa définition (Alquilar/Rent en l'occurence). Une macro marque en face de chaque ligne comptable la correspondance dans la colonne P :
 
 
Sub Bouton1_Clic()
Set wks1 = Worksheets("journal" )
Set wks3 = Worksheets("cuentas" )
'With wks
'.Select
'.Cells.Select
For i = 1 To 1699
For j = 1 To 75
If wks1.Cells(i + 1, 4) = wks3.Cells(j + 1, 1) Then
wks1.Cells(i + 1, 16) = wks3.Cells(j + 1, 2)
j = 75
End If
Next j
Next i
'End With
 
Ce que je souhaite faire dans ma nouvelle macro c'est classer par projet les dépenses, c'est pourquoi je prend la colonne 11.
 
Mon problème c'est comment ranger ces "débits" dans une feuille que je vien de créer dans la macro, grâce à "Sheets.Add.Name = wks3.Cells(i, 1)" , tu comprends ce que je recherche à faire ?

Reply

Marsh Posté le 05-07-2010 à 14:31:27    

Donc tu veux :
 
Je prends ton image pour exemple :
 
- Une feuille Otros gastos/Others expenses
  - Dedans :

606300 |   9.02
625700 |  26.07
625700 | 222.40
626100 |  80.74


 
Si oui, le 625700 doit il etre sommé ?
:

606300 |   9.02
625700 | 248.47
626100 |  80.74


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 05-07-2010 à 14:41:35    

non, juste un descriptif des opérations qui ont eu lieu...classées par catégorie de dépense

Reply

Marsh Posté le 05-07-2010 à 14:44:34    

Quelque chose comme ça :
 
http://hfr-rehost.net/self/pic/61521b3a36404deb992c9b1e88eca61499c4d509.gif
 
Sauf qu'ici c'est moi qui ai fait chaque tableau, en ouvrant une nouvelle feuille et en l'appelant avec le nom du projet et il faudrai plutôt que tout se fasse automatiquement


Message édité par pouchelop le 05-07-2010 à 14:46:56
Reply

Marsh Posté le 05-07-2010 à 14:55:00    

Non fanchement la je ne pige rien...
 
Explique point par point ce que tu veux car la ca part en sucette.
Un coup tu me dis que tu veux ca :

pouchelop a écrit :

601920 Fungibles / expendable
611000 Subcontratas / subcontracts
613200 Alquilar / Rent
613210 Alquilar / Rent
613500 Alquilar / Rent
613520 Viajes / Trip

Derriere tu me montres un tableau recapitulatif ou chaque occurence de la colonne P sont mises en colonne... Alors que tu parles d'une feuille par projet.
 
Non vraiment il n'y a rien de clair. Et c'est tout sauf constructif.
 
Pose ce que tu souhaites, clairement, étapes par étapes.
 
Si vraiment je dois repondre connement, sans m'interresser aux details, a cette question :

pouchelop a écrit :

Donc ce que je désire faire c'est classer toutes les charges (compte >=600000 et <700000) par catégorie (otros gastos, viajes, alquilar...) dans chaque feuille projet correspondante.
 
C'est faisable ???


Je te dirais oui, il suffit de mettre ton code dans la boucle qui passe chaque occurence de ta colonne P
 
Mais je ne pense pas que ca t'aide vraiment. Or pour te filer un coup de main, si je n'ai pas les tenants et les aboutissants mes réponses seront aussi vagues que tes questions.


Message édité par SuppotDeSaTante le 05-07-2010 à 14:56:44

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 05-07-2010 à 15:14:14    

Ce que je veux c'est mon dernier screen. Avoir tous les débits classés par "catégorie" (Alquilar, viajes...) pour chaque "projet" (ici le projet TOTO). (Alquilar, viajes, fungibles... ne sont pas des projets mais des catégories de dépense, je me suis peut-être mal exprimé).
J'y suis arrivé par le tout premier code que je t'ai montré et cela a donné mon dernier screen. Le problème c'est que je devais pour chaque projet :
1. Ouvrir une nouvelle feuille et la renommer par le nom du projet.
2. Faire le tableau ci-dessus
3. Modifier le code en changeant le nom du projet à chaque fois

Reply

Marsh Posté le 05-07-2010 à 15:17:02    

Pour faire plus simple je souhaite faire :  
 
Sheets.Add.Name = wks1.Cells(i, 1), je crée ainsi une feuille par projet.
 
Mais ensuite comment je peux faire des opérations dans ces nouvelles feuilles ?

Reply

Marsh Posté le 05-07-2010 à 15:25:36    

Entre temps j'ai fait une macro qui fait ce que je disais, a savoir créér un onglet pour chaque occurence de ce qu'il y a dans la colonne P et y mettre tous les débits.
 

Code :
  1. Function FeuilleExiste(wk As Workbook, stFeuille) As Boolean
  2. On Error Resume Next
  3. FeuilleExiste = Not (wk.Sheets(stFeuille) Is Nothing)
  4. End Function
  5. Sub pouchelop()
  6. 'nom de ta feuille de départ. Celle qui ne sera pas supprimée
  7.     FeuillDef = "Feuil1"
  8.     Sheets(FeuillDef).Select
  9. 'On supprime toutes les feuilles sauf FeuillDef
  10.    
  11.     Application.DisplayAlerts = False
  12.     On Error Resume Next
  13.     For i = 1 To Worksheets.Count
  14.         If Sheets(i).Name <> FeuillDef Then
  15.             Worksheets(i).Delete
  16.         End If
  17.     Next i
  18.    
  19.     Application.DisplayAlerts = True
  20.     DerniereLigne = Rows(Range("A1" ).CurrentRegion.Rows.Count).Row
  21.     For x = 1 To DerniereLigne
  22.     'on stocke le nom de la feuille qui est en colonne P
  23.         ValeurFeuille = Sheets(FeuillDef).Cells(x, 16)
  24.    
  25.     'S'il y a qqchose dans la cellule
  26.         If Sheets(FeuillDef).Cells(x, 16) <> "" Then
  27.        
  28.         'Pointeur pour savoir si on a créé une nvelle feuille
  29.             NvFeuil = 0
  30.        
  31.         'On stock la valeur du débit
  32.             ValeurDeb = Sheets(FeuillDef).Cells(x, 11)
  33.        
  34.         'on  crée l'onglet s'il n'existe pas
  35.             If FeuilleExiste(ThisWorkbook, ValeurFeuille) = False Then
  36.                 Sheets.Add.Name = ValeurFeuille
  37.                 NvFeuil = 1
  38.             End If
  39.             Sheets(ValeurFeuille).Select
  40.             If NvFeuil = 1 Then
  41.                 DerLigneNvFeuil = 1
  42.             Else
  43.                 DerLigneNvFeuil = Rows(Range("A1" ).CurrentRegion.Rows.Count).Row + 1
  44.             End If
  45.             Cells(DerLigneNvFeuil, 1).Value = ValeurDeb
  46.                
  47.         End If
  48.    
  49.    
  50.     Next x
  51. End Sub


 
Tu devrais pouvoir trouver ce que tu cherches, moi je ne comprends toujours pas. Il doit faire trop chaud surement...
 
 
EDIT : OK ! Mais tes projets sont en colonne M, et tu n'en avais pour le moment jamais parlé................................!!!  :fou:  
Pis tu me montres un projet TOTO, or dans ton tableau, il y a REMORA, F09-VARI Etc.  
Bon je zieute ca...
 
En fait tu veux un onglet pour chaque projet, et pour chaque projet un découpage en colonne de chaque occurence de la colonne P ? Histoire qu'on soit ok cette fois  [:cyborg21]


Message édité par SuppotDeSaTante le 05-07-2010 à 15:35:34

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 05-07-2010 à 15:34:02    

Oui c'est ça !!! Un onglet par projet de la colonne M désolé...

Reply

Marsh Posté le 05-07-2010 à 15:37:36    

Ok je zieute ca ;)
 
Ma macro precedente n'en est finalement pas tres loin ;)


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 06-07-2010 à 09:18:12    

Question, le tableau du projet TOTO contient toutes les references de la colonne P ? Tu as 13 "categories" ?


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 06-07-2010 à 09:27:06    

Oui, 13 catégories.

Reply

Marsh Posté le 06-07-2010 à 10:01:27    

Je t'ai envoyé un Message Privé


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 06-07-2010 à 16:08:31    

Je prefere bosser sur la colonne M, car je n'ai aucune correspondance entre ce qu'il y a dans la Feuil1 et ce qu'il y a dans la Feuil2...
 
A moins que tu l'aies ?
 
Edit : Meme, avec ton fichier exemple j'ai pas assez d'infos... Si je créé un onglet pour chaque occurence de la colonne M, je n'ai pas assez d'info pour remplir le tableau...
Ex : F09-E c'est toujours otros gastos ??


Message édité par SuppotDeSaTante le 06-07-2010 à 16:11:47

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 06-07-2010 à 16:31:51    

Heu non pas toujours je crois... Enfin vaut mieux faire comme si c'était différent

Reply

Marsh Posté le 06-07-2010 à 22:22:50    

Donc il faut créer un onglet F09-E et mettre les montants de débits dans chacune des colonnes : otros gastos etc. ?


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 07-07-2010 à 09:32:28    

Pour chaque projet de la colonne M, il aut créer un nouvel onglet. Et dans chaque nouvel onglet classer les débits des comptes 6 par type de frais de la colonne P

Reply

Marsh Posté le 08-07-2010 à 17:06:01    

Pour ceux que ca interresse, le code :
 

Code :
  1. Citation :
  2. Function FeuilleExiste(wk As Workbook, stFeuille) As Boolean
  3. On Error Resume Next
  4. FeuilleExiste = Not (wk.Sheets(stFeuille) Is Nothing)
  5. End Function
  6. Sub pouchelop()
  7.    
  8. Application.ScreenUpdating = False
  9.    
  10. '********************************************************************************************
  11. 'Parametres
  12. 'On definit ou est la colonne "projet" de la feuil2
  13.     ColonneProjet = 13 '13 = M
  14. 'On definit ou est la colonne "categories" de la feuil2
  15.     ColonneCat = 16 '16 = P
  16. 'On definit ou est la colonne "debits" de la feuil2
  17.     ColonneDebit = 11
  18. 'On definit ou est la colonne "compte" de la feuil2
  19.     ColonneCpte = 4
  20.    
  21.    
  22. 'Nom de la feuille que moi j'ai appelé "Donnees" qui permet de retrouver dans quelle colonne va une categorie
  23.     FeuilleDonnees = "Donnees"
  24. 'Nom de la feuille qu'on va dupliquer qui contient les categories en colonne. Elle meme se créé en fonction de la feuille données
  25.     FeuilleDeBase = "FeuilleBase"
  26. 'Nom de la feuille des comptes qui contient les enregistrements a parcourir, moi elle s'appelle "Feuil2"
  27.     FeuilleCpte = "Feuil2"
  28. 'colonne où est specifiee la colonne dans la feuille Données, ici c'est D donc on met 4
  29.     ColCol = 4
  30. 'colonne où sont specifiees les activitées dans la feuille Données, ici c'est B donc on met 2
  31.     ColonneType = 2
  32. 'On definit quel compte regarder. si par exemple tu veux tout ceux de la classe 4 tu mets 400000
  33.     CpteDef = 600000
  34. 'On défini la marge, ici 100000 pour avoir 700000 (600000+100000) donc si tu veux les comptes de la classe 7, tu mettrais _
  35. CpteDef à 700000 et CpteDefPlus a 100000
  36.     CpteDefPlus = 100000
  37.    
  38. '********************************************************************************************
  39. 'Mise en forme de la feuille FeuilleBase
  40. 'On recopier tes lignes bleues, on les met en colonne
  41.    
  42.     Sheets(FeuilleDonnees).Select
  43.     Range("B1048576" ).Select
  44.     Selection.End(xlUp).Select
  45.     DerniereLigneBase = ActiveCell.Row
  46.     For x = 2 To DerniereLigneBase
  47.         Sheets(FeuilleDeBase).Cells(1, Cells(x, ColCol)).Value = Sheets(FeuilleDonnees).Cells(x, ColonneType)
  48.         Sheets(FeuilleDeBase).Cells(1, Cells(x, ColCol)).Interior.ColorIndex = Sheets(FeuilleDonnees).Cells(x, ColonneType).Interior.ColorIndex
  49.    
  50.     Next x
  51.     Sheets(FeuilleDeBase).Select
  52.     Cells.Select
  53.     Cells.EntireColumn.AutoFit
  54.     Range("A1" ).Select
  55. '********************************************************************************************
  56. 'Traitement
  57.    
  58. 'On supprime toutes les feuilles sauf la FeuilleDeBase, la feuille Donnees et la feuilles des comptes
  59.     Application.DisplayAlerts = False
  60.     On Error Resume Next
  61.     Sheets(1).Select
  62.     For x = 1 To Worksheets.Count
  63.         If ActiveSheet.Name = FeuilleCpte Or ActiveSheet.Name = FeuilleDonnees Or ActiveSheet.Name = FeuilleDeBase Then
  64.             ActiveSheet.Next.Select
  65.         Else
  66.             ActiveWindow.SelectedSheets.Delete
  67.         End If
  68.     Next x
  69.    
  70.     Application.DisplayAlerts = True
  71.    
  72.    
  73. 'On recupere la derniere ligne de la feuille
  74.     Sheets(FeuilleCpte).Select
  75.    
  76.     Cells(1048576, ColonneProjet).Select
  77.     Selection.End(xlUp).Select
  78.     DerniereLigne = ActiveCell.Row
  79.    
  80. 'Pour chaque occurence de la colonne M
  81.     For x = 2 To DerniereLigne
  82.     'on stocke le nom de la feuille qui est en colonne M
  83.         ValeurFeuille = Sheets(FeuilleCpte).Cells(x, ColonneProjet)
  84.    
  85.     'S'il y a qqchose dans la cellule
  86.         If Sheets(FeuilleCpte).Cells(x, ColonneProjet) <> "" Then
  87.        
  88.         'Pointeur pour savoir si on a créé une nvelle feuille
  89.             NvFeuil = 0
  90.        
  91.         'On stock la valeur du débit
  92.             ValeurDeb = Sheets(FeuilleCpte).Cells(x, ColonneDebit)
  93.        
  94.         'On stock la valeur de la categorie
  95.             ValeurCat = Sheets(FeuilleCpte).Cells(x, ColonneCat)
  96.        
  97.         'On regarde le numéro de compte
  98.             ValeurCpte = Sheets(FeuilleCpte).Cells(x, ColonneCpte)
  99.            
  100.             'Si on a qqchose dans Categorie et si le compte superieur a 600000 et inferieur a 700000
  101.             If ValeurCat <> "" And (ValeurCpte >= CpteDef And ValeurCpte < (CpteDef + CpteDefPlus)) Then
  102.        
  103.             'On recherche en fonction de la categorie dans quelle colonne le ranger.
  104.                 ColRange = Application.WorksheetFunction.VLookup(ValeurCat, Worksheets(FeuilleDonnees).Range("B1:D" & DerniereLigneBase), 3, False)
  105.                
  106.             'on  crée l'onglet a base de FeuilleBase s'il n'existe pas
  107.                 If FeuilleExiste(ThisWorkbook, ValeurFeuille) = False Then
  108.                     Sheets(FeuilleDeBase).Select
  109.                     Sheets(FeuilleDeBase).Copy After:=Sheets(3)
  110.                     ActiveSheet.Name = ValeurFeuille
  111.                     NvFeuil = 1
  112.                 End If
  113.                 Sheets(ValeurFeuille).Select
  114.                 ColNvFeuil = IIf(ColRange > 26, Chr(64 + ColRange \ 26) & Chr(64 + ColRange Mod 26), Chr(64 + ColRange))
  115.                 If NvFeuil = 1 Then
  116.                     DerLigneNvFeuil = 2
  117.                 Else
  118.                     Range(ColNvFeuil & "1048576" ).Select
  119.                     Selection.End(xlUp).Select
  120.                     If ActiveCell.Row = 1 Then
  121.                         DerLigneNvFeuil = 2
  122.                     Else
  123.                         DerLigneNvFeuil = ActiveCell.Row
  124.                     End If
  125.                 End If
  126.            
  127.            
  128.                 Cells(DerLigneNvFeuil, ColRange).Value = ValeurDeb
  129.                Cells(DerLigneNvFeuil, ColRange).Font.ColorIndex = xlAutomatic
  130.                 Cells(DerLigneNvFeuil + 1, ColRange).Value = Application.WorksheetFunction.Sum(Worksheets(ValeurFeuille).Range(ColNvFeuil & "2:" & ColNvFeuil & DerLigneNvFeuil))
  131.                 Cells(DerLigneNvFeuil + 1, ColRange).Font.ColorIndex = 3
  132.             End If
  133.         End If
  134.    
  135.    
  136.     Next x
  137.    
  138.     Sheets(FeuilleCpte).Select
  139.     Range("A1" ).Select
  140. Application.ScreenUpdating = True
  141. MsgBox "Finiiiish"
  142.    
  143. End Sub


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed