XL 2010 VBA - For Each multiple

YanCad

XLDnaute Nouveau
Bonjour,

Je cherche à creer plusieurs "FOR EACH" qui pointent dans une même routine:
Je ne sais pas comment renvoyer à "Programme:" plusieurs fois
Merci de m'aider

Code:
For Each x In Plage1
Programme:

(ici le code)

Next x

For Each x In Plage2
GoTo Programme
For Each x In Plage3
GoTo Programme
For Each x In Plage4
GoTo Programme

Merci.
 

Calvus

XLDnaute Barbatruc
Bonjour,

Je ne suis pas sûr, mais il me semble que tu devrais écrire comme ceci :
VB:
For Each x In Plage1
GoTo Programme
Next x

For Each x In Plage2
GoTo Programme
next
For Each x In Plage3
GoTo Programme
next
For Each x In Plage4
GoTo Programme
next
Programme:

(ici le code)

Et que tu devrais différencier le nom de tes variables.

A+

EDIT : Bonjour Roland, et pour Yancad, sache que Roland est beaucoup plus calé que moi. Tu peux donc lui faire confiance.
 

ROGER2327

XLDnaute Barbatruc
Bonsoir à tous.

Voyez si le classeur joint peut vous inspirer...
Code :
VB:
Option Explicit

Sub toto()  ' Place son adresse dans chacune des cellules
            ' des plages définies par Set oPlg = ...
'
Dim oPrg$, oCel As Range, oPlg As Range

    Set oPlg = Feuille01.Range("A1:C4")
    For Each oCel In oPlg
      GoSub Programme
      oCel.Value = oPrg
    Next

    Set oPlg = Feuille02.Range("B6:E7")
    For Each oCel In oPlg
      GoSub Programme
      oCel.Value = oPrg
    Next

    Set oPlg = Feuille03.Range("C9:E14")
    For Each oCel In oPlg
      GoSub Programme
      oCel.Value = oPrg
    Next

  Set oPlg = Nothing

Exit Sub

'———————————————————————————————————
Programme:
  oPrg = oCel.Address(0, 0)
Return
'———————————————————————————————————

End Sub

Sub tata()  ' Fait la même chose que toto.
'
Dim i&, oPrg$, oCel As Range, oPlg()

    oPlg = Array(Feuille01.Range("A1:C4"), Feuille02.Range("B6:E7"), Feuille03.Range("C9:E14"))
    
    For i = 0 To UBound(oPlg)
        For Each oCel In oPlg(i).Cells
            GoSub Programme
            oCel.Value = oPrg
        Next
    Next

    Erase oPlg

Exit Sub

'———————————————————————————————————
Programme:
  oPrg = oCel.Address(0, 0)
Return
'———————————————————————————————————

End Sub

Sub RAZ()   'Efface le contenu de tous les onglets.
'
Dim oFeuille As Worksheet
    For Each oFeuille In CeClasseur.Worksheets
        oFeuille.UsedRange.ClearContents
    Next
End Sub

Bonne soirée.


ℝOGER2327
#8465


Samedi 28 Décervelage 144 (Repopulation - Vacuation)
6 Pluviôse An CCXXV, 7,5339h - laurier-tin
2017-W04-3T18:04:53Z
 

Pièces jointes

  • Expérience.xlsm
    22.2 KB · Affichages: 27

Si...

XLDnaute Barbatruc
salut

une autre façon de faire (2 exemples)
VB:
Dim n As Byte, P As Range, C As Range
Private Sub CommandButton1_Click()
    For n = 0 To 2
        Set P = Array([Plage1], [Plage2], [Plage3])(n)
        'macro commune, ici
        For Each C In P: C(1, 2) = Left(C, 1): Next
    Next
End Sub

Private Sub CommandButton2_Click()
    For n = 0 To 2
        Set P = Array([Plage1], [Plage2], [Plage3])(n)
        'macro commune, ailleurs
        défait
    Next
End Sub
Sub défait()
    For Each C In P: C(1, 2) = "": Next
    MsgBox "et " & n + 1
End Sub
 

Pièces jointes

  • Macro pour Array.xlsm
    24.5 KB · Affichages: 33

Roland_M

XLDnaute Barbatruc
Bonsoir tout le monde,

Bonsoir , Slt les anciens
Je découvre le GOSUB ?? je rajeuni de 30 ans !!
le CALL n'est-il pas plus d'actualité ou différent ?
Sinon si besoin de garder des résultats > La Fonction
J'aimerais bien en savoir + aussi
Bonne soirée

L'appel d'une routine, avec ou sans call, est toujours d'actualité, Gosub est simplement différent.
il s'utilise dans une même routine !
avec pour le retour l'instruction Return

exemple tout simple

Code:
Sub Demo()
Dim X%, I%
X = 1
For I = 1 To 10
  GoSub CalcX
Next
MsgBox X
Exit Sub '< !!!

CalcX: '< appel par gosub
X = X * 2
Return '< !!!
End Sub
 
Dernière édition:

Discussions similaires

Réponses
11
Affichages
532

Statistiques des forums

Discussions
312 502
Messages
2 089 049
Membres
104 012
dernier inscrit
baffyt2