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 :

Suppression de lignes impossible avec xlCellTypeBlanks


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    354
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2003
    Messages : 354
    Par défaut Suppression de lignes impossible avec xlCellTypeBlanks
    Bonjour à tous,
    Je vous explique mon problème.
    Ma macro est censée supprimer les lignes vides pour une mise en page.
    J'utilise régulièrement la fonction .SpecialCells(xlCellTypeBlanks) afin de supprimer les lignes sans passer par une boucle (merci à ouskel'n'or pour m'avoir fait découvir cette fonction ! ).

    Seulement là, j'ai une erreur d'exécution avec le message : "Pas de cellules correspondantes" alors que j'ai des cellules vides !
    De plus lorsque je fais la suppression avec une boucle, tout se passe bien.
    J'ai testé le code mais rien n'y fait, toujours le même problème.

    Le code avec la fonction .SpecialCells(xlCellTypeBlanks):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     With ThisWorkbook.Sheets("Impression").Range("A1:A" & LignePrint)
        .SpecialCells(xlCellTypeBlanks).EntireRow.Delete Shift:=xlUp
     End With
    Le code avec la boucle qui marche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     For i = LignePrint To 1 Step -1
        If Cells(i, 1).Value = "" Then
            Rows(i).Delete
        End If
     Next i
    La variable LignePrint renvoit bien le bon nombre de lignes à tester.
    Toutes les variables sont déclarées .

    Si quelqu'un a une idée... .

  2. #2
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With ThisWorkbook.Sheets("Impression").Range("A1:A" & LignePrint)
        .SpecialCells(xlCellTypeBlanks).EntireRow.Delete Shift:=xlUp
     End With
    Attention : Si tu as des cellules vides dans des lignes renseignées par ailleurs, cette syntaxe les supprime également. A toi de voir.
    Sinon, le code que tu utilises supprime également toutes les lignes dont la cellule de la colonne A est vide même si d'autres cellules de la ligne sont renseignées. Pour être certain que ta ligne est vide tu dois vérifier que 1 est bien la dernière colonne renseignée ou non de ta ligne et qu'elle est vide.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     For i = LignePrint To 1 Step -1
        if Cells(1, 256).SpecialCells(xlCellTypeLastCell).Column = 1 and Cells(i, 1).Value = "" Then
            Rows(i).Delete
        End If
     Next i
    A toutes fins utiles
    Bon après-midi

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    354
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2003
    Messages : 354
    Par défaut
    Pas de soucis là dessus. Il est impossible que les autres colonnes soient remplies si la colonne A est vide.
    Néanmoins, l'erreur est toujours la même ...
    J'ai testé le UsedRange
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim DerniereLigne As Long
    Dim DerniereColonne As Long
    DerniereLigne = ActiveSheet.UsedRange.Rows.Count
    DerniereColonne = ActiveSheet.UsedRange.Columns.Count
    Et ça me retourne bien une zone où il y a des lignes vides...

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    354
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2003
    Messages : 354
    Par défaut
    Bon je progresse, enfin je crois
    Mon test de ligne vides s'effectue dans une selection qui provient d'un copier-coller en valeurs d'un autre onglet.
    Si j'insère des lignes vides (clic droit>insertion) ou que j'appuies sur Suppr pour effacer la cellulle (qui est déjà vide rappelons le ) alors il supprime ces lignes.

    Moi pas comprendre ....

  5. #5
    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
    A quoi correspond LignePrint ?
    ActiveSheet.UsedRange.address donne l'adresse de la plage de données renseignée de ta feuille de calculs
    Worksheets("Feuil1").Range("A1:A25535").SpecialCells(xlCellTypeLastCell).Address te donne exactement la même chose quoi que tu mettes comme N° de ligne dans Range("A1:A" & NoLig)
    Si tu as une plage limitée, alors tu dois définir séparément les N° de lignes et de colonne de cette plage.
    Tu dis

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    354
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2003
    Messages : 354
    Par défaut
    Bon il s'agit bien d'un problème au niveau du copier-coller car si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     For i = LignePrint To 1 Step -1
        If IsEmpty(Cells(i, 1).Value) Then
            Rows(i).Delete
        End If
     Next i
    Il me supprime aucune ligne.

    Donc le copier-coller en valeur, même si la cellule est bien vide, n'est plus considéré ensuite comme vide. Dans d'autres macros ça fonctionne et là non.

    Pour le moment je bascule sur ma boucle de test de valeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     For i = LignePrint To 1 Step -1
        If Cells(i, 1).Value = "" Then
            Rows(i).Delete
        End If
     Next i
    Mais Le mystère reste entier.

  7. #7
    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
    Le constat que tu fais est exact. Il a fait l'objet d'une longue discussion un jour passé. Une cellule renseignée puis "vidée" n'est pas vide (!) Elle contient en fait un ou plusieurs caractères de contrôle invisibles. AlainTech avait fait une démonstration intéressante sur le sujet. Je crois me souvenir qu'il en va de même pour un TextBox.
    Le test avec "" fonctionne dans les deux cas (vide ou = "") tu peux donc l'utiliser.

    Je viens de retrouver l'adresse de la discussion : http://www.developpez.net/forums/d52...ule-convaincu/
    Je m'aperçois que j'en suis à l'origine
    Bonne lecture et commence par la question posée
    A+

    Edit
    L'explication d'AlainTech se trouve ici, le test qu'il propose sur la troisième page de la discussion.

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

Discussions similaires

  1. Suppression de fichier impossible avec unlink
    Par sachaaaz dans le forum Langage
    Réponses: 2
    Dernier message: 17/12/2012, 10h50
  2. Suppression de lignes spécifiques avec sas
    Par boudake dans le forum SAS Base
    Réponses: 2
    Dernier message: 10/08/2011, 11h05
  3. Selection de ligne impossible avec un editeur personnalisé
    Par Ximenjun dans le forum Composants
    Réponses: 5
    Dernier message: 05/05/2010, 09h27
  4. Probléme avec la suppression de ligne dans un tableau
    Par Tintou dans le forum VBA Word
    Réponses: 6
    Dernier message: 20/08/2009, 15h06
  5. suppression impossible avec apt
    Par duplo dans le forum Debian
    Réponses: 11
    Dernier message: 11/02/2008, 15h31

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