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 :

VBA et Alphabet


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Femme Profil pro
    comptable
    Inscrit en
    Janvier 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : comptable

    Informations forums :
    Inscription : Janvier 2015
    Messages : 3
    Par défaut VBA et Alphabet
    Bonjour tout le monde,

    Débutante en VBA, je rencontre quelques difficultés dans mon code... En gros, dans mon tableau, dans la colonne E, j'ai une suite de lettre qui va de A à H, puis il y a des cellules vides, et enfin des cellules avec des calculs de poucentage. J'ai fais une macro qui permet de créer des feuilles pour chaque lettre mais la macro continue avec la cellule vide qui suit la cellule H.

    Je cherche donc un Code qui me permet de créer des feuilles seulement quand une lettre est renseignée.

    Voici mon Code VBA :

    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
    Option Explicit
    Public C As Long
    Public L As Long
     
    Sub Cree_Feuilles()
     
    Dim i As Integer
    Dim Feuille As Worksheet
     
    Worksheets("CIRC CLT").Select
    L = Lastligne(1048576, 1)
    C = lLastCol(1, 16384)
     
    For i = 14 To L + 2
    If Not SheetExists(Worksheets("CIRC CLT").Cells(i, 5).Value) Then
    Set Feuille = Worksheets("Base")
    Worksheets("Base").Range("A1:E49").Copy
    Worksheets("CIRC CLT").Select
    Sheets.Add After:=Sheets(Sheets.Count)
    ActiveSheet.Name = Worksheets("CIRC CLT").Cells(i, 5).Value
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Cells(1, 5) = (Worksheets("CIRC CLT").Cells(i, 5).Value)
    Columns("A:A").ColumnWidth = 17.57
    Columns("B:B").ColumnWidth = 14.14
    Columns("C:C").ColumnWidth = 36.71
    Columns("D").ColumnWidth = 17.86
    Columns("E:E").ColumnWidth = 17.86
    End If
     
    Next i
    End Sub
    De plus, j'aimerais si possible, que dans mon tableau il y ait une ligne vide entre chaque lettre, sans pour autant que cela arrête la macro. Est-ce possible? Si oui comment?

    Merci d'avance pour vos réponses.

  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
    13 166
    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 : 13 166
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Voir du côté des fonctions textes de VBA.

    Par exemple pour savoir si une cellule est vide la fonction Len(String) renvoie 0
    La fonction ASC permet aussi de connaître le code Ascii d'un caractère elle renvoie la valeur 65 pour la lettre A, 66 pour B, etc.
    La fonction Left renvoie x caractères à gauche d'une chaîne, etc.
    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
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut
    Bonjour Luciev, Philippe Tulliez,

    Pour ma part, j'ai fait un (tout petit, pas beaucoup, je jure, je jure) peu de ménage dans ta macro.
    Tu utilises le ".Copy", ".Paste" que je n'aime pas du tout, mais gardons le pour ton besoin.

    Voici ce que je te propose :
    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
    Sub Cree_Feuilles()
    Dim i As Integer
    Dim Last_line As Integer
    Dim Feuille As Worksheet
     
    With Worksheets("CIRC CLT")
        Last_line = .Columns(5).Find("*", , , , , xlPrevious).Row
     
        For i = 14 To Last_line
            If Not IsNumeric(.Cells(i, 5).Value) And .Cells(i, 5).Value <> "" Then
                If Not SheetExists(.Cells(i, 5).Value) Then
                    Worksheets("Base").Range("A1:E49").Copy
     
                    Set Feuille = Sheets.Add(After:=Sheets(Sheets.Count))
                    Feuille.Name = Worksheets("CIRC CLT").Cells(i, 5).Value
                    Feuille.Paste
     
                    Application.CutCopyMode = False
     
                    With Feuille
                        .Cells(1, 5) = (Worksheets("CIRC CLT").Cells(i, 5).Value)
                        .Columns(1).ColumnWidth = 17.57
                        .Columns(2).ColumnWidth = 14.14
                        .Columns(3).ColumnWidth = 36.71
                        .Columns(4).ColumnWidth = 17.86
                        .Columns(5).ColumnWidth = 17.86
                    End With
                End If
            End If
        Next i
    End With
     
    End Sub
    Pour ma part, je passe plutôt par une condition comme celle-ci If Not IsNumeric(.Cells(i, 5).Value) And .Cells(i, 5).Value <> "" Then qui exclue les cellules numériques et vides.

    N'hésite pas à revenir vers nous, si tu as d'avantage de questions.

    Cordialement,
    Kimy

  4. #4
    Futur Membre du Club
    Femme Profil pro
    comptable
    Inscrit en
    Janvier 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : comptable

    Informations forums :
    Inscription : Janvier 2015
    Messages : 3
    Par défaut Merci!!!!
    Merci beaucoup pour vos réponses!!! Ton Code fonctionne à merveille Mais pourrais-tu m'expliquer 2 petites choses stp :
    - Que signifie ta ligne Lastligne
    - et pourquoi mettre With Feuille?

    Désolé, j'ai commencé VBA à Noël, donc je suis vraiment débutante et je pose plein de question pour essayer de me débrouiller seule par la suite ^^

    Je reviendrais vers vous pour un autre tableau sur lequel j'ai des difficultés, si toute fois je n'ai pas trouvé de solution toute seule d'ici là ^^

    Merci encore

  5. #5
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,


    Citation Envoyé par Luciev Voir le message
    Merci beaucoup pour vos réponses!!! Ton Code fonctionne à merveille Mais pourrais-tu m'expliquer 2 petites choses stp :
    - Que signifie ta ligne Lastligne
    C'est pour rechercher la dernière ligne non-vide de la feuille, ou peut-être juste de la colonne E.


    - et pourquoi mettre With Feuille?
    Ce n'est pas obligatoire, mais c'est intéressant pour accélérer un peu le codage. Mais c'est aussi très utile pour la lisibilité et un peu pour la compréhension du code; autant pour toi après x jours ou z semaines, que pour un autre développeur ou un autre lecteur de ton code.

    Ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    With Feuille
           .Cells(1, 5) = (Worksheets("CIRC CLT").Cells(i, 5).Value)
           .Columns(1).ColumnWidth = 17.57
           .Columns(2).ColumnWidth = 14.14
           .Columns(3).ColumnWidth = 36.71
           .Columns(4).ColumnWidth = 17.86
           .Columns(5).ColumnWidth = 17.86
     End With
    remplace ceci:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Feuille.Cells(1, 5) = (Worksheets("CIRC CLT").Cells(i, 5).Value)
    Feuille.Columns(1).ColumnWidth = 17.57
    Feuille.Columns(2).ColumnWidth = 14.14
    Feuille.Columns(3).ColumnWidth = 36.71
    Feuille.Columns(4).ColumnWidth = 17.86
    Feuille.Columns(5).ColumnWidth = 17.86

  6. #6
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut
    Bonjour Luciev, clementmarcotte,

    Tout d'abord clementmarcotte, tu réponds parfaitement à la question.
    Cependant, je dois me permettre de dire que je ne suis pas d'accord avec toi : c'est TRES utile pour la compréhension du code.

    J'ai commencé le VB avec les "With" et, peut-être que mon esprit est maintenant formaté, je pense que celui-ci permet d'avoir une excessivité de visibilité.
    Ainsi, on sait sur quelle feuille on travaille sans jamais pouvoir se tromper.
    De plus, ceci n'empêche pas d'aller piocher/écrire des infos sur d'autres feuilles en parallèle...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    With Worksheets("Feuil1")
        .Range("A1") = "test feuille 1" 'j'écris dans ma Feuil1
        Worksheets("Feuil2").Range("A1") = "test feuille 2" 'j'écris dans ma Feuil2
    End With
    Ainsi, je continue à l'utiliser à outrance car cela permet tout de même d’alléger énormément le code tout en étant sur de ne pas faire d'erreur de frappe en plaçant seulement un "." pour faire référence au "With" courant (même avec l'Option Explicit).

    Voila, je ne pouvais m'empêcher de donner mon avis ! Le relou...

    Cordialement,
    Kimy

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

Discussions similaires

  1. Alphabet cyrillique dans VBA
    Par Meduse dans le forum VBA Access
    Réponses: 2
    Dernier message: 02/04/2016, 16h37
  2. [VBA-E] [Excel] Lancer une macro à une heure donnée
    Par Lysis dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/10/2002, 12h15
  3. [VBA-E] [Excel] Tri automatique
    Par bovi dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 01/10/2002, 10h19
  4. [VBA-E] [Excel] Filtrer le donnees d'une sheet
    Par donia dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 27/09/2002, 10h55
  5. problème avec VBA
    Par Delph dans le forum Langage
    Réponses: 2
    Dernier message: 19/08/2002, 13h15

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