Creer plusieurs feuille à partir d'une colonne

Résolu
Signaler
Messages postés
38
Date d'inscription
mercredi 31 octobre 2007
Statut
Membre
Dernière intervention
7 février 2014
-
Messages postés
38
Date d'inscription
mercredi 31 octobre 2007
Statut
Membre
Dernière intervention
7 février 2014
-
Bonjour,


Je cherche depuis ce matin mais en vain la solution pour créer autant de feuille que d'élèment dans une colonne dans Excel.


Je m'explique:


Dans ma colonne A sur la feuille principale, j'ai divers noms
d'entreprise et je souhaiterais faire une macro pour créer une feuille
pour chaque entreprise.

Or je connais que cette commande:


Set NewSheet = Worksheets.Add(after:=Worksheets(Worksheets.Count))

NewSheet.Name = "A1"


Si quelqu'un aurait le temps d'aider une débutant en vb, je vous en serais reconnaissant


merci d'avance

9 réponses

Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
11
...

Comme ceci :

Dim NewSheet As Worksheet
   Dim SName As String
   Dim Boucle As Integer
   Dim DerniereValeur As Long
   On Local Error Resume Next 'si erreur a la prochaine ligne, l'execution du code continu et ne renvoi que le message specifié dans le if
   DerniereValeur = Worksheets("Feuil1").Range("A:A").Find("*", [A1], , , xlByRows, xlPrevious).Row
   If Err <> 0 Then'si erreur different de 0 c'est que la fonction find n'a rien trouvé
       Msgbox "aucun nom trouvé !", VbExclamation
       Err.Clear
       End
   End If
   For Boucle = 1 To DerniereValeur
       SName = Worksheets( "Feuil1" ).Range("A" & Boucle).Text
       If SName <> vbNullString Then
           Set NewSheet = Worksheets.Add(After:=Worksheets(Worksheets.Count))
           NewSheet.Name = SName
       End If
   Next
   Set NewSheet = Nothing

essai dit moi ce qu'il ce passe

A+
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
Salut,
Il te faut faire une boucle

Du style

Dim NewSheet As Worksheet
   Dim SName As String
   Dim Boucle As Integer
   
   For Boucle = 1 To 15
       SName = Worksheets("Feuil2").Range("A" & Boucle).Text
       If SName <> vbNullString Then
           Set NewSheet = Worksheets.Add(After:=Worksheets(Worksheets.Count))
           NewSheet.Name = SName
       End If
   Next
   Set NewSheet = Nothing , ----
[code.aspx?ID=41455 By Renfield]

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
11
Salut,

ouai... mais c'est pas du VB !... c'est du ?... c'est du V... Du VBAAAA ! Bravo !... je vois que tu apprends vite.  Donc le bon theme c'est par la :
[infomsg.aspx Thèmes] / [infomsgf_VISUAL-BASIC_1.aspx Visual Basic 6] / [infomsgt_LANGAGES-DERIVES_287.aspx Langages dérivés] / [infomsgt_VBA_244.aspx VBA]

une piste : il vas te falloir boucler sur ta colonne et utiliser ce que tu connais deja a chaque passage dans la boucle.

Bon mais je ne suis pas inquiet, tu apprends vite

A+
Messages postés
38
Date d'inscription
mercredi 31 octobre 2007
Statut
Membre
Dernière intervention
7 février 2014

merci ^^
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
11
...

Salut jrivet, dit, les gents ils te contacte par mp avant de poster leurs question ? par ce que une telle rapidité c'est limite surhumain

j'ai une question  sur ta boucle pourquoi 15 ? car je ne vois rien dans l'ennoncé du probleme de madjb permet de limiter la boucle a 15 boucles.

j'ajouterais bien un truc comme ca avant :

Dim NewSheet As Worksheet
   Dim SName As String
   Dim Boucle As Integer
   Dim DerniereValeur As Long
   DerniereValeur = Worksheets( "Feuil2" ).Range("A:A").Find("*", [A1], , , xlByRows, xlPrevious).Row
   For Boucle = 1 To DerniereValeur
       SName = Worksheets( "Feuil2" ).Range("A" & Boucle).Text
       If SName <> vbNullString Then
           Set NewSheet = Worksheets.Add(After:=Worksheets(Worksheets.Count))
           NewSheet.Name = SName
       End If
   Next
   Set NewSheet = Nothing

A+
Messages postés
38
Date d'inscription
mercredi 31 octobre 2007
Statut
Membre
Dernière intervention
7 février 2014

Dslé pour le message mp...

donc en fait ca me met une erreur pour cela


DerniereValeur = Worksheets("Feuil2").Range("A:A").Find("*", [A1], , , xlByRows, xlPrevious).Row


en fait ma premiere page est une import d'un fichier txt sur le net

donc la taille sera aleatoire et n'aura aucune limite...

donc il faut boucler jusqu'a tomber sur une ligne vide...
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
11
...

non je rigolais pour le mp qui veut dire message perso, c'est juste que je suis a la ramasse question rapidité aujourd'hui

je reviens sur ton probleme : c'est quoi le message d'erreur ?

Est ce bien la feuille 2 dans la quelle ce trouve la colonne de noms d'entreprises ?

ajoute ce qui suis :

On Local Error Resume Next 'si erreur a la prochaine ligne, l'execution du code continu et ne renvoi que le message specifié dans le if
DerniereValeur = Worksheets("Feuil2").Range("A:A").Find("*", [A1], , , xlByRows, xlPrevious).Row
If Err <> 0 Then 'si erreur different de 0 c'est que la fonction find n'a rien trouvé
    Msgbox "aucun nom trouvé !", VbExclamation
    Err.Clear
    End
End If

n'oubli pas de repondre aux 2 questions

A+
Messages postés
38
Date d'inscription
mercredi 31 octobre 2007
Statut
Membre
Dernière intervention
7 février 2014

--> je reviens sur ton probleme : c'est quoi le message d'erreur ?

Il me surligne en jaune "DerniereValeur = Worksheets("Feuil2").Range("A:A").Find("*", [A1], , , xlByRows, xlPrevious).Row"

--> Est ce bien la feuille 2 dans la quelle ce trouve la colonne de noms d'entreprises ?

         Non c'est la feuille 1
das la colonne A mais j'ai remplacer "2" par "1" je pense que c'est pas
le soucis.


Sinon je le rajoute à la suite ou je remplace l'ancien code par ça ?? :

On Local Error Resume Next 'si erreur a la prochaine ligne, l'execution du code continu et ne renvoi que le message specifié dans le if

DerniereValeur = Worksheets("Feuil2").Range("A:A").Find("*", [A1], , , xlByRows, xlPrevious).Row

If Err <> 0 Then 'si erreur different de 0 c'est que la fonction find n'a rien trouvé

    Msgbox "aucun nom trouvé !", VbExclamation

    Err.Clear

    End

End If
Messages postés
38
Date d'inscription
mercredi 31 octobre 2007
Statut
Membre
Dernière intervention
7 février 2014

:)


Il n'y a rien à dire c'est parfait !

Ca marche super bien

Je te remercie !!!!  Je commence a travailler sur Excel et je dois faire directement des choses comme ça...c'est dur dur


Mais merci à toi !!!


a+