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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 : 44
    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 : 233
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 : 44
    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 !

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