Open Office probleme avec macro svp

Fermé
noob10*99 Messages postés 12 Date d'inscription vendredi 6 avril 2012 Statut Membre Dernière intervention 7 avril 2012 - 6 avril 2012 à 15:10
noob10*99 Messages postés 12 Date d'inscription vendredi 6 avril 2012 Statut Membre Dernière intervention 7 avril 2012 - 7 avril 2012 à 00:31
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
A voir également:

11 réponses

peux tu redire à quelle ligne tu as l'erreur?
0
noob10*99 Messages postés 12 Date d'inscription vendredi 6 avril 2012 Statut Membre Dernière intervention 7 avril 2012
6 avril 2012 à 15:58
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
noob10*99 Messages postés 12 Date d'inscription vendredi 6 avril 2012 Statut Membre Dernière intervention 7 avril 2012
6 avril 2012 à 16:00
il y a bien un S dans la macro au sheet de la deuxieme ligne juste un petit loupé...
0
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
noob10*99 Messages postés 12 Date d'inscription vendredi 6 avril 2012 Statut Membre Dernière intervention 7 avril 2012
6 avril 2012 à 16:07
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
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
noob10*99 Messages postés 12 Date d'inscription vendredi 6 avril 2012 Statut Membre Dernière intervention 7 avril 2012
6 avril 2012 à 16:14
Je viens d'essayer mais cela ne fonctionne pas de longues recherches s'annoncent mais merci d'avoir essayé
0
une autre question, a quel moment utilises tu ta variable i ?
0
noob10*99 Messages postés 12 Date d'inscription vendredi 6 avril 2012 Statut Membre Dernière intervention 7 avril 2012
6 avril 2012 à 16:31
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
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
noob10*99 Messages postés 12 Date d'inscription vendredi 6 avril 2012 Statut Membre Dernière intervention 7 avril 2012
6 avril 2012 à 16:47
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
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
noob10*99 Messages postés 12 Date d'inscription vendredi 6 avril 2012 Statut Membre Dernière intervention 7 avril 2012
6 avril 2012 à 16:57
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
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
noob10*99 Messages postés 12 Date d'inscription vendredi 6 avril 2012 Statut Membre Dernière intervention 7 avril 2012
6 avril 2012 à 17:03
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
noob10*99 Messages postés 12 Date d'inscription vendredi 6 avril 2012 Statut Membre Dernière intervention 7 avril 2012
6 avril 2012 à 22:56

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
noob10*99 Messages postés 12 Date d'inscription vendredi 6 avril 2012 Statut Membre Dernière intervention 7 avril 2012
7 avril 2012 à 00:31
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