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 :

Classement par Onglet [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Assistant technique
    Inscrit en
    Février 2007
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Assistant technique
    Secteur : Services à domicile

    Informations forums :
    Inscription : Février 2007
    Messages : 336
    Par défaut Classement par Onglet
    Bonjour,

    J'ai récupéré cette macro sur le net :

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    Sub Classement_par_Onglets()
     
    j = 2
    l = 2
    Lig = 2
    Dim code As String
            Application.DisplayAlerts = False
     
        S_LIG = InputBox(" PRECISEZ la COLONNE qui va servir de base pour créer les ONGLETS  :")
     
    Range("A2").Select
    For f = l To 200000
          Range(S_LIG & j).Select
          code = "_" & ActiveCell.FormulaR1C1   '********* Code = cellule
          code = Left(code, 30)
          If code = "_" Then Exit For      '********* si cellule vide alors  Fin
                If Left("_" & ActiveCell.Value, 29) = code Then '******** si la cellule active de Feuil1 = code
               Range("A" & j & ":" & "B" & j & ":" & "X" & j).Select
               Selection.Copy
     
               On Error Resume Next
               Sheets(code).Select     '********** Passage à onglet = CODE
               If Err.Number = 9 Then  '********** Contrôle si onglet = code absent alors création
                         Sheets.Add.Name = code
                                    Sheets("SELECTION").Select
                                    Cells(Lig, 1).Value = code
                                    Lig = Lig + 1
     
                                    Sheets("Feuil1").Select
                                    Range("A1:AK1").Select
                                    Selection.Copy
                                    Sheets(code).Select
                                    Range("A1").Select
                                    Selection.PasteSpecial Paste:=xlAll, Operation:=xlNone, SkipBlanks:=False _
                                    , Transpose:=False
                                    Sheets("Feuil1").Select
                                   Range("A" & j & ":" & "B" & j & ":" & "X" & j).Select
                                   Selection.Copy
                                   Sheets(code).Select
                                   Range(A2).Select
                         Err.Clear
                         Err.Number = 0
               End If
                Range("A2").Select
    line1:
              If ActiveCell.Value = "" Then
                    ActiveSheet.Paste       '******* Si Cellule vide alors on colle
                    Selection.Offset(1, 0).Select
              Else
                    Selection.Offset(1, 0).Select
                    GoTo line1
              End If
        Else
              Selection.Offset(1, 0).Select
        End If
        j = j + 1
        Sheets("feuil1").Select
    Next f
        Sheets("feuil1").Select
        ActiveSheet.Shapes("Button 1").Select
        Selection.Cut
        ActiveWindow.SelectedSheets.Delete
     
        Sheets("Selection").Select
     
       ActiveWorkbook.SaveAs Filename:= _
            "C:\DATALOC\ONGLET.xls", FileFormat:= _
            xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _
            , CreateBackup:=False
     
        Range("A1:B5344").Select
        Range("B2").Activate
        Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlGuess, _
            OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
          Range("A1").Select
            code = ActiveCell.FormulaR1C1
          Range("C2").Select
         ActiveCell.Value = code   '********* Code = cellule
     
     
    End Sub
    A chaque changement de valeur dans une colonne, elle crèe un onglet puis copie les données dans ce nouvel onglet

    Par contre, on dirait que la macro crée un onglet par ligne de données

    Alors que je veux qu'elle me crée un onglet par nouvel valeur

    Par exemple :

    Colonne A

    9777
    9777
    9777
    9777
    9888
    9888
    9888
    9888

    Donc il va y avoir une feuille "9777" et une autre "9888"

    Pouvez-vous m'aider ?

    merci par avance

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut wyzer et le forum
    J'ai juste jeté un coup d'oeil rapide au code fournit : beurk ! Je n'aime pas ce code... mais il a au moins le mérite d'exister.

    Avant d'en faire un, à ma sauce, quelques remarques :
    - Copier un code, sans le comprendre peut mener à de désagréables surprises.
    - un code non compris t'oblige à demander de l'aide à chaque problème. Et quelques fois, le problène ne venant pas du code, tu mettras du temps à corriger ce qui ne va pas.
    -S'obliger à comprendre le code te fais demander des explications. Mais, ça fait partie du "travail" du forum. Alors ne jamais hésiter à demander, jusqu'à ce que l'on ait bien compris. Passer pour un imbécile sur un forum n'est pas grave, c'est anonyme ^^, mais auprès de son entourage...

    Ce que je crois comprendre de ton problème :
    Tu as une feuille (son nom ?) qui a une colonne (Laquelle) qui contient des valeurs. À chaque valeur doit correspondre un onglet.
    Question :
    - Le nom de l'onglet est-il exactement celui de la valeur ?
    - Si une nouvelle valeur apparaît dans la colonne, on doit créer automatiquement le nouvel onglet (macro à lancement automatique WorkSheet_Change) ou il n'est créé que si tu lances une macro manuellement ?
    - Si le nom disparaît de la colonne (en cas d'erreur, par exemple), doit-on supprimer l'onglet ?

    Ces renseignements ne servent qu'à répondre à ton besoin supposé. Pas à utiliser ton fichier. Comme on ne sait strictement rien, on ne fait que des suppositions. Créer un onglet suppose qu'on va le remplir => sa suppression peut entraîner une perte importante de données. Plusieurs messages de validation de la suppression sont toujours chiant, mais sur une erreur, pour moi, il vaut mieux rereconfirmer que pleurer.
    A+

  3. #3
    Membre éclairé
    Homme Profil pro
    Assistant technique
    Inscrit en
    Février 2007
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Assistant technique
    Secteur : Services à domicile

    Informations forums :
    Inscription : Février 2007
    Messages : 336
    Par défaut
    Salut et merci pour ta réponse


    - le nom de la feuille change selon le fichier

    - la colonne où se trouvent les valeurs change selon le fichier

    - Dès que la valeur change (lors du parcours de la macro) une nouvelle feuille doit être créée, et le nom de cette feuille est le celui de la valeur

    - Les valeurs ne change pas, donc le lancement de la macro se fait manuellement


    Merci beaucoup !!



    EDIT : lors de la création de la nouvelle feuille, on copie toute la ligne vers cette nouvelle feuille. Comme tu le fait remarquer, c'est plus prudent (que de faire de couper/coller)

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut wyzer et le forum
    Le nom de la feuille change et la macro est à lancement mauel => Ok, on travaille donc sur la feuille active => macro dans module général
    la colonne où se trouvent les valeurs change selon le fichier
    C'est donc le but de l'inputBox.
    Dès que la valeur change (lors du parcours de la macro) une nouvelle feuille doit être créée, et le nom de cette feuille est le celui de la valeur
    pas sûr d'avoir compris : si on lance 2 fois de suite la macro, on recrée 2 fois les feuilles ?
    lors de la création de la nouvelle feuille, on copie toute la ligne vers cette nouvelle feuille. Comme tu le fait remarquer, c'est plus prudent (que de faire de couper/coller)
    Là, on se calme : ça n'a rien à voir avec ce que tu demandais initialement.
    Explique ce que tu veux réellement, en final.

    pas la peine de dire que c'est dans la macro : une macro qui bloque les messages d'avertissement dès le départ et qui ne la remet jamais en route, qui utilise Activecell, me donne des boutons
    A+

  5. #5
    Membre éclairé
    Homme Profil pro
    Assistant technique
    Inscrit en
    Février 2007
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Assistant technique
    Secteur : Services à domicile

    Informations forums :
    Inscription : Février 2007
    Messages : 336
    Par défaut
    Voici un exemple car c'est pas évident à expliquer

    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
    20
     
    Colonne A 	| Colonne B 	| Colonne C
    		|		|
    10001111	| DUPONT	| Jean-Pierre
    10001111	| DUPONT	| Jean-Pierre
    10001111	| DUPONT	| Jean-Pierre
    10001111	| DUPONT	| Jean-Pierre
    10002222	| DUPONT	| Jean-Pierre
    10002222	| DUPONT	| Jean-Pierre
    10002222	| DUPONT	| Jean-Pierre
    10002222	| DUPONT	| Jean-Pierre
    10002222	| DUPONT	| Jean-Pierre
    10003333	| DUPONT	| Jean-Pierre
    10003333	| DUPONT	| Jean-Pierre
    10003333	| DUPONT	| Jean-Pierre
    10004444	| DUPONT	| Jean-Pierre
    10004444	| DUPONT	| Jean-Pierre
    10004444	| DUPONT	| Jean-Pierre
    10004444	| DUPONT	| Jean-Pierre
    10004444	| DUPONT	| Jean-Pierre
    La colonne A contient le numéro de client

    Donc on va avoir 4 feuilles car il y a 4 numéros de clients différrents

    Et dans chaque feuille il y aura toutes les lignes du numéro de clients concernés

  6. #6
    Membre éclairé
    Homme Profil pro
    Assistant technique
    Inscrit en
    Février 2007
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Assistant technique
    Secteur : Services à domicile

    Informations forums :
    Inscription : Février 2007
    Messages : 336

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

Discussions similaires

  1. [WinForms]Passer du MDI à la navigation par onglet
    Par jyl2002 dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 14/10/2006, 13h15
  2. Comment connaitre le classement par req ?
    Par nanou9999 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 14/09/2006, 16h20
  3. [SGBD] Classement par ordre alphabetique
    Par Ceubex dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 02/07/2006, 20h12
  4. [Conception] Classement par date et id : donner la priorité
    Par psychoBob dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 01/02/2006, 15h04
  5. Problème classement par date
    Par Triomen dans le forum Langage SQL
    Réponses: 12
    Dernier message: 06/09/2005, 14h09

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