VBA XL : balayage d'onglets
Résolu/Fermé
A voir également:
- VBA XL : balayage d'onglets
- Xl comparator - Télécharger - Tableur
- Vba récupérer valeur cellule ✓ - Forum VB / VBA
- Mkdir vba ✓ - Forum VB / VBA
- Excel compter cellule couleur sans vba - Guide
- Vba range avec variable ✓ - Forum VB / VBA
8 réponses
Bonjour,
voici la correction :
i = 3
do while cells(i,2) <> ""
feuille = cells(i,2)
Sheets(feuille).Select
' action appliquée à l'onglet
i=i+1
loop
voici la correction :
i = 3
do while cells(i,2) <> ""
feuille = cells(i,2)
Sheets(feuille).Select
' action appliquée à l'onglet
i=i+1
loop
Bonjour PVS,
En effet, il y a un mauvais type dans votre exemple !
Info
En effet, il y a un mauvais type dans votre exemple !
Option Explicit Sub BalayageFeuille() Dim Plage As Range, LOT As Range, Feuille As Worksheet Set Plage = Range("B3:B6") For Each LOT In Plage Set Feuille = Sheets(LOT.Value) Feuille.Select Range("A1").Value = "Visité" Next LOT End Sub '
Info
lermite222
Messages postés
8724
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 190
Modifié par lermite222 le 4/02/2011 à 14:18
Modifié par lermite222 le 4/02/2011 à 14:18
Bonjour tou(te)s
A+
L'expérience instruit plus sûrement que le conseil. (André Gide)
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Ça doit se passer sur le forum pour que tous puisse y participer ou en profiter.
Option Explicit 'A PLACER IMPERATIVEMENT DANS UN MODULE .BAS 'Module1 par exemple Sub SurToutesFeuilles() Dim F As Integer, Cel As Range For F = 1 To Sheets.Count For Each Cel In Sheets(F).Range("B3:B6") ' pour l'exemple mettre nombre aléatoire dans ces cellules Cel.Value = Int(Rnd * 100) Next Cel Next F End Sub
A+
L'expérience instruit plus sûrement que le conseil. (André Gide)
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Ça doit se passer sur le forum pour que tous puisse y participer ou en profiter.
Bonjour,
Merci pour vos réponses.
Entre temps, en tatonnant, j'avais écris ceci :
Sub Actu_onglets()
'
Dim C As Variant
Dim LOT As Variant
For Each C In range("B11:B52")
LOT = C
Sheets(LOT).Select
application.Run "mon traitement"
Next C
Et cela marche très bien, même si je n'ai pas compris pourquoi il fallait que j'utilise deux variables car si j'écris Sheets(C).Select cela ne marche pas.
J'aurais bien voulu remplacer range("B11:B52") par un nom de zone pour augmenter le niveau de paramétrage et ne pas avoir à entrer dans la macro en cas de modification, mais cela n'a pas marché.
Merci pour vos réponses.
Entre temps, en tatonnant, j'avais écris ceci :
Sub Actu_onglets()
'
Dim C As Variant
Dim LOT As Variant
For Each C In range("B11:B52")
LOT = C
Sheets(LOT).Select
application.Run "mon traitement"
Next C
Et cela marche très bien, même si je n'ai pas compris pourquoi il fallait que j'utilise deux variables car si j'écris Sheets(C).Select cela ne marche pas.
J'aurais bien voulu remplacer range("B11:B52") par un nom de zone pour augmenter le niveau de paramétrage et ne pas avoir à entrer dans la macro en cas de modification, mais cela n'a pas marché.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
ccm81
Messages postés
10902
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
18 novembre 2024
2 425
4 févr. 2011 à 15:33
4 févr. 2011 à 15:33
bonjour à tous
RQ1. si la plage B11:B52 contient
- des noms de feuilles LOT est de type string (dim LOT as string)
- des numéros de feuilles, LOT est de type long (dim LOT as long)
et
LOT = C
devient
LOT = C.Value
RQ2. on peut remplacer B11:B52 par un nom de plage par exemple TabFeuilles
et
for Each C In range("B11:B52")
devient
for Each C In range("TabFeuilles")
bonne suite
RQ1. si la plage B11:B52 contient
- des noms de feuilles LOT est de type string (dim LOT as string)
- des numéros de feuilles, LOT est de type long (dim LOT as long)
et
LOT = C
devient
LOT = C.Value
RQ2. on peut remplacer B11:B52 par un nom de plage par exemple TabFeuilles
et
for Each C In range("B11:B52")
devient
for Each C In range("TabFeuilles")
bonne suite
Effectivement cela marche bien avec le nom de zone en repectant la syntaxe.
Par contre si j'écris
Dim C As string
J'ai un message d'erreur car dans une boucle For....Each on ne peut utiliser que des variables Variant ou bien Object.
Ma version actuelle :
Sub Actu_onglets()
'
Dim C As Variant
Dim LOT As Variant
For Each C In range("Liste_onglets")
LOT = C
Sheets(LOT).Select
application.Run "RetData"
Next C
'
Sheets("INIT").Select
For Each C In range("Liste_onglets")
LOT = C
Sheets(LOT).Select
application.Run "Disconnect"
Next C
Sheets("INIT").Select
End Sub
Par contre si j'écris
Dim C As string
J'ai un message d'erreur car dans une boucle For....Each on ne peut utiliser que des variables Variant ou bien Object.
Ma version actuelle :
Sub Actu_onglets()
'
Dim C As Variant
Dim LOT As Variant
For Each C In range("Liste_onglets")
LOT = C
Sheets(LOT).Select
application.Run "RetData"
Next C
'
Sheets("INIT").Select
For Each C In range("Liste_onglets")
LOT = C
Sheets(LOT).Select
application.Run "Disconnect"
Next C
Sheets("INIT").Select
End Sub
ccm81
Messages postés
10902
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
18 novembre 2024
2 425
Modifié par ccm81 le 4/02/2011 à 15:50
Modifié par ccm81 le 4/02/2011 à 15:50
re
C est la cellule et C.Value sa valeur dans la feuille, donc
devrait fonctionner
bonne suite
C est la cellule et C.Value sa valeur dans la feuille, donc
Sub Actu_onglets() Dim C As Range For Each C In range("Liste_onglets") Sheets(C.Value).Select application.Run "RetData" Next C Sheets("INIT").Select For Each C In range("Liste_onglets") Sheets(C.Value).Select application.Run "Disconnect" Next C Sheets("INIT").Select End Sub
devrait fonctionner
bonne suite