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

OpenOffice & LibreOffice Discussion :

Supprimer les lignes avec cellules vides [LibreOffice][Tableur]


Sujet :

OpenOffice & LibreOffice

  1. #1
    Membre du Club
    Homme Profil pro
    call center
    Inscrit en
    Janvier 2014
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : call center
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2014
    Messages : 209
    Points : 68
    Points
    68
    Par défaut Supprimer les lignes avec cellules vides
    Bonjour à tous,
    je cherche à automatiser la suppression des lignes vides ou des lignes contenant des cellules vides ou des lignes contenant une occurence spécifique (dans mon cas "N/A").
    J'ai trouvé un début de piste avec ce site:
    https://www.excelformation.fr/suppri...ide-excel.html
    mais je ne trouve pas dans le menu déroulant "selectionner cellules vides"...
    Sur quelles bases puis-je commencer ce projet?
    Visual basic forcément?
    Merci à vous

    [EDIT]
    J'ai trouvé une piste avec "Style"...
    Je crée un style (cellule fond rouge) qui s'applique dans le cadre d'une mise en forme conditionnelle.
    Me reste à appliquer une macro qui supprime les lignes contenant une cellule avec fond rouge...
    Je cherche pour l'instant à activer l'enregistremen,t de macro sur mon Calc...
    [EDIT 2]
    J'ai réussi à activer l'enregistrement macro.
    je cherche la macro qui va bien...


    Libre Office 7.5.2.2

  2. #2
    Membre averti Avatar de Mobydick_62
    Homme Profil pro
    Retraité
    Inscrit en
    Septembre 2009
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2009
    Messages : 261
    Points : 388
    Points
    388
    Par défaut Supprimer les lignes avec cellules vides
    Bonjour,

    Tout d'abord, et pour l'avenir pense à joindre un document sur lequel on peut travailler cela nous évitera d'en créer un afin d'y mettre la macro et faire les essais.

    Et aussi tu dit :
    Par où dois-je commencer. Visual basic forcément?
    Saches que Visual Basic est un langage de la suite Microsoft. Le langage des suites OpenOffice ou LibreOffice est BASIC. C'est différent.

    Un exemple en pièce jointe ici : Suppression lignes.ods

    Et 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
    25
    26
    27
    28
    29
    30
    31
     Sub SuppressionLigne()
      Dim oDoc As Object,  oFeuille As Object, oCell As Object 
      Dim ligneDebut As Integer, ligneFin As Integer 
      Dim colonneDebut As Integer, colonneFin As Integer 
      Dim cptCol As Integer, cptLigne As Integer
      Dim sZoneAExplorer As String 
      Dim t() As Variant 
     
      'Je définie la couleur à rechercher. Ici c'est le rouge
      ChercheCouleur = 16711680
     
      sZoneAExplorer = "A1:H11"
     
      oDoc = Thiscomponent
      oFeuille = oDoc.getSheets.getByName("Feuille1") 
      t = split(sZoneAExplorer, ":")
      oCell = oFeuille.getCellRangeByName(t(0))
      colonneDebut = oCell.getCellAddress.column
      ligneDebut = oCell.getCellAddress.row
      oCell = oFeuille.getCellRangeByName(t(1))
      colonneFin = oCell.getCellAddress.column
      ligneFin = oCell.getCellAddress.row
     
      'Je parcours la zone à explorer	
      For cptCol = colonneDebut To colonneFin
       For cptLigne = ligneDebut To ligneFin
    	oCell = oFeuille.getCellByPosition(cptCol, cptLigne)
        If (oCell.CellBackColor = ChercheCouleur) Then oFeuille.Rows.RemoveByIndex(cptLigne,1)
       Next cptLigne
      Next cptCol
     End Sub
    Cordialement
    Fichiers attachés Fichiers attachés

  3. #3
    Membre du Club
    Homme Profil pro
    call center
    Inscrit en
    Janvier 2014
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : call center
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2014
    Messages : 209
    Points : 68
    Points
    68
    Par défaut
    Bonsoir Mobydick,
    Merci pour tes recommendations que j'appliquerai et pour ta solution.
    Elle fonctionne parfaitement avec les cellules auxquelles j'attribue un fond rouge mais pas si c'est le format conditionnel qui les impose.
    Mon fichier:
    test_vide.ods
    Et merci pour l'info Basic et non VBA...

    [Edit]
    Bien que novice en Basic, je me suis appliqué à décrypter ton code car je ne comprenais pas tout.
    Je pense que c’est capté.
    Un peu plus de mal avec la fin mais je vais mettre des message box pour interrompre le déroulement et voir les étapes.
    Bien qu’il existe une exécution pas à pas de mémoire (je ne suis pas devant mon ordi…)

    Je suis parti sur la base d’une reconnaissance des cellules vides via une colorisation de ces dernières par le format conditionnel.
    Je reste preneur d’une solution plus «*élégante*» s’il y a…

    D’autre y part, je devrais complexifier mon programme en supprimant les doublons sur 2 critères de comparaison (nom et numéro de sécurité social) ainsi qu’en supprimant les cellules comprenant des erreurs N/A.
    J’intègrerais mon fichier exemple plus tard.

  4. #4
    Membre averti Avatar de Mobydick_62
    Homme Profil pro
    Retraité
    Inscrit en
    Septembre 2009
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2009
    Messages : 261
    Points : 388
    Points
    388
    Par défaut Supprimer les lignes avec cellules vides
    Bonjour,

    Elle fonctionne parfaitement avec les cellules auxquelles j'attribue un fond rouge mais pas si c'est le format conditionnel qui les impose.
    Effectivement cela ne fonctionne avec les cellules colorées par format conditionnel. Elles sont considérées comme n'ayant pas de fond.

    Bien qu’il existe une exécution pas à pas de mémoire (je ne suis pas devant mon ordi…)
    Effectivement. Si tu veux comprendre le déroulement d'une macro il est préférable d'utiliser le mode "Pas à pas" de l"EDI. Si en plus tu es en double écran, d'un côté ton tableau et de l'autre l'EDI c'est super.

    Je suis parti sur la base d’une reconnaissance des cellules vides
    On peut très bien supprimer les lignes avec des cellules vides sans passer par cette histoire de colorisation.

    D’autre y part, je devrais complexifier mon programme en supprimant les doublons sur 2 critères de comparaison (nom et numéro de sécurité social) ainsi qu’en supprimant les cellules comprenant des erreurs N/A.
    Là aussi c'est possible. Mais il faut que tu joignes un fichier exemple avec des données bidons qui contiennent des doublons, des N/A et cellules vides. Cela nous évitera de créer un fichier qui de toute façon ne ressemblera pas à la structure du tien.

    Cordialement

  5. #5
    Membre du Club
    Homme Profil pro
    call center
    Inscrit en
    Janvier 2014
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : call center
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2014
    Messages : 209
    Points : 68
    Points
    68
    Par défaut
    Bonsoir Mobydick,

    Merci pour ta réponse.

    Voici donc le fichier évoqué en pièce jointe:

    Fichier_macro.ods



    Idéalement, il faudrait que je puisse travailler sur la plage suivante (colA lign1: colC Dernière ligne contenant des informations, ici ligne 12)

  6. #6
    Membre averti Avatar de Mobydick_62
    Homme Profil pro
    Retraité
    Inscrit en
    Septembre 2009
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2009
    Messages : 261
    Points : 388
    Points
    388
    Par défaut
    Bonsoir,

    En pièce jointe une nouvelle approche.

    Fichier_macro_1.ods

    Cordialement

  7. #7
    Membre du Club
    Homme Profil pro
    call center
    Inscrit en
    Janvier 2014
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : call center
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2014
    Messages : 209
    Points : 68
    Points
    68
    Par défaut
    Bonjour Mobydick,
    Merci pour ton code!
    De mon côté je progressais mais j'étais encore loin de la solution.
    Je dois étudier ton code pour comprendre au mieux le sens des fonctions car je suis novice et je dois m'y mettre.*De mes premiers test, il semble parfaitement prendre en compte les critères de suppression toutefois, il ne semble pas tenir compte de la dernière anomalie.
    Par exemple, dans le fichier que je t'ai joint il devrait supprimer la ligne 19 qui comprends des cellules vides. Il ne le fait pas.
    De même en duplicant la plage A1:C12 en A13, il ne supprime pas la lgne 24 qui est le doublon de la ligne 12.
    Je vais tâcher de trouver comment corriger cela. Probablement une incrémentation je suppose?

    Dans tous les cas, c'est très sympa de l'avoir rédigé!

  8. #8
    Membre averti Avatar de Mobydick_62
    Homme Profil pro
    Retraité
    Inscrit en
    Septembre 2009
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2009
    Messages : 261
    Points : 388
    Points
    388
    Par défaut Supprimer les lignes avec cellules vides
    Bonsoir,

    Par exemple, dans le fichier que je t'ai joint il devrait supprimer la ligne 19 qui comprends des cellules vides. Il ne le fait pas.
    C'est normal. Au vu de ton fichier j'ai considéré que la colonne A était la colonne de référence Donc ma fonction retourne la dernière cellule de cette colonne. En l’occurrence ligne 12. Puisque qu'en dessous c'était des lignes de commentaires pour m'expliquer ta problématique.
    Il y a plusieurs manière de trouver la dernière ligne (soit d'une colonne de référence, soit d'une zone entière, ou la feuille complète). Tu as transmis un fichier exemple qui ne correspond pas à la structure de ton vrai fichier et sur quelle base ont doit considérer la dernière ligne à rechercher. Dans le code ci-dessous, la fonction renvoie la dernière ligne remplie de la feuille en l’occurrence la ligne 19.

    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
    Sub Main
    Dim oDoc As Object,  oFeuille As Object
    Dim sFeuille As String 
    Dim lig As Integer 
    oDoc = Thiscomponent
    oFeuille = oDoc.getSheets.getByName("Feuille1")   
    sFeuille = oFeuille.Name 
     
    lig = NbreEnregistrement(oDoc, sFeuille)
    MsgBox ("La dernière ligne remplie de la feuille est : " & lig, 64, INFO)
    End Sub
     
     
     '___________________________________________________________________________________
     'Retourne la dernière ligne remplie sur la feuille entière passée en paramètre 
     Function NbreEnregistrement (oDoc As Object, oFeuille As Object) As Long
      Dim oCurseur As Object
      oCurseur = oDoc.getSheets.getByName(oFeuille.Name).createCursor
      oCurseur.gotoEndOfUsedArea( False )
      NbreEnregistrement =  oCurseur.RangeAddress.EndRow+1
     End Function
    De même en duplicant la plage A1:C12 en A13, il ne supprime pas la lgne 24 qui est le doublon de la ligne 12.
    Je vais tâcher de trouver comment corriger cela. Probablement une incrémentation je suppose?
    Oui certainement un problème d'incrémentation. Faut que j'y jette un œil.

    Cordialement

  9. #9
    Membre averti Avatar de Mobydick_62
    Homme Profil pro
    Retraité
    Inscrit en
    Septembre 2009
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2009
    Messages : 261
    Points : 388
    Points
    388
    Par défaut Supprimer les lignes avec cellules vides
    Bonsoir,

    Voir pièce jointe

    Fichier_macro_1.ods

    Cordialement

  10. #10
    Membre du Club
    Homme Profil pro
    call center
    Inscrit en
    Janvier 2014
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : call center
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2014
    Messages : 209
    Points : 68
    Points
    68
    Par défaut
    Bonjour Mobydick,
    Merci d'avoir fait le taf.
    C'est très sympa comme scénario.
    Je l'étudie pour ma culture personnelle...

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 12/09/2017, 13h26
  2. Supprimer une ligne si cellule vide ou = 0 dans une plage variable
    Par nico157 dans le forum Macros et VBA Excel
    Réponses: 17
    Dernier message: 06/01/2016, 16h09
  3. Suppression de toutes les lignes avec cellule vide en colonne A
    Par Cyclemmanuel dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/05/2012, 19h43
  4. [XL-2007] Macro pour masquer les colonnes avec cellules vides
    Par Cirrus22 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 20/12/2009, 19h50

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