[Résolu][Calc] Si vide décaler vers le bas de colonne A à B

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur: Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !

[Résolu][Calc] Si vide décaler vers le bas de colonne A à B

Messagepar alex85 » 09 Nov 2019 11:37

Bonjour,

J'ai un petit souci, étant novice, j'ai besoin de votre aide.

Sur une feuille calc avec 2 colonnes, est il possible de décaler vers le bas chaque cellules vides de la col B jusqu'à la première cellule pleine de la col A, afin d'avoir des colonnes plus ordonnées.

Merci.
Pièces jointes
open 2.ods
(11.88 Kio) Téléchargé 8 fois
Dernière édition par Bidouille le 10 Nov 2019 11:46, édité 2 fois.
Raison: Balisage
LibO 6.3.3 sous windows 10
alex85
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 19
Inscrit le : 05 Nov 2019 14:15

Re: [Calc ] Si cellules Col. B vide décaler vers le bas à Co

Messagepar luky-luke » 09 Nov 2019 14:54

Bonjour
Une solution à tester.
Code : Tout sélectionner   AgrandirRéduire
Option Explicit
Sub Main
Dim Feuille As Object, MaZoneA As Object, MaZoneB As Object
Dim ZonesVideA As Object, ZonesVideB As Object
Dim CDepartA As Object, CDepartB As Object, CArrivA As Object, CArrivB As Object
Dim i As Long

Feuille = ThisComponent.Sheets.GetByName("Feuille1_2")
MaZoneA = Feuille.GetCellRangeByName("A1:A100")
MaZoneB = Feuille.GetCellRangeByName("B1:B100")

ZonesVideA = MaZoneA.QueryEmptyCells.RangeAddresses
ZonesVideB = MaZoneB.QueryEmptyCells.RangeAddresses
   For i = 0 To Ubound(ZonesVideA)-1
      
      If ZonesVideA(i).StartRow < ZonesVideB(i).StartRow Then         
         CDepartA = Feuille.GetCellRangeByPosition(0,ZonesVideA(i).StartRow,0,ZonesVideA(Ubound(ZonesVideA)).EndRow)
         CArrivA = Feuille.GetCellByPosition(0,ZonesVideB(i).EndRow)
         Feuille.MoveRange(CArrivA.CellAddress,CDepartA.RangeAddress)
         ZonesVideA = MaZoneA.QueryEmptyCells.RangeAddresses
      End if

      If ZonesVideB(i).StartRow < ZonesVideA(i).StartRow Then
         CDepartB = Feuille.GetCellRangeByPosition(1,ZonesVideB(i).StartRow,1,ZonesVideB(Ubound(ZonesVideB)).EndRow)
         CArrivB = Feuille.GetCellByPosition(1,ZonesVideA(i).EndRow)
         Feuille.MoveRange(CArrivB.CellAddress,CDepartB.RangeAddress)
         ZonesVideB = MaZoneB.QueryEmptyCells.RangeAddresses
      End if                  
   Next i
End Sub

Cette macro fonctionnera correctement si et uniquement si Le nombre de plages de cellules vides dans la colonne A est identique au nombre de plages de cellules vides dans la colonne B.
Cordialement
Luke
AOO 4.1.3 et LibO 5.3.7.2 Ubuntu 16.04 LTS et Debian 9
Xray ne tient pas lieu de tout, mais une pratique sans Xray ne vaut pas grand chose
Avatar de l’utilisateur
luky-luke
InconditiOOnnel
InconditiOOnnel
 
Message(s) : 914
Inscrit le : 27 Nov 2010 01:17
Localisation : gâtine deux-sèvrienne

Re: [Calc ] Si cellules Col. B vide décaler vers le bas à Co

Messagepar alex85 » 09 Nov 2019 15:03

bonjour, lucky-luke

merci de ton aide, mais je ne peux pas l'essayer, ça ne fonctionne pas
"Erreur d'exécution BASIC.
Une exception s'est produite :
Type: com.sun.star.container.NoSuchElementException
Message: ."

"Notre seul pouvoir véritable consiste à aider autrui".
LibO 6.3.3 sous windows 10
alex85
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 19
Inscrit le : 05 Nov 2019 14:15

Re: [Calc ] Si cellules Col. B vide décaler vers le bas à Co

Messagepar luky-luke » 09 Nov 2019 15:19

