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 :

MACRO qui crée des listes


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 138
    Points : 54
    Points
    54
    Par défaut MACRO qui crée des listes
    Bonjour à tous,

    J'ai une base de 5 colonnes, et j'utilise une macro qui me créé des listes en fonction de ma base :


    le problème c'est que mes cellules de ma base peuvent commencer par des chiffres, ou des caractères spéciaux, et la macro n'aime pas et plante :

    Je vous ai mis la macro, et j'ai mis en gras et souligné la ligne qui plante

    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
    Sub CreeListeBD()
     colBD = 1
     colListe = 8
     Set f = Sheets("bd")
     ligne = 1
     f.Cells(ligne + 1, colListe).Resize(1000, 10).Clear
     Set mondico = CreateObject("Scripting.Dictionary")
     For Each c In Range(f.Cells(2, colBD), f.Cells(65000, colBD).End(xlUp))
       mondico(c.Value) = c.Value
     Next c
     f.Cells(ligne, colListe) = "Liste"
     f.Cells(ligne, colListe).Font.Bold = True
     f.Cells(ligne + 1, colListe).Resize(mondico.Count) = Application.Transpose(mondico.items)
     ActiveWorkbook.Names.Add Name:="Liste", RefersTo:=f.Cells(ligne + 1, colListe).Resize(mondico.Count)
     '---- niv 2,3,..
     For niv = 2 To 5    ' adapter le nombre de niveaux
        colBD = colBD + 1
        colListe = colListe + 2
        ligne = 1
        For Each c In Range(f.Cells(2, colListe - 2), f.Cells(65000, colListe - 2).End(xlUp))
         If c <> "" And c.Font.Bold <> True Then
          Set mondico = CreateObject("Scripting.Dictionary")
          For Each d In Range(f.Cells(2, colBD), f.Cells(65000, colBD).End(xlUp))
            If d.Offset(, -1) = c Then mondico(d.Value) = d.Value
          Next d
          f.Cells(ligne, colListe) = c
          f.Cells(ligne, colListe).Font.Bold = True
          f.Cells(ligne + 1, colListe).Resize(mondico.Count) = Application.Transpose(mondico.items)
          ActiveWorkbook.Names.Add Name:=Replace(c, " ", "_"), RefersTo:=f.Cells(ligne + 1, colListe).Resize(mondico.Count)
          ligne = ligne + mondico.Count + 1
         End If
        Next c
     Next niv
    End Sub

    Est ce que quelqu'un à une solution ? pour que ma macro prennent en compte les cellules qui commencent par des chiffres, ou qui contiennent des caractères spéciaux ?

    Merci d'avance, j'espère avoir été clair

  2. #2
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Bonjour

    Il faut vérifier chacun des caractères et remplacer les caractères interdits.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    xx = Nettoyer(CStr(c))
     
    ActiveWorkbook.Names.Add Name:=xx, RefersTo:=f.Cells(ligne + 1, colListe).Resize(mondico.Count)
    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
    Function Nettoyer(a)
     
        For i = 1 To Len(a)
            b = Mid(a, i, 1)
     
            If i = 1 Then
             strLike = "[A-Z,a-z]"
            Else
             strLike = "[A-Z,a-z,0-9]"
            End If
     
            If b Like strLike Then
                c = c & b
                Else
                 c = c & "_"
            End If
     
        Next i
        Nettoyer = c
     
    End Function
    Cordialement

    Docmarti.

Discussions similaires

  1. script qui crée des fichiers
    Par Emcy dans le forum Langage
    Réponses: 5
    Dernier message: 30/10/2007, 09h28
  2. macro qui crée une macro, est ce possible ?
    Par Djohn dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/07/2007, 09h43
  3. Macro qui crée et renomme un controle
    Par k-eisti dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 04/06/2007, 17h17
  4. Réponses: 2
    Dernier message: 16/05/2007, 16h13
  5. Réponses: 5
    Dernier message: 07/05/2007, 08h16

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