[Résolu][Calc] Si vide décaler vers le bas de colonne A à B
Modérateur : Vilains modOOs
Règles du forum
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 !
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
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.
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é 91 fois
Dernière modification par Bidouille le 10 nov. 2019 11:46, modifié 2 fois.
Raison : Balisage
Raison : Balisage
LibO 7.1 sous windows 10
- luky-luke
- InconditiOOnnel
- Messages : 936
- Inscription : 27 nov. 2010 01:17
- Localisation : gâtine deux-sèvrienne
Re: [Calc ] Si cellules Col. B vide décaler vers le bas à Co
Bonjour
Une solution à tester.
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
Une solution à tester.
Code : Tout sélectionner
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
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
Xray ne tient pas lieu de tout, mais une pratique sans Xray ne vaut pas grand chose
Re: [Calc ] Si cellules Col. B vide décaler vers le bas à Co
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".
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 7.1 sous windows 10
- luky-luke
- InconditiOOnnel
- Messages : 936
- Inscription : 27 nov. 2010 01:17
- Localisation : gâtine deux-sèvrienne
Re: [Calc ] Si cellules Col. B vide décaler vers le bas à Co
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.
Luke
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.
CordialementFeuille = ThisComponent.Sheets.GetByName("Feuille1_2")
MaZoneA = Feuille.GetCellRangeByName("A1:A100")
MaZoneB = Feuille.GetCellRangeByName("B1:B100")
Luke
- Pièces jointes
-
- open 3.ods
- (14.61 Kio) Téléchargé 94 fois
Dernière modification par luky-luke le 09 nov. 2019 15:40, modifié 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
Xray ne tient pas lieu de tout, mais une pratique sans Xray ne vaut pas grand chose
Re: [Résolu] Si cellules Col. B vide décaler vers le bas à C
c top pou moi c résolu merci lucky
"Le don de soi est ce qu’on peut offrir de plus grand".
"Le don de soi est ce qu’on peut offrir de plus grand".
LibO 7.1 sous windows 10
- luky-luke
- InconditiOOnnel
- Messages : 936
- Inscription : 27 nov. 2010 01:17
- Localisation : gâtine deux-sèvrienne
Re: [Calc ] Si cellules Col. B vide décaler vers le bas à Co
Re
Ah oui Luky c'est sans C Et la balise [Résolu] c'est dans le premier message du fil....mince alors !
Luky Luke
Je vais prendre le temps de réfléchir à ça . En même temps ce n'est qu'un forumalex85 a écrit :"Le don de soi est ce qu’on peut offrir de plus grand".
Ah oui Luky c'est sans C Et la balise [Résolu] c'est dans le premier message du fil....mince alors !
Luky Luke
Dernière modification par luky-luke le 09 nov. 2019 15:50, modifié 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
Xray ne tient pas lieu de tout, mais une pratique sans Xray ne vaut pas grand chose
Re:[Résolu] Si cellules Col. B vide décaler vers le bas à Co
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"
"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 7.1 sous windows 10
Re: [Calc ] Si cellules Col. B vide décaler vers le bas à Co
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,
Re: [Calc ] Si cellules Col. B vide décaler vers le bas à Co
Bonjour,
Damned! Encore trop tard!
mais
A plus.
Damned! Encore trop tard!
mais
l'exemple suivant doit fonctionner sans cette limitation.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.
Code : Tout sélectionner
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
Ajout : même jour à 21 h: correction grâce à l'aimable signalement de luky-luke |
Dernière modification par joel275 le 09 nov. 2019 20:56, modifié 2 fois.
A jour de LibreOffice et de Ubuntu
[Résolu][Calc]cellules Col. B vide décaler vers le bas à Col
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."
"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."
LibO 7.1 sous windows 10
- luky-luke
- InconditiOOnnel
- Messages : 936
- Inscription : 27 nov. 2010 01:17
- Localisation : gâtine deux-sèvrienne
Re: [Calc ] Si cellules Col. B vide décaler vers le bas à Co
Re
Re
La fonction MAX ne peut pas être directement utilisé en macro
Il faut utiliser le service UNO qui va bien
Cordialement
Luke
Re
La fonction MAX ne peut pas être directement utilisé en macro
Code : Tout sélectionner
Rem On remet les morceaux à leur place
n = max(Ubound(paquetA), Ubound(paquetB))
Code : Tout sélectionner
Args() = Array(Ubound(paquetA), Ubound(paquetB))
FuncAcces = CreateUnoService("com.sun.star.sheet.FunctionAccess")
n = FuncAcces.CallFunction("MAX",Args())
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
Xray ne tient pas lieu de tout, mais une pratique sans Xray ne vaut pas grand chose
Re: [Résolu][Calc] Si vide décaler vers le bas à Col A
Re,
J'avais programmé cette fonction max quelque part dans "Mes macros" et l'y avais oublié: mille excuses!
A plus.
merci pour cette précision: je corrige dans mon message.luky-luke a écrit :La fonction MAX ne peut pas être directement utilisé en macro
J'avais programmé cette fonction max quelque part dans "Mes macros" et l'y avais oublié: mille excuses!
A plus.
A jour de LibreOffice et de Ubuntu