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-E] cellules vide sur une ligne


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 20
    Par défaut [VBA-E] cellules vide sur une ligne
    bonjour,
    je souhaite contrôler sur plusieurs ligne (une à la fois) les lignes qui sont vides pour les supprimer par la suite.
    ce contrôle devrait se faire à partir d'un colonne que j'indique.

    est-il possible de faire un contrôle sur plusieurs cellules à la fois ?
    merci

  2. #2
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    Fais une boucle For Each sur les cellules de la colonne et supprime la ligne correspondante si la cellule est vide.

    Et pense au tag dans le titre, STP.
    J'ai pas envie de le faire à chaque fois derrière toi.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  3. #3
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 20
    Par défaut
    oui, mais l'idée n'est pas de supprimer la ligne dès qu'il a une cellule vide, mais c'est de la supprimer si toutes les cellules d'une ligne entre deux colonnes sont vides....

    désolé pour le tag, je le ferais la fois prochaine

  4. #4
    Expert confirmé Avatar de illight
    Homme Profil pro
    Analyste décisionnel
    Inscrit en
    Septembre 2005
    Messages
    2 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 344
    Par défaut
    Tu reprend l'idée de AlainTech, en faisant un each comme il a dit sur les cellules de ta colonne

    Essaye de faire un bout de code et on t'aidera si tu coinces
    1. Avant de poster, et http://www.developpez.com/sources/
    2. Lors du post, n'oubliez pas, si besoin les balises CODE => voir ici pour l'utilisation
    3. N'oubliez pas le
    4. N'oubliez pas le si la réponse vous a été utile !

  5. #5
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    Fais une double boucle For Each.
    La première parcourt la colonne et la deuxième parcourt la ligne courante.

    Ou, sur chaque cellule vide, faire un .End(xlToRight).Column et comparer avec ta butée.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  6. #6
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 20
    Par défaut
    en fait ce que j'avais fait avant c'est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    For Ligne = 20 To lastline
    For col = firstcol To duringweekcol
        If Range(col, Ligne) = "" And Range(col + 1, Ligne) = "" Then
            Rows(Ligne).Delete
     
            End If
        Next
    Next
    maintenant je ne sais pas comment faire avec le for each... je dois définir le groupe mais je ne vois pas comment

    J'ai lu quelque par que "la prochaî,e fois" tu penserais au tag... Faut aussi penser aux palises Code : Sélection du code, clic bouton Nom : code.gif
