IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Crée un onglet pour chaque service [Toutes versions]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    retraite
    Inscrit en
    Décembre 2012
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraite
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2012
    Messages : 38
    Points : 38
    Points
    38
    Par défaut Crée un onglet pour chaque service
    Bonjour à toutes et à tous,
    Néophyte en VBA je souhaite faire évoluer un code.
    Voici le problème :
    J’ai une feuille nommée « BD » avec un tableau (voir ci-dessous)
    Nom		Service	Salaire		Qualif			
    Cowan		Compta	3400		Q2			
    Dang		Compta	5000		Q1			
    Dupont		Compta	4500		Q1			
    Lebosse		Compta	2300		Q2			
    Ceuzin		Etudes	3400		Q2			
    Dupond		Etudes	5000		Q2			
    Durand		Etudes	4500		Q2		        
    Dykiel		Etudes	2300		Q1			
    Bailleul	Fabric	3400		Q3			
    Garcia		Fabric	5000		Q3			
    Martin		Fabric	4500		Q1			
    Lucien		AAA	2300		Q1			
    Tyndare		AAAA	3400		Q3			
    Sylvie	 	AAA36	5000		Q3			
    Roger		36AAA	4500		Q1
    Je souhaite avec un code VBA créer un onglet pour chaque service.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Sub Extrait()
      Set f = Sheets("BD")
      Application.DisplayAlerts = False
      Application.ScreenUpdating = False
     
      '--- Liste des services
      f.[A1:D10000].AdvancedFilter Action:=xlFilterCopy, CopyToRange:=f.[G1], Unique:=True
      For Each c In f.Range("G2:G" & f.[G65000].End(xlUp).Row)   ' pour chaque service
         f.[G2] = c.Value
         On Error Resume Next
         Sheets(c.Value).Delete
         On Error GoTo 0
         Sheets.Add After:=Sheets(Sheets.Count)   ' création
         ActiveSheet.Name = c.Value
     
        '-- extraction
         f.[A1:D10000].AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=f.[G1:G2], CopyToRange:=[A1]
       Next c
    End Sub
    Maintenant un petit PB.

    1.Quand je lance la macro « Sub Extrait() » il y a un résultat incorrect dans l’onglet service « AAA » nous trouvons trois services différents pourquoi ?

    Nom	Service	Salaire	Qualif
    Lucien	AAA	2300	Q1
    Tyndare	AAAA	3400	Q3
    Sylvie	AAA36	5000	Q3
    Un petit plus est il possible de nommer l’onglet avec la couleur du service en plus ?

    Voilà j’espère avoir donné une explication claire sur les problèmes à résoudre.
    Merci d’avance à celui ou à celle qui souhaitera m’aider et m'instruire car je souhaite comprendre mçeme si F8 m'aide beaucoup à la compréhension.
    J’ai emprunté le code sur la page de http://boisgontierj.free.fr/ que je n’arrive pas à joindre pour au moins le remercier de proposer plein de petits codes en libre service. S’il me lit je le remercie bien fort.
    CORDIALEMENT
    TYNDARE

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 858
    Points : 28 779
    Points
    28 779
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Avec le filtre avancé d'excel (AdvancedFilter), si on veut filtrer une chaîne exacte par exemple Marie.
    Dans la zone des critères, il y a lieu de faire précéder cette chaîne par l'apostrophe et l'opérateur logique d'égalité '=Marie ou ="=Marie" afin de ne pas filtrer par exemple Marie-Tina
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    retraite
    Inscrit en
    Décembre 2012
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraite
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2012
    Messages : 38
    Points : 38
    Points
    38
    Par défaut Créer un onglet pour chaque service
    Bonjour Philippe

    Tout d'abord merci de prendre sur ton temps pour t'avoir penché sur mon problème.
    J'ai essayer ta solution mais cela ne fonctionne pas, me suis-je trompé sur l'emplacement ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Sub Extrait()
      Set f = Sheets("BD")
      Application.DisplayAlerts = False
      Application.ScreenUpdating = False
      '--- Liste des services
      f.[B1:E10000].AdvancedFilter Action:=xlFilterCopy, CopyToRange:=f.[G1], Unique:=True
      For Each c In f.Range("G2:G" & f.[G65000].End(xlUp).Row)   ' pour chaque service
         f.[G2] = c.Value
         On Error Resume Next
         Sheets(c.Value).Delete
         On Error GoTo 0
         Sheets.Add After:=Sheets(Sheets.Count)   ' création
         ActiveSheet.Name = c.Value
         '-- extraction
         f.[B1:E10000].AdvancedFilter Action:=xlFilterCopy, CriteriaRange:="=f.[G1:G2]", CopyToRange:=[A1]
       Next c
    End Sub

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 858
    Points : 28 779
    Points
    28 779
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Difficile de donner une réponse, il faudrait savoir la valeur qu'il y a dans la cellule G2 au moment où il s'agit de filtrer et exporter les données
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    f.[B1:E10000].AdvancedFilter Action:=xlFilterCopy, CriteriaRange:="=f.[G1:G2]", CopyToRange:=[A1]
    A la lecture de ton code, j'imagine que c'est à la ligne 8
    qu'il faudrait faire la modification, sans doute
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     f.[G2] = "=" & Chr(34) & "=" & c.Value & Chr(34)
    J'ai fait le test ci-dessous et cela fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     Dim c As Range
     Set c = Range("B14")
     Range("F6") = "=" & Chr(34) & "=" & c.Value & Chr(34)
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    retraite
    Inscrit en
    Décembre 2012
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraite
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2012
    Messages : 38
    Points : 38
    Points
    38
    Par défaut Créer un onglet pour chaque service
    Merci beaucoup Philippe d’avoir pris sur ton temps pour te pencher sur mon problème.
    Mais je pense que mon explication du problème est mauvaise donc pour cela je te communique un fichier.
    Merci beaucoup
    Fichiers attachés Fichiers attachés

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 858
    Points : 28 779
    Points
    28 779
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    La réponse que j'ai donnée était correcte cependant je ne savais pas que tu utilisais la même cellule pour créer les feuilles
    Donc voici un solution pas très élégante mais je n'ai pas le temps de faire plus aujourd'hui.
    La ligne en rouge doit être mise entre la ligne remarque '-- extraction et la ligne de la méthode AdvancedFilter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
         '-- extraction
         f.[G2] = "=" & Chr(34) & "=" & c.Value & Chr(34)
         f.[B1:E10000].AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=f.[G1:G2], CopyToRange:=[A5]
    L'idéal est d'avoir une zone de critère (G1:G2) indépendante de la plage où tu as placé les catégories.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    retraite
    Inscrit en
    Décembre 2012
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraite
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2012
    Messages : 38
    Points : 38
    Points
    38
    Par défaut Crée un onglet pour chaque service
    Bonjour Philippe,
    un peu de retard pour répondre mais vaut mieux tard que jamais tout cela pour te dire que ton code fonctionne merci beaucoup. Je vais maintenant me lancer sur la mise en oeuvre d'une userform pour remplir une base de données. Connais tu un tutoriel ?

    merci encore MERCI

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. crée une form pour chaque donnée reçu
    Par gastoncs dans le forum VB.NET
    Réponses: 6
    Dernier message: 24/05/2015, 12h31
  2. Création d'un onglet pour chaque résultat d'un filtre
    Par Antoine_d33 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 02/03/2015, 15h29
  3. Réponses: 0
    Dernier message: 28/06/2013, 13h47
  4. Réponses: 0
    Dernier message: 27/06/2013, 16h10
  5. Attribution d'un port dynamique pour chaque service de SQL Server
    Par dily0403 dans le forum Administration
    Réponses: 1
    Dernier message: 29/09/2008, 10h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo