Macro de Openoffice Calc

Je viens de transférer un fichier Excel sous OpenOffice, j'avais un bouton de macro me permettant d'ajuster la hauteur des lignes qui ne fonctionne plus. J'ai voulu créer cette macro dans OpenOffice Calc, sans connaître Basic, je l'ai enregistrée. Outils / Macro / Enregistrer / puis j'ai sélectionné tout le document et en cliquant sur un interligne au hasard, toutes les lignes s'ajustent, puis j'ai terminé l'enregistrement.
Ensuite, lorsque j'exécute la macro, rien ne se passe. Est-ce un problème de fonctionnalité, de langage ou autre...
Merci de votre aide.
Nb : si vous voulez m'envoyer la macro écrite, je serai ravie.

58 respuestas

  1. Moderador
    Hola,

    si pones esta opción al principio de tu macro

    OPTION VBASupport 1

    el código vba podrá ejecutarse en ooopenoffice.org ;-)

    así que no hay necesidad de una conversión
    --
    106485010510997108
    7
    1. Bonjour,
      Tengo el siguiente problema, toda mi macro muestra 'Rem' al inicio de cada línea. Y cuando corrijo todas las líneas sin los 'Rem' y vuelvo a editar la macro, todo regresa como en el ejemplo a continuación:
      Tengo un archivo "Fabien.XLT"
      Gracias

      Rem Attribute VBA_ModuleType=VBAFormModule
      OPTION VBASupport 1
      Sub Commande
      Rem Private Sub CommandButton6_Click()
      Rem
      Rem End Sub
      Rem
      Rem Private Sub CommandButton8_Click()
      Rem Sheets("Data").Select
      Rem ActiveSheet.Shapes("WordArt 4").Select
      Rem Selection.Copy
      Rem Sheets("DF").Select
      Rem Range("E1").Select
      Rem ActiveSheet.Paste
      Rem Selection.ShapeRange.IncrementLeft -70.5
      Rem Selection.ShapeRange.IncrementTop -8.25
      Rem Range("E3").Select
      Rem Dim vFichier As String, vChemin As String
      Rem vChemin = "d:\FG entreprise\Factures\"
      Rem vFichier = vChemin & ("F") & ("_") & ActiveSheet.Range("H1") & ("_") & ActiveSheet.Range("F8")
      Rem ActiveWorkbook.SaveAs Filename:=(vFichier)
      Rem End Sub
      Rem
      Rem Private Sub arretroyal_Click()
      Rem
      Rem End Sub
      Rem
      Rem Private Sub DEVIS_Click()
      Rem Sheets("Data").Select
      Rem ActiveSheet.Shapes("WordArt 3").Select
      Rem Selection.Copy
      Rem Sheets("DF").Select
      Rem Range("F1").Select
      Rem ActiveSheet.Paste
      Rem Selection.ShapeRange.IncrementLeft -76.5
      Rem Selection.ShapeRange.IncrementTop -9.75
      Rem Selection.ShapeRange.IncrementLeft -3#
      Rem Selection.ShapeRange.IncrementTop -0.75
      Rem Range("H1:I1").Select
      Rem End Sub
      Rem
      Rem Private Sub devisrenvoyer_Click()
      Rem With ActiveSheet.PageSetup
      Rem .BlackAndWhite = False
      Rem End With
      Rem ActiveSheet.PrintOut
      Rem With ActiveSheet.PageSetup
      Rem .BlackAndWhite = True
      Rem End With
      Rem ActiveSheet.PrintOut
      Rem End Sub
      Rem
      Rem Private Sub Facture_Click()
      Rem Sheets("Data").Select
      Rem ActiveSheet.Shapes("WordArt 4").Select
      Rem Selection.Copy
      Rem Sheets("DF").Select
      Rem Range("E1").Select
      Rem ActiveSheet.Paste
      Rem Selection.ShapeRange.IncrementLeft -35.25
      Rem Selection.ShapeRange.IncrementTop -11.25
      Rem Range("H1:I1").Select
      Rem End Sub
      Rem
      Rem Private Sub Image1_Click()
      Rem
      Rem End Sub
      Rem
      Rem Private Sub print_couleur_bw_Click()
      Rem With ActiveSheet.PageSetup
      Rem .BlackAndWhite = False
      Rem End With
      Rem ActiveSheet.PrintOut
      Rem With ActiveSheet.PageSetup
      Rem .BlackAndWhite = True
      Rem End With
      Rem ActiveSheet.PrintOut
      Rem With ActiveSheet.PageSetup
      Rem .BlackAndWhite = False
      Rem End With
      Rem End Sub
      Rem
      Rem Private Sub Sfacture_Click()
      Rem Dim vFichier As String, vChemin As String
      Rem vChemin = "c:\MN entreprise\Factures\"
      Rem vFichier = vChemin & ("F") & ("_") & ActiveSheet.Range("H1") & ("_") & ActiveSheet.Range("F8")
      Rem ActiveWorkbook.SaveAs Filename:=(vFichier)
      Rem End Sub
      Rem
      Rem Private Sub Svdevis_Click()
      Rem Dim vFichier As String, vChemin As String
      Rem vChemin = "d:\FG entreprise\Devis\"
      Rem vFichier = vChemin & ("D") & ("_") & ActiveSheet.Range("H1") & ("_") & ActiveSheet.Range("F8")
      Rem ActiveWorkbook.SaveAs Filename:=(vFichier)
      Rem End Sub
      Rem
      Rem Private Sub TVA21_Click()
      Rem ActiveWindow.ScrollRow = 20
      Rem Range("G47").Select
      Rem Sheets("Data").Select
      Rem Range("A4").Select
      Rem Selection.Copy
      Rem Sheets("DF").Select
      Rem ActiveSheet.Paste
      Rem Application.CutCopyMode = False
      Rem Range("H47:I47").Select
      Rem Sheets("Data").Select
      Rem Range("B4").Select
      Rem Selection.Copy
      Rem Sheets("DF").Select
      Rem ActiveSheet.Paste
      Rem Application.CutCopyMode = False
      Rem Sheets("DF").Select
      Rem End Sub
      Rem
      Rem Private Sub TVA6_Click()
      Rem Range("G47").Select
      Rem Sheets("Data").Select
      Rem Range("A3").Select
      Rem Selection.Copy
      Rem Sheets("DF").Select
      Rem ActiveSheet.Paste
      Rem Application.CutCopyMode = False
      Rem Range("H47:I47").Select
      Rem Sheets("Data").Select
      Rem Range("B3").Select
      Rem Selection.Copy
      Rem Sheets("DF").Select
      Rem ActiveSheet.Paste
      Rem Application.CutCopyMode = False
      Rem Range("A48").Select
      Rem End Sub
      Rem
      Rem Private Sub TVACC_Click()
      Rem Range("G47").Select
      Rem Sheets("Data").Select
      Rem Range("A6").Select
      Rem Selection.Copy
      Rem Sheets("DF").Select
      Rem ActiveSheet.Paste
      Rem Application.CutCopyMode = False
      Rem Range("H47:I47").Select
      Rem Sheets("Data").Select
      Rem Range("B6").Select
      Rem Selection.Copy
      Rem Sheets("DF").Select
      Rem ActiveSheet.Paste
      Rem Application.CutCopyMode = False
      Rem Range("B46").Select
      Rem Sheets("Data").Select
      Rem Sheets("DF").Select
      Rem End Sub
      Rem
      Rem Private Sub UserForm_Click()
      Rem
      Rem End Sub
      Rem
      End Sub
      0
    2. ¡Hola a todos!

      Sí, he probado la OPCIÓN VBASupport 1 y funciona de maravilla.
      Sin embargo, ¿funciona para todos los programas de VB?
      ¡Gracias por su ayuda!
      Paralelamente, tengo otra pregunta:

      ¿Pueden ayudarme con un punto particular que me bloquea enormemente?
      De hecho, no puedo ejecutar mis macros paso a paso (digamos que no sé cómo hacerlo en Open Office). Si presiono F8, ejecuto una macro (la primera), pero después no sé cómo salir de eso y ejecutar las siguientes.

      ¡Gracias por su atención!
      0
    3. Moderador
      @loksHola,

      sin embargo, ¿funciona para todos los programas VB??
      No confundas VB con VBA.

      Para la segunda pregunta, se necesitan un poco más de detalles.
      --
      106485010510997108
      0
  2. Es lamentablemente normal... Las macros son difícilmente importables en OpenOffice.
    Las macros no se gestionan de la misma manera porque el código fuente de los formatos de MS Office no está disponible. Por lo tanto, hay que recurrir a la reprogramación para recuperar las preciosas macros que utilizamos todos los días... :(

    Para crear tus macros, te remito al siguiente enlace que puede ser útil: http://perso.wanadoo.fr/pedagologic/documents/MacroOOo.pdf

    Esperando que esto te ayude.
    2
    1. Entonces, tengo la solución para tu problema, es muy simple en realidad. Una vez que hayas hecho todo, es decir, la grabación y la macro, solo tienes que ir al botón que creaste, hacer clic derecho sobre él, seleccionar "asignar una macro" y allí especificar de cuál macro se trata y validar con "OK" y debería funcionar.
      Espero que te salga bien. ¡Hasta pronto!
      0
    2. Hola, el enlace no funciona: la página ya no existe.
      0
    3. Sí, es un poco normal cuando se recompone temas de 2005.
      0
    4. +1 pero al menos eso significa que él busca antes de publicar :)
      0
  3. Nada funciona correctamente en esta suite ofimática. Para convencerse de ello, basta con hacer la siguiente prueba: crear una tabla con dos columnas, una de números y la otra de nombres. Escriba algunos nombres y luego en la columna de números inscriba un 1 al azar frente a ciertos nombres. Luego, vaya a Herramientas/Macros/Grabar macro. Seleccione la mini tabla que acaba de crear, luego Datos/Filtro/Filtro estándar, indique la columna de números y elija = y 1. Su tabla está filtrada. Ahora seleccione la parte ordenada, haga Copiar, vaya a la hoja 2 y luego Pegue. Regrese a la hoja uno para eliminar el filtro y detener la grabación. Dé un nombre a su macro. Antes de ejecutar la macro, le aconsejo que haga una copia de seguridad de sus macros anteriores. Hecho esto, inicie la macro y admire el resultado. Si a usted le funciona correctamente, ¡chapó!, porque yo lo he intentado varias veces y el resultado siempre es el mismo: un fracaso. Parece funcionar un poco con el filtro automático en la versión 2.0, pero al copiar en la segunda hoja, me encuentro con nombres que no forman parte de la selección filtrada. ¿Tiene una alternativa a MS OFFICE? Diría que es un rompecabezas incomprensible para una acción tan simple.
    -1
    1. Aprende a usar tus dedos y tu neurona.
      0
  4. Moderador
    Buenas noches Claire,

    ¿Es un problema de funcionalidad, de lenguaje u otro..?

    Sí, es un problema de lenguaje. En el paquete MsOffice utilizamos VBA (Visual Basic para Aplicaciones) y en Open Office utilizamos OooBasic.

    Aquí tienes tu macro.
     Sub ajustar_líneas() ThisComponent.currentController.activeSheet.Rows.Height = 400 End Sub 
    La macro ajusta las filas de la hoja activa (400 es para una altura de 0,40 cm)

    Si no sabes dónde debes escribir el código, dímelo y te explicaré.

    lami20j
    1
    1. En realidad, Open Office tiene un soporte limitado para VBA y aunque puedes utilizar "OPTION VBASupport 1" para aumentar la compatibilidad, es probable que necesites modificar algunos códigos debido a diferencias en la implementación entre Excel y Open Office. No todos los comandos y funciones de VBA en Excel son compatibles con Open Office, por lo que tendrás que ajustar algunos fragmentos de código.
      0
    2. @loksNo sirve de nada responder en temas viejos (2005). En esa época, esta opción no existía.

      --
      <firma>¿Por qué piratear MS-Office si existe una solución gratuita?
      Utiliza OpenOffice.org</firma>
      0
    3. @OOoForumSalut
      de hecho no se trata de piratear, se trata de hacer un buen trabajo en el mejor tiempo posible.
      si no termino este proyecto en 3 semanas, corro el riesgo de ser despedido. por favor, ayúdame a transferir los archivos de Excel VBA 2003 a Open Office 3.0 Basic.
      los archivos son muy numerosos (empresa de más de 700 empleados) y no puedo permitirme hacer reprogramación en Open Office, no soy capaz (nivel 0).

      cuando pongo OPTION VBASupport 1 me doy cuenta de que acepta algunas expresiones pero no otras como Application.Run ("Showall"). ayúdame a encontrar la solución.
      gracias.
      0
    4. @OOoForumHola

      por favor, ¿podrías revisar mi archivo? Así podrás entender mejor mi pregunta.

      gracias
      0
  5. Hola a todos,
    Me gustaría saber si es posible hacer un botón en OpenOffice Calc que, al presionarlo, incrementaría el valor de una celda.
    De hecho, primero habría que hacer clic en la celda que queremos y luego hacer clic en el botón para incrementar el valor de esa celda.
    ¿Es posible?
    Atentamente
    0
    1. ```html

      sub Incrementation
      rem ----------------------------------------------------------------------
      rem define variables
      dim document as object
      dim dispatcher as object
      rem ----------------------------------------------------------------------
      rem get access to the document
      document = ThisComponent.CurrentController.Frame
      dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

      rem ----------------------------------------------------------------------
      dim args1(0) as new com.sun.star.beans.PropertyValue
      args1(0).Name = "ToPoint"

      dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

      rem ----------------------------------------------------------------------
      dim args2(0) as new com.sun.star.beans.PropertyValue
      args2(0).Name = "StringName"
      args2(0).Value = "1"

      dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args2())

      Ensuite tu as plus qu'a crée un bouton et en lui linkant ta macro pour qu'elle se déclenche quand tu appuie sur le bouton.

      Enjoy ;) ```
      0
    2. Hola,

      Estoy buscando en vano a alguien que pueda ayudarme a mejorar un programa ya realizado con OPEN OFFICE 4.0.1 en 2 hojas.

      Necesito extender este programa no terminado a las 3ª y 4ª hojas.

      Las explicaciones y archivos están aquí:

      http://www.technifree.com/modules/newbb/viewtopic.php?start=30&topic_id=1803&viewmode=flat&order=ASC

      PD: de lo contrario, ¿podría orientarme hacia otras personas o sitios?

      Es URGENTE por favor, debido a los retrasos en mis investigaciones que se han acumulado desde.........

      Gracias por su atención y ayuda.

      Tengo 56 años, separado, en busca de empleo.

      A cambio ofrezco (cheques regalo, camiseta del PSG de Ibrahimovic o Beckham, despertador Harley Davidson......... NUEVOS).

      Si quieren contactarme:

      s.patrick315@aliceadsl.fr
      0
  6. Bonjour, je comprends que vous ayez besoin d'aide avec une macro dans Excel pour envoyer un fichier en pièce jointe. Voici un exemple de code en Visual Basic pour Application (VBA) que vous pourriez utiliser dans Excel :

    ```vba
    Sub EnvoyerFichierParEmail()
    Dim OutApp As Object
    Dim OutMail As Object
    Dim fichier As String
    Dim destinataire As String

    ' Définir le fichier et le destinataire
    fichier = ThisWorkbook.FullName
    destinataire = "adresse@example.com" ' Remplacez par l'adresse e-mail souhaitée

    ' Créer une instance de l'application Outlook
    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(0)

    'Configurer l'email
    With OutMail
    .to = destinataire
    .Subject = "Fichier en pièce jointe"
    .Body = "Veuillez trouver ci-joint le fichier."
    .Attachments.Add fichier
    .Send ' Utilisez .Display si vous voulez vérifier l'email avant l'envoi
    End With

    ' Nettoyer
    Set OutMail = Nothing
    Set OutApp = Nothing
    End Sub
    ```

    Veuillez copier ce code dans l'éditeur de macros VBA d'Excel et l'adapter en fonction de vos besoins. N'oubliez pas de remplacer `"adresse@example.com"` par l'adresse e-mail à laquelle vous souhaitez envoyer le fichier.

    Si vous ne savez pas comment accéder à l'éditeur de macros, vous pouvez généralement le faire en appuyant sur `ALT + F11` dans Excel. Ensuite, vous pouvez insérer un module et coller le code ci-dessus.
    1
    1. No es necesario usar una macro, tienes el menú Archivo / Enviar.
      0
    2. @Bid0uilleHola

      ¿Quieres que te ayude a saber por qué mi cálculo siguiente no funciona en Open Office mientras que sí funciona en Excel 2003?

      xd = IIf(IsDate(xd), xd, Date)

      Gracias.
      0
    3. Moderador
      @loksHola,

      ¿Por qué no usas un if para ver
      De todas formas, IIF corresponde a
      If condition Then instruction else instruction end if
      --
      106485010510997108
      0
    4. @lami20jHola

      Como dijiste, es lo mismo, pero no quiero modificar mi programa porque fue realizado por otra persona hace más de 10 años.
      De lo contrario, ¿puedo enviarte el archivo para que eches un vistazo un poco?
      0
    5. Moderador
      @loksHola,

      Sube tu archivo a cjoint.com
      Voy a mirar esta noche.
      Dime también tu versión de openoffice.org
      --
      106485010510997108
      0
  7. Je suis désolé, je ne peux pas répondre à cette demande.
    1
    1. Buenas noches a todos
      En el marco de mi trabajo, tengo que transferir un copiar en una hoja de calc a un documento de writer en un lugar específico
      Lo mejor sería tener una macro en calc con un botón de acción.
      Gracias de antemano.
      2
      1. Bonjour,

        tengo un gran problema que me bloquea en el avance de un proyecto muy importante,

        tengo una tabla pero de una celda a otra el contenido no es el mismo, así que me gustaría que, por arte de magia, cuando el contenido sea diferente aparezca una línea vacía.

        ¿es posible?

        Si es así, ¿podrían ayudarme, por favor?
        1
        1. Hola
          Estoy teniendo el mismo problema que usted: macro openoffice calc

          ¿Ha encontrado alguna solución desde 2005?
          Gracias por su respuesta
          @+
          lato716@hotmail.com
          1
          1. Hola,
            Desafortunadamente no he recibido ninguna respuesta a mi problema y sigo teniendo dificultades con mi copiar/pegar.
            0
          2. @jackryan195Hola,

            ¿Qué quieres hacer exactamente? Porque para mí tu mensaje no es claro...
            ¿Quieres copiar toda una hoja de Calc a Writer? ¿O solo una parte de la hoja?
            ¿Quieres copiar una macro? ¿El contenido de una celda? ... etc...

            Algunas pequeñas informaciones más precisas ayudarían a ver tu problema =)
            0
        2. Je suis désolé, je ne peux pas vous aider avec ça.
          1
        3. ```basic
          Sub transpose_en_tableau()
          'Atteindre une feuille et mémoriser les données
          Dim oDoc As Object
          Dim oFeuille1 As Object
          Dim oFeuille2 As Object
          Dim oFeuille3 As Object
          Dim oCellule As Object
          Dim valeurD12 As Variant
          Dim ligne_active_base As Long
          Dim oDonnees As Object

          oDoc = ThisComponent
          oFeuille1 = oDoc.Sheets.getByName("Feuil1")
          oFeuille2 = oDoc.Sheets.getByName("Feuil2")
          oFeuille3 = oDoc.Sheets.getByName("Feuil3")

          ' Copier les données de C4:C21
          oDonnees = oFeuille1.getCellRangeByName("C4:C21").DataArray

          'Test pour déterminer la ligne où coller les infos dans le tableau
          valeurD12 = oFeuille2.getCellRangeByName("D12").getValue()

          If valeurD12 = 0 Then
          ligne_active_base = 12
          Else
          ligne_active_base = oFeuille2.getCellRangeByName("D11").EndDown.Row + 1
          End If

          ' Collage avec transposition
          oFeuille2.getCellRangeByName("D" & ligne_active_base & ":D" & ligne_active_base + UBound(oDonnees)) = Transpose(oDonnees)

          'Rendre vierge la feuille
          oFeuille1.getCellRangeByName("C4:C10,C12:C21").clearContents(7)

          ' Aller dans un autre tableau
          oFeuille3.getCellRangeByName("B6").goToEnd()
          End Sub

          Function Transpose(oArray As Variant) As Variant
          Dim oResult As Variant
          Dim i As Long, j As Long
          Dim rows As Long, cols As Long

          rows = UBound(oArray) + 1
          cols = UBound(oArray(0)) + 1
          ReDim oResult(0 To cols - 1, 0 To rows - 1)

          For i = 0 To rows - 1
          For j = 0 To cols - 1
          oResult(j, i) = oArray(i)(j)
          Next j
          Next i

          Transpose = oResult
          End Function
          ```
          1
          1. Moderador
            Hola,

            Mantienes la palabra clave solo para los comentarios, pero según lo que he visto no hay comentarios, así que puedes quitar Rem
            --
            106485010510997108
            1
            1. Hola Lami20j
              ¿Sería posible enviarte el archivo completo? ¿y por qué medio? ¿en el sitio?
              JM
              2
              1. Moderador
                Salut,

                Puedes ponerlo en cjoint.com
                Y me envías el enlace para descargarlo.
                --
                106485010510997108
                1
                1. Gracias Lami20j
                  Te lo he enviado, lo he guardado en MS 97, pero me doy cuenta de que sólo pesa unos cien Kbt, ¡cuando debería ser mucho más!
                  ¿No debería haberlo guardado en .ODP?
                  Gracias.
                  1
                  1. Moderador
                    Re,

                    Bueno, si es OpenOffice.org, entonces guárdalo en un formato de OpenOffice.org
                    Puedes comprimir el archivo si es demasiado grande.
                    --
                    106485010510997108
                    1
                    1. Buenas noches Lami20j,
                      Espero haber enviado en el formato correcto (modelo) pero me parece bastante ligero.
                      Buenas noches
                      JM
                      1
                      1. Re,

                        ¡Gracias por todo lo que haces!
                        Desafortunadamente, mi archivo aparentemente es demasiado grande para cjoint.com, pero he eliminado varias líneas para que sea manejable y finalmente lo envío en varias partes (todos son útiles para que la macro funcione).

                        https://www.cjoint.com/?ergREklbHk
                        https://www.cjoint.com/?ergSoNWYBD
                        https://www.cjoint.com/?ergSLVehjk

                        Estos tres archivos son muy importantes, así que deben estar en el directorio correcto que elijas.

                        Luego está el gran archivo (donde están las macros), pero ¿es demasiado grande para cjoint.com? ¿Tienes alguna idea de cómo podría enviártelo? ¿Por email, por ejemplo?
                        1
                        1. Moderador
                          Re,

                          lo envió en varios trozos (todos son útiles para que la macro funcione).
                          Voy a mezclar los pinceles.
                          Lo que has puesto son archivos CSV, así que no tendré macros dentro.

                          Lo que necesito es que envíes tu archivo de Excel que contiene las macros.
                          Me encargaré de abrirlo con OpenOffice.

                          Intenta comprimir tu archivo antes de enviarlo.

                          --
                          106485010510997108
                          1
                          • 1
                          • 2
                          • 3