Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2010 VBA - For Each multiple

  • Initiateur de la discussion Initiateur de la discussion YanCad
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Y

YanCad

Guest
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.
 
Bonjour,

tel quel, c'est d'aucune utilité puisque qu'à la première boucle le 1' saut(goto) fera que la suite ne sera jamais exécutée !

si tu veux un retour il faut utiliser gosub !
 
Dernière édition:
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.
 
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

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
 
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

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:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…