[Résolu] Comparaison cellule excel

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: 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 !
krusty
Membre OOrganisé
Membre OOrganisé
Messages : 54
Inscription : 02 juin 2006 10:20

[Résolu] Comparaison cellule excel

Message par krusty »

Bonjour,

Je n'arrive pas à trouver l'équivalent de la commande : cells(i,"G") (code VBA) utilisée dans le code suivant :

Code : Tout sélectionner

 If cells(i, "G") <>"" then
Range(Cells(i,"A"), Cells(i+54, "G")).Select
End If
J'aimerais savoir comment on fait pour comparer une cellule (son contenu) à quelquechose (but du code précédent).

Je remercie d'avance ceux qui me viendront en aide ainsi que ceux qui prendront la peine d'essayer...
Dernière modification par krusty le 23 juin 2006 09:25, modifié 1 fois.
OpenOffice 2.0 sur windows
OpenOffice 1.1 sur Linux Mandrake 10
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25143
Inscription : 03 mars 2006 08:45
Localisation : 127.0.0.1
Contact :

Message par Dude »

Allo SOS Traduction ? :evil:

Il faudrait peut être nous dire ce que fait exactement la fonction VBA.
Poser une question, c'est bien. Répondre aux autres, c'est encore mieux.
Améliorez AOO et votez pour les issues
krusty
Membre OOrganisé
Membre OOrganisé
Messages : 54
Inscription : 02 juin 2006 10:20

Message par krusty »

En fait à la base elle sert à imprimer une partie du fichier, pour savoir ce qu'elle doit imprimer, elle regarde si il y a quelquechose dans une cellule donnée et si c'est le cas, elle sélectionne différentes cellules puis fait appel à une fonction créée précedemment qui lance l'impression.

Voici le code de la macro en VBA :

Code : Tout sélectionner

Rem 'EDITION CULTURES
Sub IMPCULT()
Sheets("CULT").Select
For i = 1 To 673 Step 56
If Cells(i, "G") <> "" Then
Range(Cells(i, "A"), Cells(i + 54, "G")).Select
EDIT
End If
Next i

If Range("P1") <> "" Then
Range("J1:P55").Select
EDIT
End If

...

If Range("AQ57") <> "" Then
Range("AK57:AQ111").Select
EDIT
End If

Range("A1").Select
Application.Goto Reference:="MENU"
End Sub
les ... représente une suite d'instruction similaire au "if .... End if" qui ne sont pas compris dans le For / End For.

La fonction appelée est EDIT et lorsque tout est sélectionné l'impression commence.

Si tu veux, voilà le code de EDIT :

Code : Tout sélectionner

Rem 'IMPRIMER LA SELECTION
Sub EDIT()
Selection.PrintOut Copies:=1
End Sub
Voilà, c'est tout ce que je peux dire pour l'instant.
OpenOffice 2.0 sur windows
OpenOffice 1.1 sur Linux Mandrake 10
krusty
Membre OOrganisé
Membre OOrganisé
Messages : 54
Inscription : 02 juin 2006 10:20

Message par krusty »

Voilà enfait j'ai réussi à trouver lasolution au problème mais maintenant j'ai un problème avec la fonction qui est appelée. Voilà les codes :

Prog :

Code : Tout sélectionner

Sub impcult
dim document as object
dim feuille as object
dim Mafeuille as object
dim Cellule as Object
dim Selection as Object

document = ThisComponent
Mafeuille = document.sheets
feuille = Mafeuille.getByName("CULT")

For i = 0 to 672 step 56
	Cellule = feuille.getCellByPosition(6, i)
	if Cellule.Value <> "" then
		Selection = feuille.getCellByPosition(0,i, 6,i+54)
		edit
	End if
Next i

If feuille.getCellRangeByName("P1").value <>"" then
	Selection =  feuille.getCellByPosition(9,0, 15,54)
	edit
End If

...

If feuille.getCellRangeByName("AQ57").value <>"" then
	Selection =  feuille.getCellByPosition(34,56, 40,111)
	edit
End If

dim dispatcher as object

document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Nr"
args1(0).Value = 1

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

dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "ToPoint"
args2(0).Value = "$A$1"

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

End Sub
fonction :

Code : Tout sélectionner

Sub edit(Selection as object)
Selection.print()
End Sub
En fait quand je lance la macro pour la tester un message disant :
"Runtime Error Basic
L'argument n'est pas facultatif."

Et ça surligne la ligne selection.print().

Je n'arrive pas à trouver la solution, si quelqu'un pouvait m'aider, je le remercie d'avance.
OpenOffice 2.0 sur windows
OpenOffice 1.1 sur Linux Mandrake 10
Gastiflex
Membre lOOyal
Membre lOOyal
Messages : 47
Inscription : 19 avr. 2006 12:02

