[Résolu] [Calc] Plusieurs boucles à la fois ?

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 !
Hadryan
Membre lOOyal
Membre lOOyal
Messages : 42
Inscription : 19 mai 2009 15:32

[Résolu] [Calc] Plusieurs boucles à la fois ?

Message par Hadryan »

Bonjour à tous,

Je ne sais pas si c'est possible mais j'aimerais:
- Faire plusieurs boucles à la fois sur une feuille.
- Faire les mêmes boucles sur 2 feuilles différentes ('Armée' et 'Armée Ennemi').

Comme j'ai 17 boucles à faire (identiques) sur chaque page, je me voie mal programmer le tout puisque cela serait non seulement très long et sans doutes pas très "propre"... J'espère donc qu'il existe une façon plus simple de faire :roll:

Pour informations, les boucles doivent être faites dans les lignes suivantes:
8 à 11 , 13 à 28 , 30 à 34 , 36 à 38 , 40 à 49 , 51 à 61 , 63 à 64 , 66 à 67 , 69 à 70 , 72 à 73 , 75 à 76 , 78 à 79 , 81 à 82 , 84 à 85 , 87 à 88 , 90 à 91 et 93 à 95.

Voici le bout de code que j'ai fait (pour la première boucle de chaque feuille) pour le moment, il fonctionne bien quoi que je ne sois pas sûr de sa "propreté":

Code : Tout sélectionner

'ROUND 1

Sub Main

'1- Les magiciens attaquent de façon simultanée des 2 côtés (tous en même temps)
	'ATTAQUE DE L'ATTAQUANT
	oSheet = ThisComponent.Sheets.getByName("Armée Ennemi")
	with oSheet
	for r=8 to 11 'calcul les cellules 8 à 11
	tempsomme = .getCellRangeByName("E" & r).value
		If tempsomme > 0 Then ' teste si la somme est positive
		.getCellRangeByName("M" & r).value = .getCellRangeByName("L97").value / .getCellRangeByName("E2").value
		Else
        .getCellRangeByName("M" & r).value = .getCellRangeByName("M" & r).value
        End If
	next r
	end with
	
	'ATTAQUE DU DÉFENSEUR
	oSheet = ThisComponent.Sheets.getByName("Armée")
	with oSheet
	for r=8 to 11 'calcul les cellules 8 à 11
	tempsomme = .getCellRangeByName("E" & r).value
		If tempsomme > 0 Then ' teste si la somme est positive
		.getCellRangeByName("M" & r).value = .getCellRangeByName("L97").value / .getCellRangeByName("E2").value
		Else
        .getCellRangeByName("M" & r).value = .getCellRangeByName("M" & r).value
        End If
	next r
	end with

End Sub
Une dernière chose qui pourrait peut-être aider, les cellules qui sont exclus des calculs à savoir les lignes: 12 , 29 , 35 , 39 , 50 , 62 , 65 , 68 , 71 , 74 , 77 , 80 , 83 , 86 , 89 et 92 sont du textes identiques sur les 2 feuilles donc je ne sais pas s'il est possible de faire une seule boucle en mettant comme condition d'ignorer ses lignes ???

Merci d'avance pour toute piste de solution

Sincèrement
Hadryan
P.S. Le fichier joint comporte des références externes, ignorées les, cela n'a aucune importance pour les besoins de la macro. Cela ne sert qu'à mettre à jour des informations puisées dans 2 autres fichiers, avant la résolution de la macro...
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par Hadryan le 02 sept. 2009 00:57, modifié 1 fois.
Open Office version 3.1.1
Windows Vista Edition Familiale Premium, Service Pack 2
jjk
HédOOniste
HédOOniste
Messages : 1696
Inscription : 27 oct. 2008 14:30

Re: [Calc] Plusieurs boucles à la fois ?

Message par jjk »

Bonsoir
Oui, tu peux traiter tous les groupes de lignes au sein d'une seule boucle, à condition de faire un test sur le fait qu'on traite ou non la ligne.
Par exemple si tu veux ignorer les lignes contenant un texte :

