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éer des onglets avec des variables d'une première feuille [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 33
    Points : 26
    Points
    26
    Par défaut Créer des onglets avec des variables d'une première feuille
    Bonjour,

    voilà ma question: j'ai une première feuille excel qui comporte 5 colonnes: nom, prénom, ville de résidence, pays de résidence, numéro de téléphone. Je voudrais, à partir de cette première feuille créer d'autres feuilles excel dans le même classeur où chaque onglet correspondrait à un pays de résidence déjà répertorié dans la première feuille.

    Par exemple, dans ma première feuille, j'ai 4 personnes: 2 habitent en France, 2 en Italie. A partir de ces données, comment faire pour créer automatiquement 2 nouvelles feuilles dont les onglets se nommeraient France et Italie et qui ne contiendrait pour l'une que les lignes des personnes habitant en France et pour l'autre que les lignes des personnes habitant en Italie?

    Merci d'avance pour votre réponse.

  2. #2
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    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
    Sub CommandButton1_Click()
    Dim LastLig As Long, i As Long
    Dim Pay As New Collection
     
    Application.ScreenUpdating = False
    With Sheets("BASE")      'à adapter
       .Range("A1").AutoFilter
       LastLig = .Cells(Rows.Count, "A").End(xlUp).Row
       For i = 2 To LastLig
          On Error Resume Next
          Pay.Add .Range("D" & i).Value, .Range("D" & i).Value
          On Error GoTo 0
       Next i
       For i = 1 To Pay.Count
          On Error Resume Next
          If IsError(Sheets(Pay.Item(i)).Select) Then
             On Error GoTo 0
             Worksheets.Add after:=Sheets(Sheets.Count)
             ActiveSheet.Name = Pay.Item(i)
          End If
          .Range("A1:D" & LastLig).AutoFilter field:=4, Criteria1:=Pay.Item(i)
          .Rows(1 & ":" & LastLig).SpecialCells(xlCellTypeVisible).Copy Sheets(Pay.Item(i)).Range("A1")
          .Range("A1").AutoFilter
       Next i
       .Activate
    End With
    End Sub
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  3. #3
    Membre actif Avatar de le_dilem
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Avril 2005
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Avril 2005
    Messages : 313
    Points : 236
    Points
    236
    Par défaut
    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
    Sub AJ()
    'Important il faut avant lancer cette macro faire un trie sur le pays
    Dim i, j, X
    i = 2
    j = 2
    X = 0
    Dim val, rg
     
    Sheets("Feuil1").Select  ' la feuille principale
    While Range("A" & i) <> ""
     
    X = 0
    pays = Sheets("Feuil1").Range("D" & i)
     
      For Z = 1 To Sheets.Count
           If (pays) = Sheets(Z).Name Then
          X = 1
          End If
      Next Z
     
    If X <> 1 Then                   ' ajouter une feuille si elle n'existe pas
    Set NewSheet = Sheets.Add(Type:=xlWorksheet)
        NewSheet.Name = (pays)
    End If
    Sheets("Feuil1").Select
    val = Range("D" & i)
    If Range("D" & i) = val Then
      rg = Range("d" & i).Value
      Rows(i).Copy
     
     Sheets(rg).Select
     Rows(j).Select
     ActiveSheet.Paste
    j = j + 1
    End If
    Sheets("Feuil1").Select
    If Range("D" & i) <> Range("D" & i + 1) Then
    j = 2
    End If
    i = i + 1
     
    Wend
    End Sub
    Je fume du thé et je reste éveillé, le cauchemar continue.

  4. #4
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Oh là là, Je ne me peux pas m'empêcher de critiquer le code proposé vu ses nombreuses manières à éviter
    1. déclaration incorrecte des variable ou non déclaration
    2. utilisation de noms de variables qui peuvent donner à confusion (val)
    3. Indentation archaïque du code, lisibilité moindre
    4. Utilisation sans utilité des Select et Activate
    5. Ce passage est étrange
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
       val = Range("D" & i)
       If Range("D" & i) = val Then
          rg = Range("D" & i).Value
    Améliore ton code
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 33
    Points : 26
    Points
    26
    Par défaut Merci!
    Merci beaucoup pour ces codes!!! Ca marche!

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 18/07/2014, 13h21
  2. Probleme lien des cellules lors des copies auto des onglets sous vba
    Par FEADEUR dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 28/06/2013, 16h38
  3. [JavaScript] Des panels avec des onglets
    Par dragonno dans le forum Contribuez
    Réponses: 9
    Dernier message: 23/03/2013, 11h17
  4. Réponses: 4
    Dernier message: 02/04/2008, 17h51
  5. Réponses: 10
    Dernier message: 23/03/2007, 15h28

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