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 :

Parcourir une plage de cellules pour récupérer le contenu des cellules non vide [LibreOffice][Tableur]


Sujet :

OpenOffice & LibreOffice

  1. #1
    Membre averti
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Mai 2019
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2019
    Messages : 27
    Par défaut Parcourir une plage de cellules pour récupérer le contenu des cellules non vide
    Bonjour,

    J'utilise LibreOffice 7.1.6.2 sous Windows 10 Pro 21H1.

    Dans une feuille de calcul, je dispose d'une plage de cellules allant de A1 à A24.
    Chaque cellule contient soit une chaine de caractère vide, soit l'adresse d'une plage de cellules comme par exemple $E$201:$J$248.
    Je souhaiterais parcourir la plage A1:A24 de façon à récupérer chacune des adresses.
    Si la cellule est vide, on passe à la cellule suivante sans rien faire.
    Dans le cas contraire, on récupère le contenu de la cellule et on l'ajoute au contenu de la cellule précédente séparé par un point virgule.
    Au final, je récupère une zone comme par exemple $E$201:$J$248;$E$250:$J$299;$E$500:$J$549 que je souhaite définir comme étant ma nouvelle zone d'impression.

    J'ai écrit ce bout de code mais ça ne me donne pas résultat attendu !
    La macro plante sur la ligne : For Each item In ThisComponent.Sheets.GetByName("Feuille1").GetCellRangeByName("$A$1:$A$24")

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Sub definitionZoneImpression
    	Dim item As Object
            ziEncours = ""
            ziTotal = ""
    	For Each item In ThisComponent.Sheets.GetByName("Feuille1").GetCellRangeByName("$A$1:$A$24")
    		If item <> "" Then
                       ziEncours = item
                       ziTotal = ziTotal + ";" + item
    		End If
    	Next item 
    End Sub
    Si quelqu'un peut me mettre sur la voie.
    Je l'en remercie d'avance.

    Fanolito
    Fichiers attachés Fichiers attachés

  2. #2
    Membre chevronné Avatar de Mobydick_62
    Homme Profil pro
    Retraité
    Inscrit en
    Septembre 2009
    Messages
    269
    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 : 269
    Par défaut Parcourir une plage de cellules pour récupérer le contenu des cellules non vide
    Bonjour,

    Le document que tu as joint ne contient pas ta macro.
    J'en ai donc écrit une autre d'une manière différente.
    On récupère correctement dans la variable ziTotal la liste complète des cellules non vides séparées par un point-virgule.

    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
     Sub definitionZoneImpression()
      Dim oFeuille As Object, oCell As Object 
      Dim oZone As Object, oListeCell As Object, oSelectionCell As Object
      Dim oEnumCellules As Object
      Dim ziEncours As String, ziTotal As String 
     
      oFeuille = ThisComponent.Sheets.GetByName("Feuille1")
      oZone = oFeuille.getCellRangeByName("A1:A24")
      oSelectionCell = oZone.queryContentCells(com.sun.star.sheet.CellFlags.STRING)
      oEnumCellules = oSelectionCell.Cells
      oListeCell = oEnumCellules.createEnumeration
      Do While oListeCell.hasMoreElements
       oCell = oListeCell.nextElement
       ziEncours = oCell.String 
       If ziTotal = "" Then 'Pour éviter d'avoir un point virgule en début de variable
        ziTotal = ziEncours
       Else  
        ziTotal = ziTotal & ";" + ziEncours
       End If 
      Loop
       Print ziTotal
     End Sub
    Cordialement

  3. #3
    Membre averti
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Mai 2019
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2019
    Messages : 27
    Par défaut
    Bonjour Mobydick_62,

    Merci pour ce retour plus que rapide.
    J'ai testé ton code, ça fonctionne parfaitement.

    As-tu une idée pour faire en sorte que le résultat de ziTotal soit défini en tant que zone d'impression ?

    Bien sincèrement.
    Fanolito

  4. #4
    Membre chevronné Avatar de Mobydick_62
    Homme Profil pro
    Retraité
    Inscrit en
    Septembre 2009
    Messages
    269
    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 : 269
    Par défaut Parcourir une plage de cellules pour récupérer le contenu des cellules non vide
    Re,

    Oui mais là, le code est différent. On ne peut pas d'un coup envoyer la variable ziTotal même séparée par des virgules. Il faut définir les zones d'impression une a une. Donc il faut passer par un tableau de zone et boucler dessus.
    Ci dessous le nouveau code.

    Cordialement

    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
    32
    33
    34
    35
    36
    37
     Sub definitionZoneImpression()
      Dim oFeuille As Object, oCell As Object 
      Dim oZone As Object, oListeCell As Object, oSelectionCell As Object
      Dim oEnumCellules As Object, oZoneImp As Object 
      Dim ziEncours As String
      Dim nbreZone As Integer 
     
      Dim f As Integer, x As Integer 
      Dim tabZone() As String
     
      oFeuille = ThisComponent.Sheets.GetByName("Feuille1")
      oZone = oFeuille.getCellRangeByName("A1:A24")
      oSelectionCell = oZone.queryContentCells(com.sun.star.sheet.CellFlags.STRING)
      oEnumCellules = oSelectionCell.Cells
      oListeCell = oEnumCellules.createEnumeration
      Do While oListeCell.hasMoreElements
       oCell = oListeCell.nextElement
       ziEncours = oCell.String 
       'Création d'un tableau contenant toutes les zones
       Redim preserve tabZone(f)
        tabZone(f) = ziEncours
        f=f+1
      Loop
      'Je définie la taille du tableau d'impression (f-1 car on commence par le chiffre 0)
      nbreZone = f-1
     
      Dim Props() As New com.sun.star.beans.PropertyValue
      Dim adrZones(nbreZone) As New com.sun.star.table.CellRangeAddress 
     
      'Je parcours le tableau des zones et définie les zones d'impression une a une 
      For x = LBound(tabZone()) to Ubound(tabZone())
       oZoneImp = oFeuille.getCellRangeByName(tabZone(x))
       adrZones(x) = oZoneImp.RangeAddress
      Next x
      'Définition de toutes les zones dans Calc
      oFeuille.PrintAreas = adrZones()
     End Sub

  5. #5
    Membre averti
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Mai 2019
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2019
    Messages : 27
    Par défaut
    Merci beaucoup Mobydick_62, ça fonctionne super bien.
    Je vais étudier ton code pour en comprendre toutes les subtilités.

    Bien sincèrement,
    Fanolito.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 19/03/2019, 19h16
  2. [XL-2010] Selection d'une plage de cellules non vide
    Par jawed dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 17/03/2018, 19h16
  3. Réponses: 1
    Dernier message: 27/03/2014, 08h06
  4. Parcourir une plage de cellules
    Par youbewt dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 17/11/2013, 21h03
  5. [VBA] Parcourir une plage de cellule
    Par Dinytro dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 23/09/2005, 08h18

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