Open Office probleme avec macro svp

Bonjour j'ai également poster ce message dans "programmation" car je ne sais pas trop dans quel coin caser ce sujet...

j'ai de légère base en VBA sous Excel mais maintenant on a Open Office et je dois dans un tableau, copier la valeur écrite dans la colonne B de la feuille 1 et la coller dans la colonne C de la feuille 2 mais à condition que le nom écrit dans la colonne C de la feuille 1 soit identique au nom dans la colonne B de la feuille 2
J ai commencé à écrire ce code avec l'aide d'informations trouvés sur internet :

Sub test1230123

Dim monDocument As Object
Dim mesFeuilles As Object 'Désigne les feuilles
Dim feuilleSource As Object 'Désigne la feuille source
Dim feuilleDestination As Object 'Désigne la feuille destination

Dim i As Integer

monDocument = thisComponent 'il s'agit du document actif sur lequel on travaille
mesFeuilles = monDocument.Sheets 'mesFeuilles est la Feuille1 du document actif

feuilleSource = mesFeuilles.getByName("Feuille1")'Feuille source qui contient les données à copier
feuilleDestination = mesFeuilles.getByName("Feuille2") 'Désignation de la feuille de destination si on veut la désigner

for i = 1 to 1000
if Sheet(Feuille1).getCellByPosition("A").Value = heet(Feuille2).getCellByPosition("B").Value then
Sheet(Feuille1).getCellByPosition("B").Value = Sheet(Feuille2).getCellByPosition("C").Value

End if
next i
End Sub

Mais à la ligne souligné un message d'erreur affiche : "sous procédure ou procédure de fonction non définies"
Pouvez vous m'aider svp c'est très important
merci

11 réponses

  1. Youpy j'ai demandé ailleurs pour voir différentes idées proposé et on ma donné un code plus compliqué dont il faut que je comprenne chaque ligne sinon le code ne sers pas à grand chose.. mais il fonctionne très bien. Je te remercie d'avoir pris du temps sur la macro problématique
    0
    1. 
      Sub test1230123
      
      Dim monDocument As Object
      Dim mesFeuilles As Object 'Désigne les feuilles
      Dim feuilleSource As Object 'Désigne la feuille source
      Dim feuilleDestination As Object 'Désigne la feuille destination
      Dim i As Integer
      Dim Noms As Variant
      monDocument = thisComponent 'il s'agit du document actif sur lequel on travaille
      mesFeuilles = monDocument.Sheets 'mesFeuilles est la Feuille1 du document actif
      
      feuilleSource = mesFeuilles.getByName("Feuille1")'Feuille source qui contient les données à copier
      feuilleDestination = mesFeuilles.getByName("Feuille2") 'Désignation de la feuille de destination si on veut la désigner
      
      Noms(1)=("0, i")
      Noms(2)=("1, i")
      
      for i = 1 to 700
      feuilleDestination.setString(Noms (i)) = feuilleSource.setString(Noms (i))
      
      
      if Nom(i) <> "" then
      feuilleDestination.getCellByPosition(2, i).setValue(feuilleSource(1, i))
      
      
      end if
      next i
      End Sub 
      


      par rapport au site que tu m as transmis j'ai rectifié un peu la fin du code mais maintenant comme message d'erreur " attendu : Then" à la ligne souligné alors qu'il y a le then je ne comprends pas trop
      0
      1. j ai permuter
        feuilleSource.Range("B").Value = feuilleDestination.Range("C").Value
        en
        feuilleDestination.getCellByPosition(2, i).Value = feuilleSource.getCellByPosition(1, i).Value

        et les valeurs des trois premiers noms s'affichent bien mais cela fais juste un copier/coller classique la macro ne prend pas compte des noms différent et puis les noms ne sont pas situés sur les même lignes et les valeurs s'affichent sur les trois premieres... sa doit etre compliqué à comprendre sans le fichier
        0
        1. Sa avance plus d'erreurs s'affichent mais maintenant dans la feuille 1 colonne B (là où il y a les données à copier) j ai des zero dans toute la colonne ?!
          0
          1. ouais je viens de voir, apparement pour écrire dans une cellule il ne faut pas utiliser l'opérateur "=" mais la méthode setString. Jette un coup d'oeil à cette adresse, ça devrait t'aider.

            http://christianwtd.free.fr/index.php?rubrique=BasExemplesFonction01
            0
        2. j ai changé :

          if feuilleSource.Range("A").Value = feuilleDestination.Range("B").Value then
          feuilleSource.Range("B").Value = feuilleDestination.Range("C").Value

          mais maintenant il met met comme erreur "propriété ou méthode non trouvée : range". Peu être qu'open office ne connait pas Range comme Excel?
          0
          1. c'est tout à fait ça. du coup réessaie la méthode getCellByPosition (num_colonne,num_ligne )
            (pour num_ligne tu remplaces par la variable i, pour num_colonne j'imagine qu'on doit avoir A->0, B->1...)
            0
        3. j ai mis i au moment du if pour que celui ci se fasse ligne par ligne donc que la macro regarde la concordance des noms sur une ligne puis elle recommence sur celle d'après. Mais cette idée de i viens de moi donc j'en suis pas sûr à 100% mais on faisait des trucs comme sa quand on utilisait if en cours
          0
          1. Ok j'ai relu plus en détail ton code.
            Remplace Sheet par feuilleSource et feuilleDestination suivant le contexte adapté, ici Sheet est lu comme une variable qui n'a jamais été définie avant...
            0
        4. Je viens d'essayer mais cela ne fonctionne pas de longues recherches s'annoncent mais merci d'avoir essayé
          0
          1. une autre question, a quel moment utilises tu ta variable i ?
            0
        5. Mais sinon dans le langage "général" la macro ressemble bien à ça?
          et si c'est un problème de méthode laquelle utiliser?
          0
          1. Oui je pense. Personnellement je travaille avec Excel, mais si les noms des méthodes sont calquées sur Excel, peut être essaie de remplacer tous tes "Sheet" par des "Sheets"
            0
        6. il y a bien un S dans la macro au sheet de la deuxieme ligne juste un petit loupé...
          0
          1. En effet juste une faute de frappe!
            quand tu as une erreur de ce style, ça veut dire que le compilateur ne reconnait pas le nom de la méthode, et donc soit elle n'existe pas, soit il y a une faute de frappe (comme ça a l'air d'être le cas ici)
            0
        7. Pardon j 'ai oublié de surligné c'est la ligne après le for :

          if Sheet(Feuille1).getCellByPosition("A").Value = heet(Feuille2).getCellByPosition("B").Value then
          0
          1. peux tu redire à quelle ligne tu as l'erreur?
            0