Message par Gastiflex »

C'est bizarre que l'erreur soit sur le print. Parce que ta routine est déclarée comme prenant un objet en paramètre, or quand tu l'appelles, tu ne lui passe aucun paramètre.
Pierre-Yves Samyn
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 11276
Inscription : 02 mai 2006 10:42

Imprimer une sélection

Message par Pierre-Yves Samyn »

Bonjour

Plusieurs remarques :
Comme déjà noté, la procédure

Code : Tout sélectionner

Sub edit(Selection as object) 
attend un paramètre. Il faut donc lui passer quand on l'appelle.

Par ailleurs, la méthode print est une méthode "document" et non "plage".
Les objets "feuilles" disposent d'une méthode "PrintAreas" permettant de définir des zones d'impression mais ce n'est a priori pas ce qui est souhaité ici : sélection d'une plage de cellules puis impression.

Donc, si j'ai bien compris..., je préconiserais plutôt de sélectionner la plage puis d'utiliser le dispatcher pour lancer l'équivalent de la commande Fichier Imprimer Sélection.

Concernant la sélection la syntaxe utilisée :

Code : Tout sélectionner

Selection =  feuille.getCellByPosition(9,0, 15,54) 
Ne donnera pas le résultat escompté car, s'agissant d'une plage, il faut utiliser getCellRangeByPosition.

Par ailleurs, ceci affecte à la variable "Selection" la plage, mais cela ne sélectionne pas "dans le tableau". Pour cela on utilise une syntaxe du genre :

Code : Tout sélectionner

MaSelection = Mafeuille.getCellRangeByPosition(0, 3, 6, 10)
Mondocument.currentController.Select(MaSelection)
Ce qui nous donne au total (extrait) :

Code : Tout sélectionner

sub ExoImprimersel
dim Mondocument   as object
dim dispatcher as object
dim MaSelection  as object
dim Mesfeuilles as object
dim Mafeuille as object
dim args3(2) as new com.sun.star.beans.PropertyValue

Mondocument=thiscomponent
Mesfeuilles = Mondocument.sheets
Mafeuille = Mesfeuilles.getByName("CULT") 
MaSelection = Mafeuille.getCellRangeByPosition(0, 3, 6, 10)
Mondocument.currentController.Select(MaSelection)

Mondocument   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

args3(0).Name = "Copies"
args3(0).Value = 1
args3(1).Name = "Selection"
args3(1).Value = true
args3(2).Name = "Collate"
args3(2).Value = false

dispatcher.executeDispatch(Mondocument, ".uno:Print", "", 0, args3())

end sub
krusty
Membre OOrganisé
Membre OOrganisé
Messages : 54
Inscription : 02 juin 2006 10:20

Message par krusty »

Merci à tous, votre aide m'a été d'un grand secours et j'ai enfin pu aboutir à une macro qui fonctionne. Je l'afficherais lorsque je l'aurais totalement terminée dans le cas où d'autres personne sot un jour dans le même cas que moi.

Code : Tout sélectionner

Sub edit()
Document   = ThisComponent.CurrentController.Frame 
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper") 
dim args3(2) as new com.sun.star.beans.PropertyValue  
args3(0).Name = "Copies" 
args3(0).Value = 1 
args3(1).Name = "Selection" 
args3(1).Value = true 
args3(2).Name = "Collate" 
args3(2).Value = false 

dispatcher.executeDispatch(Document, ".uno:Print", "", 0, args3()) 

End Sub

rem test impcult -----------------------------------------------------------------------------------------------

Sub impcult
dim Document as object
dim feuille as object
dim Mafeuille as object
dim Cellule as Object
dim Selection as Object

Document = ThisComponent
Mafeuille = document.sheets
feuille = Mafeuille.getByName("CULT")

For i = 0 to 672 step 56
	Cellule = feuille.getCellByPosition(6, i)
	if Cellule.Value <> "" then
		Selection = feuille.getCellRangeByPosition(0,i, 6,i+54)
		Document.currentController.Select(Selection) 
		edit
	End if
Next i

If feuille.getCellRangeByName("P1").value <>"" then
	Selection =  feuille.getCellRangeByPosition(9,0, 15,54)
	Document.currentController.Select(Selection) 
	edit
End If

...

If feuille.getCellRangeByName("AQ57").value <>"" then
	Selection =  feuille.getCellRangeByPosition(34,56, 40,111)
	Document.currentController.Select(Selection) 
	edit
End If

dim dispatcher as object

document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Nr"
args1(0).Value = 1

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

dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "ToPoint"
args2(0).Value = "$A$1"

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

End Sub
OpenOffice 2.0 sur windows
OpenOffice 1.1 sur Linux Mandrake 10
Répondre