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 :

Aide sur une fonction à base de select case


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Mai 2010
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2010
    Messages : 120
    Points : 175
    Points
    175
    Par défaut Aide sur une fonction à base de select case
    Bonjour à tous,

    Mon projet: je veux écrire une fonction qui en fonction du contenu de la cellule supprime ou non la ligne. Les lignes à garder sont celle dont la valeur de la cellule dans la colonne A commence par 13 ou 16 ou 29 ... (voir dans le code ci dessous), le nombre de cas à garder étant exhaustif. Les lignes à supprimer sont donc celle qui ne répondent pas à ces critères.

    En résumé, je veux inspecter la valeur de la Cellule A de la ligne (pour être précis seuls les 2 premiers chiffres suffisent) afin de déterminer si la ligne doit être supprimée ou non. Je précise que le contenu de la colonne A est un nombre stocké sous forme de texte.

    Voilà ce que j'ai fait:
    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
    Sub SuppLigneCondition()
    Dim vCellule As Range
    Dim vCol As Range
    Dim vCode As String
     
    Set vCol = Range("A4:A" & Range("A65536").End(xlUp).Row)
     
    For Each vCellule In vCol
        vCode = Left(vCellule.Value, 2)
        Select Case vCode
            Case "13"
            Case "16"
            Case "29"
            Case "30"
            Case "37"
            Case "42"
            Case "58"
            Case "62"
            Case "65"
            Case "72"
            Case Else
            vCellule.EntireRow.Delete
        End Select
    Next vCellule
    End Sub
    Le problème c'est tout simplement que ça foire ! Après l'éxécution de la macro il me reste encore des lignes non désirées (dont la valeur dans la cellule A commence par 10 par exemple ou même par des lettres) et je suis quasi sur que des lignes que je dois garder sont supprimées.
    Je ne sais pas s'il s'agit d'une erreur de syntaxe ou d'une mauvaise utilisation de select case.

    Merci de m'aider à résoudre ce mystère !

  2. #2
    Membre habitué
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Mai 2010
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2010
    Messages : 120
    Points : 175
    Points
    175
    Par défaut Tout seul comme un grand !!
    Problème résolu!!
    La cause en supprimant la ligne pendant la boucle celle-ci saute une ligne (la ligne en dessous de la ligne analysée remonte d'un cran et n'est pas éxaminée).
    Solution : créer une variable Range qui contient toute les lignes à supprimer pendant la boucle et après la boucle on peut effacer la plage.

    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 SuppLigneCondition()
    Dim vCellule As Range
    Dim vCol As Range
    Dim vCode As String
    Dim vLigneSupp As Range
     
    Set vCol = Range("A4:A" & Range("A65536").End(xlUp).Row)
     
    For Each vCellule In vCol
        vCode = Left(vCellule.Value, 2)
        Select Case vCode
            Case "13"
            Case "16"
            Case "29"
            Case "30"
            Case "37"
            Case "42"
            Case "58"
            Case "62"
            Case "65"
            Case "72"
            Case Else
            If vLigneSupp Is Nothing Then
                Set vLigneSupp = vCellule.EntireRow
            Else
                Set vLigneSupp = Union(vLigneSupp, vCellule.EntireRow)
            End If
        End Select
    Next vCellule
     
    vLigneSupp.Delete
     
    End Sub

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

Discussions similaires

  1. Aide sur une fonction excel
    Par vanessb dans le forum Excel
    Réponses: 9
    Dernier message: 27/11/2008, 10h11
  2. aide sur une fonction
    Par haymen dans le forum C#
    Réponses: 7
    Dernier message: 11/09/2008, 22h14
  3. Aide sur une fonction sous Visual C++ .NET
    Par mog83 dans le forum C++
    Réponses: 0
    Dernier message: 22/04/2008, 15h17
  4. Aide sur une fonction / pbm de manipulation de caractère
    Par captainamerica75 dans le forum Access
    Réponses: 3
    Dernier message: 16/02/2006, 11h54
  5. Besoin d'aide sur une fonction
    Par PrinceMaster77 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 30/08/2005, 17h40

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