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 :

(Cacher) modifié en : Supprimer les lignes vides dans un tableau [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 89
    Points : 22
    Points
    22
    Par défaut (Cacher) modifié en : Supprimer les lignes vides dans un tableau
    Salut tout le monde,

    J'ai un tableau qui commence à partir de la ligne 3 et 5ème colonne
    je veux supprimer les lignes où il n y a pas de valeurs insérées avec une macro..
    J'ai mis en place un code mais ca ne marche pas
    voila mon code :

    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
    Sub CacherLigneVide()
    Dim i As Integer
    Dim imax As Integer
    Dim mysheet As Worksheet
     
    Set mysheet = Sheets("sheet2")
     
    mysheet.Select
    'Déterminer la dernière ligne renseignée
    imax = mysheet.Range("B65536").End(xlUp).Row
     
    For i = 3 To imax
    If Range(Cells(i, 5), Cells(i, 5).End(xlToRight)) = "" Then
       Range(Cells(i, 5), Cells(i, 5).End(xlToRight)).Select
       Selection.Hidden = True
    End If
    Next i
    Set mysheet = Nothing
    End Sub
    Merci d'avance pour l'aide

  2. #2
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    Bonjour,

    Essaies ceci
    Tu mets tes références de colonnes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Range("A3:E") & Range("A").End(xlUp).Row)SpecialCells(xlCellTypeBlanks).EntireRow.Delete

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Vous pouvez aussi essayer :
    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
    Sub CacherLigneVide()
    Dim i As Integer
    Dim imax As Integer
    Dim mysheet As Worksheet
     
    Set mysheet = Sheets("Sheets2")
     
    mysheet.Select
    'Déterminer la dernière ligne renseignée
    imax = mysheet.Range("B65536").End(xlUp).Row
     
    For i = 3 To imax
    If Range(Cells(i, 5), Cells(i, 5)).End(xlToRight) = "" Then
    Cells(i, 5).Rows.Hidden = True
    End If
    Next i
    Set mysheet = Nothing
    End Sub

  4. #4
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 89
    Points : 22
    Points
    22
    Par défaut
    Avec le code suivant j'arrive à supprimer toutes les lignes vides sans avoir de pbm...
    Merci pour vos codes qui m'ont beaucoup aidé, je les ai amélioré, en effet il y avait un pbm causé par la décalage créé lorsqu'on supprime une ligne vide, la ligne d'après change de numéro et par conséquent n'ai pas traité par le code et donc pas supprimé même si elle est vide...

    Voila le code :

    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
    Sub deleteLigneVide()
     
        Dim i As Integer, j As Long
        Dim imax As Integer
        Dim mysheet As Worksheet
     
        Set mysheet = Sheets("sheet1")
     
        'Déterminer la dernière ligne renseignée
        imax = mysheet.Range("B65536").End(xlUp).Row
        mysheet.Select
        j = 3
        For i = 3 To imax
            If Range(Cells(i, 4), Cells(i, 4)).End(xlToRight) = "" Then
        '    If Cells(i, 3).End(xlToRight).Column = 256 Then
                Cells(i, 4).EntireRow.Delete
                i = i - 1
            End If
            j = j + 1
            If j = imax + 1 Then Exit For
        Next i
     
        Set mysheet = Nothing
    End Sub

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    D'après votre réponse on peut supposer que votre problème est résolu ?

    Si c'est bien le cas, pensez à cliquer sur le bouton "Résolu".

  6. #6
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 89
    Points : 22
    Points
    22
    Par défaut
    Resalut tout le monde,
    En fait non , je viens de m'apercevoir qu'il faut que j'améliore encore une fois mon code..

    En effet mon tableau est composé d’activités et sous activités et sous sous activités…
    Le code précédent me permet de supprimer les lignes vide ( les valeurs étant insérées à droite dans le tableau suivant un critère précis précisé dans la ligne 1 dans mon vrai tableau)

    En fait je ne sais pas quelle est la marche à suivre pour coder ça :

    Dans le cas où j’ai une valeur qui correspond à une sous sous activités => Ne pas supprimer la sous activité et l’activité d’origine.
    Dans le cas où j’ai une valeur qui correspond à une sous activités => Ne pas supprimer l’activité d’origine.

    Ceci va me permettre de savoir à quelle activité correspond mes ss activités et ss ss activités, pour pouvoir me repérer…
    NB : voir tableau joint

    Merci d'avance
    Fichiers attachés Fichiers attachés

  7. #7
    Invité
    Invité(e)
    Par défaut
    Je ne sais pas si j'ai bien compris mais si c'est le cas vous voulez dire que dans votre exemple seule la ligne 30 qui contient le mot "DIRE" en colonne "A" est à supprimer ?

    Remarque : je dis bien "à supprimer" car dans votre titre vous indiquez "Masquer".

    Alors on ne sait plus trop (en l'occurrence ce n'est pas très grave mais il vaut mieux que le titre reflète le problème) :

    -Masquer dans le titre
    -dans le code d'origine c'est "masquer"
    -dans votre dernier code c'est "supprimer".

    D'autre part à l'origine vous écrivez :

    J'ai un tableau qui commence à partir de la ligne 3 et 5ème colonne
    Or, le fichier que vous donnez en exemple commence en ligne 2 et en colonne 1.
    Dernière modification par Invité ; 14/04/2009 à 20h02. Motif: ajout

  8. #8
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 89
    Points : 22
    Points
    22
    Par défaut
    le tableau que j'ai mis ci-joint n'est qu'un exemple (effectivement il est décalé mais c'est pas grave je veux juste voir la démarche à suivre, je l'adapterai après à mon vrai tableau) ...mon vrai tableau est en réalité plus grand....

    Si j'ai décidé finalement de supprimer les lignes c'est parce que j'insere des ascenseurs par la suite dans mon tableau, et le fait de cacher les lignes crée une confusion au niveau de mon code....

    Je ne sais pas si j'ai bien compris mais si c'est le cas vous voulez dire que dans votre exemple seule la ligne 30 qui contient le mot "DIRE" en colonne "A" est à supprimer ?
    Non, mon Tableau n'est pas complet je vous ai mis ci joint que les colonnes, les valeurs normalement sont insérées à droite de ces colonnes ( ce que je n'ai pas fais dans cet exemple) d'après le tableau ci joint on ne peux pas juger laquelle faudra supprimer ( normalement on devrait supprimer toutes les activités et ss activités et ss ss activités puiskil n y a aucune valeur insérées à droite sur aucune ligne)...
    Le fichier joint est bien un fichier générale...
    Si ce n'est pas clair je suis à votre disposition pour plus d'explications

  9. #9
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    En effet, je comprends mieux maintenant ce qu'il faut faire et cela me paraît même plus simple que prévu.

    Il me reste à apporter quelques modifications et bien sûr à tester et je vous adresse le code.

  10. #10
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 89
    Points : 22
    Points
    22
    Par défaut
    Merci jacques_jean,

    Je suis en train de réfléchir la dessus aussi...

    a toute

  11. #11
    Invité
    Invité(e)
    Par défaut
    Re Azerty1956,

    Délai un peu plus long que prévu. La maîtresse de maison m'a rappelé que le mercredi matin était le jour des courses.

    Essayez ce code :

    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
    Option Explicit
    Sub deleteLigneVide()
     
    Dim i%, c%, pcol%, plgn&
    Dim imax As Integer
    Dim mysheet As Worksheet
     
    'A modifier si la 1ère colonne n'est pas = 1
    pcol = 1
    'A modifier si la 1ère ligne n'est pas = 2
    plgn = 2
    Set mysheet = Sheets("sheet1")
     
    mysheet.Select
    imax = ActiveSheet.UsedRange.Rows.Count
     
        For i = imax To plgn Step -1
        c = Range(Cells(i, 256), Cells(i, 256)).End(xlToLeft).Column
     
            If c = 1 And Cells(i + 1, pcol + 1) = "" And Cells(i + 1, pcol + 2) = "" Then
            Cells(i, 1).EntireRow.Delete
            ElseIf c = 2 And Cells(i + 1, pcol + 2) = "" Then
            Cells(i, 1).EntireRow.Delete
            ElseIf c = 3 Then
            Cells(i, 1).EntireRow.Delete
            End If
        Next i
     
    Set mysheet = Nothing
    End Sub
    Remarque :
    1) j'ai fait des essais mais le meilleur testeur est l'utilisateur.
    2) vous ne pouvez pas utiliser votre ligne de code pour détecter la dernière ligne utile soit :
    imax = mysheet.Range("B65536").End(xlUp).Row
    car on ne peut savoir si cette dernière ligne se trouvera dans la 1ère, la 2ème ou la 3ème colonne.
    3) dans le cas de suppression de ligne il est conseillé de commencer par la dernière. Mais dans votre cas c'est encore plus vrai.
    4) pour adapter à votre tableau, il doit suffire de modifier les variables :
    "pcol" et "plgn".

    Tenez-nous au courant de vos essais en cas de problèmes restants.

  12. #12
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 89
    Points : 22
    Points
    22
    Par défaut
    Merci ca marche

  13. #13
    Invité
    Invité(e)
    Par défaut
    OK, tout va bien.
    J'étais en train de vous répondre.

    Je pense que vous avez vu qu'il fallait garder la valeur de la 1ère colonne du fichier pour la variable "pcol" et non la 4ème.

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

Discussions similaires

  1. [LV2009] Supprimer les lignes vides dans un fichier texte
    Par Super2006 dans le forum LabVIEW
    Réponses: 3
    Dernier message: 11/11/2011, 15h32
  2. Réponses: 10
    Dernier message: 10/10/2008, 14h22
  3. Réponses: 1
    Dernier message: 12/12/2006, 13h00
  4. Réponses: 2
    Dernier message: 04/05/2006, 14h10
  5. supprimer les lignes vides?
    Par VinnieMc dans le forum Langage
    Réponses: 5
    Dernier message: 27/02/2006, 15h01

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