[OpenOffice]Macro efface cellules de données

Tisoon Messages postés 10 Date d'inscription   Statut Membre Dernière intervention   -  
Tisoon Messages postés 10 Date d'inscription   Statut Membre Dernière intervention   -
Bonsoir,

Je fonctionne sous OpenOffice.org et je souhaite créer (ou plutôt compléter) une macro afin d'effacer des cellules contenant des données. J'utilise le langage VBA de Microsoft Office pour ma macro en mettant au début de celle-ci :
Option VBASupport 1
Permettant la reconnaissance du langage par OpenOffice.

J'ai recherché un peu partout grâce à mon ami Google des solutions à mon problème (comme pour à peu près tout ce que je veux faire avec les macros...), mais là je pêche complètement. Pourtant ce n'est pas la documentation qui manque à ce sujet.
Mais ce n'est pas forcément toujours adapté au soucis, parfois il s'agit d'effacer les données d'une ligne/colonne, parfois d'effacer des cellules en particulier. J'ai essayé d'utiliser nombre de ces propositions en essayant d'adapter, mais toujours une erreur. De passer par la sélection puis l'effacement, mais sans succès non plus. De plutôt supprimer qu'effacer, mais idem. Sûrement que je m'y prends mal pour les adapter, solution d'autant plus possible que je n'y comprends rien pour le coup à ces fonctions d'effacer (j'avais eu des cours à l'université pour ce que j'ai réussi à faire).

Je vous mets donc ma macro en l'état actuel :
REM  *****  BASIC  *****

Option VBASupport 1

Sub Stock
y = 2
x = 12

Do
	If (Sheets("Synthèse").cells(y,17) > 0) then
		Sheets("Synthèse").cells(x,1) = Sheets("Synthèse").cells(y,16)
		Sheets("Synthèse").cells(x,2) = Sheets("Synthèse").cells(y,17)
		Sheets("Synthèse").cells(x,3) = Sheets("Synthèse").cells(y,18)
		x = x + 1
	End if
	y = y + 1
Loop until (Sheets("Synthèse").cells(y, 17) = "")

End Sub


Je vous mets un petit screen histoire d'illustrer un peu plus la situation :
http://www.noelshack.com/

En fait il existe toute une liste de denrées, mais je veux que n'apparaissent ici que celles ayant un stock. C'est ce que j'ai réussi à écrire. Cependant, au fil du temps, il varie souvent et je peux donc me retrouver avec moins de denrées ayant un stock. C'est là que je pêche, car je ne sais pas comment supprimer automatiquement les lignes alors superflues (exemple : je n'ai plus de robes, en relançant la macro "Robes" va disparaitre (avec qté et prix) et donc "Sacs de blé" va descendre d'un cran, cependant il va se retrouver en double (lignes 21 et 22)).
J'aimerais donc que ces lignes répétées disparaissent. Je ne sais pas s'il est possible d'ajouter cela à la fin de la macro ou s'il faut s'y prendre autrement.
Sinon, en méthode un peu moins classe je pourrais dire que de A12 à C100 j'efface tout avant de lancer la macro qui récapitule le stock. Mais ça non plus je ne sais pas faire...

Je vous remercie d'avance pour l'aide que vous m'apporterez :).

Amicalement Tisoon

A voir également:

1 réponse

gbinforme Messages postés 14946 Date d'inscription   Statut Contributeur Dernière intervention   4 725
 
bonjour

Comme la compatibilité des macros en langage VBA de Microsoft Office est assez limitée sous Openoffice, je te propose ceci qui devrait fonctionner :

Option VBASupport 1
Sub new_Stock()
y = 2
x = 12
Do
    Sheets("Synthèse").Cells(x, 1) = ""
    Sheets("Synthèse").Cells(x, 2) = ""
    Sheets("Synthèse").Cells(x, 3) = ""
    x = x + 1
Loop Until (Sheets("Synthèse").Cells(x, 1) = "")
x = 12
Do
    If (Sheets("Synthèse").Cells(y, 17) > 0) Then
        Sheets("Synthèse").Cells(x, 1) = Sheets("Synthèse").Cells(y, 16)
        Sheets("Synthèse").Cells(x, 2) = Sheets("Synthèse").Cells(y, 17)
        Sheets("Synthèse").Cells(x, 3) = Sheets("Synthèse").Cells(y, 18)
        x = x + 1
    End If
    y = y + 1
Loop Until (Sheets("Synthèse").Cells(y, 17) = "")
End Sub
1
Tisoon Messages postés 10 Date d'inscription   Statut Membre Dernière intervention  
 
Je vous remercie pour votre réponse.

J'avais cherché dans un premier temps dans cette direction, mais sans succès, j'avais cherché à faire trop compliqué. Cependant cette macro ne fonctionne pas pour une raison qui m'échappe.

Lorsque je l'exécute, à la ligne :
Sheets("Synthèse").Cells(x, 1) = ""

J'ai un message d'erreur m'indiquant :
"Erreur d'exécution BASIC.
'35'
Sheets"

En regardant sur internet je suis tombé là -dessus :
https://docs.microsoft.com/fr-fr/previous-versions/visualstudio/visual-studio-2008/s8y42ktc(v=vs.90)?redirectedfrom=MSDN
Cependant en lisant ce qui y est écrit, je ne vois pas le rapport avec la macro. Tout me semblant parfaitement orthographié.

Merci pour l'aide que vous m'apportez.

Amicalement Tisoon
0
gbinforme Messages postés 14946 Date d'inscription   Statut Contributeur Dernière intervention   4 725
 
Bonjour,

Chez moi elle fonctionne parfaitement sous Calc, sinon je ne l'aurais pas mise sur le forum. Je n'ai trouvé aucune des habituelles fonctions excel d'effacement fonctionnelle sous calc et donc j'ai utilisé du "basique".

Cependant je pense que ce n'est pas la solution d'essayer de faire fonctionner les macros excel sous calc car il y a beaucoup trop de procédures non fonctionnelles.

Il vaudrait mieux fonctionner avec le langage propre à openoffice, mais après avoir testé un peu je n'ai pas continué car leur basic est vraiment une usine à gaz et j'ai eu peur d'en périr.

Tu donnes un lien sur Microsoft, mais le problème vient d'openoffice car cette macro est fonctionnelle sous excel aussi. C'est par contre tout à fait normal de déclarer les variables et personnellement, je met toujours "Option Explicit" pour éviter toute erreur de saisie.

Cependant c'est Sheets que calc ne reconnait pas et cela est certainement dû au basic open qui demande à définir tout élément d'une commande avant de l'exécuter. Le code que je t'ai mis est exactement le même que le tien sauf que l'on efface chaque cellule au lieu de la documenter.
0
Tisoon Messages postés 10 Date d'inscription   Statut Membre Dernière intervention  
 
Il est vrai que la macro fonctionne toujours, mais en réalité seulement ma partie et vous avez raison en disant avoir repris les mêmes fonctions que moi, d'où mon incompréhension...

J'avais voulu également au début passer par le langage d'OOo, cependant n'y comprenant rien j'ai cherché à faire supporter le langage Excel.

Je vous remercie en tout cas et vais continuer un peu à chercher de mon côté, au cas où!

Merci encore.

Amicalement Tisoon
0