Bonjour
J'ai oublié de préciser qu'il faut adapter dans la macro le nom de la feuille et les plages de cellules concernées.
Feuille = ThisComponent.Sheets.GetByName("Feuille1_2")
MaZoneA = Feuille.GetCellRangeByName("A1:A100")
MaZoneB = Feuille.GetCellRangeByName("B1:B100")

Cordialement
Luke
Pièces jointes
open 3.ods
(14.61 Kio) Téléchargé 3 fois
Dernière édition par luky-luke le 09 Nov 2019 15:40, édité 1 fois.
AOO 4.1.3 et LibO 5.3.7.2 Ubuntu 16.04 LTS et Debian 9
Xray ne tient pas lieu de tout, mais une pratique sans Xray ne vaut pas grand chose
Avatar de l’utilisateur
luky-luke
InconditiOOnnel
InconditiOOnnel
 
Message(s) : 914
Inscrit le : 27 Nov 2010 01:17
Localisation : gâtine deux-sèvrienne

Re: [Résolu] Si cellules Col. B vide décaler vers le bas à C

Messagepar alex85 » 09 Nov 2019 15:35

c top pou moi c résolu merci lucky

"Le don de soi est ce qu’on peut offrir de plus grand".
LibO 6.3.3 sous windows 10
alex85
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 19
Inscrit le : 05 Nov 2019 14:15

Re: [Calc ] Si cellules Col. B vide décaler vers le bas à Co

Messagepar luky-luke » 09 Nov 2019 15:45

Re
alex85 a écrit:"Le don de soi est ce qu’on peut offrir de plus grand".

Je vais prendre le temps de réfléchir à ça . En même temps ce n'est qu'un forum :lol:
Ah oui Luky c'est sans C Et la balise [Résolu] Image c'est dans le premier message du fil....mince alors !
Luky Luke
Dernière édition par luky-luke le 09 Nov 2019 15:50, édité 1 fois.
AOO 4.1.3 et LibO 5.3.7.2 Ubuntu 16.04 LTS et Debian 9
Xray ne tient pas lieu de tout, mais une pratique sans Xray ne vaut pas grand chose
Avatar de l’utilisateur
luky-luke
InconditiOOnnel
InconditiOOnnel
 
Message(s) : 914
Inscrit le : 27 Nov 2010 01:17
Localisation : gâtine deux-sèvrienne

Re:[Résolu] Si cellules Col. B vide décaler vers le bas à Co

Messagepar alex85 » 09 Nov 2019 15:48

merci
"Personne ne se lasse d’être aidé. L’aide est un acte conforme à la nature. Ne te lasse jamais d’en recevoir, ni d’en apporter"
LibO 6.3.3 sous windows 10
alex85
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 19
Inscrit le : 05 Nov 2019 14:15

Re: [Calc ] Si cellules Col. B vide décaler vers le bas à Co

Messagepar Beetle » 09 Nov 2019 16:11

Bonjour,
Comme vous l'a déjà mentionné luky-luke, un intervenant actif de ce forum, veuillez baliser correctement votre fil en plaçant la coche verte, et la mention [Résolu] sur votre premier message.
De plus, modifiez aussi la balise: [Calc] et non [Calc ] , avec une espace excédentaire.
Cordialement,
Avatar de l’utilisateur
Beetle
MOOdérateur
MOOdérateur
 
Message(s) : 5
Inscrit le : 23 Mars 2018 23:42

Re: [Calc ] Si cellules Col. B vide décaler vers le bas à Co

Messagepar joel275 » 09 Nov 2019 16:42

Bonjour,

Damned! Encore trop tard!
mais
luky-luke a écrit:Cette macro fonctionnera correctement si et uniquement si Le nombre de plages de cellules vides dans la colonne A est identique au nombre de plages de cellules vides dans la colonne B.


l'exemple suivant doit fonctionner sans cette limitation.
Code : Tout sélectionner   AgrandirRéduire
Sub Main
Rem Récupère les données
   feuille = Thiscomponent.CurrentController.ActiveSheet
   dataA = feuille.getCellRangeByPosition (0,0,0,1000).DataArray
   dataB = feuille.getCellRangeByPosition (1,0,1,1000).DataArray
Rem Découpe les données
   paquetA = Decoupe(dataA)
   paquetB = Decoupe(dataB)