Affichages : 230
Taille : 194 octets (ajoutés par ouskel'n'or)

  7. #7
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 20
    Par défaut
    plus personne pour m'éclairer ?

  8. #8
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    Et bien, avec ma grande gueule, j'aurais mieux fait de me taire.

    Alors que je suis un grand partisan des boucles For Each dès qu'on a à travailler sur des objets, je viens de tomber sur un os.

    Je m'explique:

    Nous cherchons donc à supprimer des lignes.
    Fidèle à mon principe, je fais une boucle For Each.
    Apparemment, elle fonctionne bien mais je constate un défaut. Si 2 lignes à supprimer se suivent, seule la première l'est.
    Explication:
    Imaginons que nous soyons sur [A2] et nous supprimons la ligne.
    Toutes les cellules remontent d'une ligne.
    Nous sommes toujours sur [A2] dons la ligne est vide également.
    Et nous passons à l'objet suivant qui est [A3].
    Nous avons donc sauté une ligne.

    J'ai alors ajouté une boucle While pour rester sur la même ligne tant quelle est vide.
    Je me suis retrouvé avec une erreur "Objet requis".
    Logique. Pour ceux que ça intéresse, je leur laisse chercher le pourquoi.

    J'ai donc travaillé sur la ligne suivante (ce qui me permet de ne pas supprimer mon objet courant).

    Et là, je tombe sur une boucle sans fin quand j'arrive en bout de range.

    Bref j'en conclus qu'il ne faut pas utiliser de boucle For Each pour faire de la suppression de lignes.

    Je vous livre quand même mon dernier code (qui ne fonctionne pas) pour ceux qui sont curieux de suivre ma démarche.

    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 test()
      Dim bEmpty As Boolean
      Dim rCol As Range
      Dim rLine As Range
      Dim rCellCol As Range
      Dim rCellRow As Range
      Dim iLastLine
      Dim iLastCol
      iLastLine = 50
      iLastCol = 30
      Set rCol = Range([A1], Cells(iLastLine, 1))
      For Each rCellCol In rCol
        bEmpty = True
        While bEmpty
          Set rLine = Range(rCellCol.Offset(1, 0), rCellCol.Offset(1, iLastCol))
          For Each rCellRow In rLine
            If Not IsEmpty(rCellRow) Then
              bEmpty = False
              Exit For
            End If
          Next rCellRow
          If bEmpty Then
            rCellCol.Offset(1, 0).EntireRow.Delete
          End If
        Wend
      Next rCellCol
    End Sub
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  9. #9
    Expert confirmé Avatar de illight
    Homme Profil pro
    Analyste décisionnel
    Inscrit en
    Septembre 2005
    Messages
    2 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 344
    Par défaut
    A ce moment la, le mieux serait alors d'utiliseru ne double boucle, une qui parcourt la ligne, et une autre les colonnes, et qui regarde si sur chaque colonne de la ligne c'est vide ou pas

    Je regarderai ça cet après midi
    1. Avant de poster, et http://www.developpez.com/sources/
    2. Lors du post, n'oubliez pas, si besoin les balises CODE => voir ici pour l'utilisation
    3. N'oubliez pas le
    4. N'oubliez pas le si la réponse vous a été utile !

  10. #10
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    bbil a eu une idée géniale à laquelle je n'ai pas pensé.
    Voir là:
    http://www.developpez.net/forums/sho...95#post1044595
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  11. #11
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Par défaut
    bonjour à tous

    ci joint une autre possibilité

    boucler de la derniere à la 1ere ligne et utiliser la fonction CountA pour verifier si la ligne est vide
    (pour remplacer 100 par la derniere ligne non vide de ton tableau , cela dépendra de sa structure)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub supprimerLignesVide()
    Dim i As Integer
     
    Application.ScreenUpdating = False
     
    'boucle sur les lignes 100 à 1
    For i = 100 To 1 Step -1
        'supprimer ligne vide
        If Application.WorksheetFunction.CountA(Rows(i)) = 0 _
        Then Rows(i).Delete
    Next i
     
    Application.ScreenUpdating = True
    End Sub


    bon week end
    michel

  12. #12
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Pour avoir la toute dernière ligne de données, tu peux utiliser

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        DernièreLigne = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row
    ... qui inclut les lignes vides
    Code dont je ne peux plus me passer depuis qu'AlainTech nous l'a donné

    Juste pour mettre mon grain de sel

    Salut Silky

  13. #13
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 20
    Par défaut
    merci je vais essayer les deux possibilité,
    mais juste pour comprendre que signifie dans l'idée de bbil :
    merci

  14. #14
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Hors du contexte, va être dur de te répondre... Croise les doigts pour que bbil passe par là

  15. #15
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    r.Cells(4) .. corresponds à la colonne D... bon le contexte c'est la :
    http://www.developpez.net/forums/sho...95#post1044595

Discussions similaires

  1. [XL-2007] compter les cellules non vides sur une ligne
    Par tyndare36 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 24/02/2014, 11h30
  2. [Toutes versions] Supprimer cellules vides d'une ligne
    Par zib33 dans le forum Excel
    Réponses: 4
    Dernier message: 09/08/2013, 16h48
  3. [XL-2007] Sélectionner la première cellule vide sur une ligne.
    Par Rémy A. dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 23/07/2013, 14h22
  4. [XL-2000] Détection d'une cellule vide dans une ligne.
    Par babou41287 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 12/04/2012, 15h40
  5. recherche de la 1ère cellule vide dans une ligne
    Par ericberg dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 26/10/2010, 20h53

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