Code : Tout sélectionner

   for r=8 to 11 'calcul les cellules 8 à 95
   if ligne NE contient PAS un texte 'ici mettre la condition à vérifier pour NE PAS ignorer la ligne
   'traitement de la boucle proprement dit
   tempsomme = .getCellRangeByName("E" & r).value
      If tempsomme > 0 Then ' teste si la somme est positive
      .getCellRangeByName("M" & r).value = .getCellRangeByName("L97").value / .getCellRangeByName("E2").value
      Else
        .getCellRangeByName("M" & r).value = .getCellRangeByName("M" & r).value
        End If
   'fin du traitement de la boucle proprement dit
   end if
   next r
OpenOffice 3.1.1 sous XP-SP2 et LibreOffice 3.5.0 sous Win 7
Avatar de l’utilisateur
Loopingss
InconditiOOnnel
InconditiOOnnel
Messages : 783
Inscription : 17 déc. 2008 01:50

Re: [Calc] Plusieurs boucles à la fois ?

Message par Loopingss »

Bonjour,
Cela vous conviendrait il pour traiter une une (deux boucles, l'une Ennemi, l'autre Armée) ?
(Non testé)
J'ai supprimé With et End with car ils me gênaient. Vous pouvez les remettre, bien sûr.

Code : Tout sélectionner

Sub Main

'1- Les magiciens attaquent de façon simultanée des 2 côtés (tous en même temps)
   'ATTAQUE DE L'ATTAQUANT
   oSheetE = ThisComponent.Sheets.getByName("Armée Ennemi")

   for r=8 to 95 'calcul les cellules 8 à 95
   If r <> 12 and R <> 29 and R <> 35 and R <> 39 and R <> 50 and R <> 62 and R <> 65 and R <> 68 and R <> 71_
   and R <> 74 and R <> 77 and R <> 80 and R <> 83 and R <> 86 and R <> 89 and R <> 92 Then
   	tempsomme = oSheetE.getCellRangeByName("E" & r).value
      	If tempsomme > 0 Then ' teste si la somme est positive
     	oSheetE.getCellRangeByName("M" & r).value = oSheetE.getCellRangeByName("L97").value / oSheetE.getCellRangeByName("E2").value
      		Else
        oSheetE.getCellRangeByName("M" & r).value = oSheetE.getCellRangeByName("M" & r).value
        End If
   End If
   next r

   
   'ATTAQUE DU DÉFENSEUR
   oSheetA = ThisComponent.Sheets.getByName("Armée")
 for r=8 to 95 'calcul les cellules 8 à 95
   If r <> 12 and R <> 29 and R <> 35 and R <> 39 and R <> 50 and R <> 62 and R <> 65 and R <> 68 and R <> 71_
   and R <> 74 and R <> 77 and R <> 80 and R <> 83 and R <> 86 and R <> 89 and R <> 92 Then
     tempsomme = oSheetA.getCellRangeByName("E" & r).value
     	If tempsomme > 0 Then ' teste si la somme est positive
      	oSheetA.getCellRangeByName("M" & r).value = oSheetA.getCellRangeByName("L97").value / oSheetA.getCellRangeByName("E2").value
     		 Else
        oSheetA.getCellRangeByName("M" & r).value = oSheetA.getCellRangeByName("M" & r).value
        End If
   End If     
   next r

End Sub
COOordialement
Hadryan
Membre lOOyal
Membre lOOyal
Messages : 42
Inscription : 19 mai 2009 15:32

Re: [Calc] Plusieurs boucles à la fois ?

Message par Hadryan »

Un immense merci Loopingss et jjk, je ne savais pas que l'on pouvait exclure des lignes comme cela... Disons que cela va grandement m'aider pour les 8 autres étapes de la résolution de ce classeur qui je crois vont pas mal tous être similaires...

Encore une fois merci à vous deux
Hadryan
Open Office version 3.1.1
Windows Vista Edition Familiale Premium, Service Pack 2