Rem On remet les morceaux à leur place
   n = iif(Ubound(paquetA) > Ubound(paquetB),Ubound(paquetA),Ubound(paquetB))
   for i = 0 to n
      if i > Ubound(paquetA) then Aimax = -1 Else Aimax = Ubound(paquetA(i))
      if i > Ubound(paquetB) then Bimax = -1 Else Bimax = Ubound(paquetB(i))
      for j = 0 to iif(Aimax > Bimax, Aimax, Bimax)
         cellA = feuille.getCellByPosition(4, li)
         cellB = feuille.getCellByPosition(5, li)
         if j < Aimax Then cellA.value = paquetA(i)(j)
         if j < Bimax Then cellB.value = paquetB(i)(j)
         li = li + 1
      next   
   next
End Sub

Function Decoupe(donnees as Variant) as Variant
dim VF as boolean
   VF = True
   for i = 0 to 1000
      if donnees(i)(0) = "" And VF = False Then A = A & "$": VF = True
      if donnees(i)(0) <> "" then A = A & donnees(i)(0) & "#": VF = False
   next
   U = split(A, "$")
   dim V(UBound(U))
   for i = 0 to UBound(U)
      V(i) = split(U(i), "#")   
   next
   Decoupe = V
End Function

A plus.
 Ajout : même jour à 21 h: correction grâce à l'aimable signalement de luky-luke 
Dernière édition par joel275 le 09 Nov 2019 20:56, édité 2 fois.
OpenOffice 4.1.2 LibreOffice 6-2-8-2 Windows 8.1
joel275
PassiOOnné
PassiOOnné
 
Message(s) : 742
Inscrit le : 10 Jan 2009 09:05

[Résolu][Calc]cellules Col. B vide décaler vers le bas à Col

Messagepar alex85 » 09 Nov 2019 17:07

Merci pour votre aide Joel, Luky ainsi qu" a toutes et à tous qui apportent leurs aides sur ce forum ou partout ailleurs.

"Obéissez à la voix intérieure, elle nous commande de donner de nous-mêmes et d’aider les autres. Tant que nous avons la capacité de donner, nous sommes vivants"

"Celui qui consacre ses facultés mentales, son temps, ses forces, à venir en aide à son prochain, est le plus intelligent. Car la véritable intelligence, c’est de s’oublier pour se mettre au service des autres." :bravo:
LibO 6.3.3 sous windows 10
alex85
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 19
Inscrit le : 05 Nov 2019 14:15

Re: [Calc ] Si cellules Col. B vide décaler vers le bas à Co

Messagepar luky-luke » 09 Nov 2019 19:00

Re
Re
La fonction MAX ne peut pas être directement utilisé en macro
Code : Tout sélectionner   AgrandirRéduire
Rem On remet les morceaux à leur place
   n = max(Ubound(paquetA), Ubound(paquetB))

Il faut utiliser le service UNO qui va bien
Code : Tout sélectionner   AgrandirRéduire
    Args() = Array(Ubound(paquetA), Ubound(paquetB))
    FuncAcces = CreateUnoService("com.sun.star.sheet.FunctionAccess")
    n = FuncAcces.CallFunction("MAX",Args())

Cordialement
Luke
AOO 4.1.3 et LibO 5.3.7.2 Ubuntu 16.04 LTS et Debian 9
Xray ne tient pas lieu de tout, mais une pratique sans Xray ne vaut pas grand chose
Avatar de l’utilisateur
luky-luke
InconditiOOnnel
InconditiOOnnel
 
Message(s) : 914
Inscrit le : 27 Nov 2010 01:17
Localisation : gâtine deux-sèvrienne

Re: [Résolu][Calc] Si vide décaler vers le bas à Col A

Messagepar joel275 » 09 Nov 2019 20:29

Re,

luky-luke a écrit:La fonction MAX ne peut pas être directement utilisé en macro


merci pour cette précision: je corrige dans mon message.
J'avais programmé cette fonction max quelque part dans "Mes macros" et l'y avais oublié: mille excuses! :oops:

A plus.
OpenOffice 4.1.2 LibreOffice 6-2-8-2 Windows 8.1
joel275
PassiOOnné
PassiOOnné
 
Message(s) : 742
Inscrit le : 10 Jan 2009 09:05


Retour vers Macros et API

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 6 invité(s)