Explication code Vba ?

Calvus

XLDnaute Barbatruc
Bonjour le forum,

Voici ce que j'ai écrit :

Code:
Sub test()
With Sheets("feuil1").Select

.Range("g3,i3,k3,g6,i6,k6").Value = "Vide"
End With
End Sub

Ça fonctionne.

Or :

Code:
Sub test()
With Sheets("feuil1":"feuil3").Select

.Range("g3,i3,k3,g6,i6,k6").Value = "Vide"
End With
End Sub
ne fonctionne pas ! Pourquoi ?

Code:
Sheets("feuil1", "feuil3").Select
non plus évidemment.

J'ai bien sûr cherché sur le forum, et modifié comme suit :
Code:
Sub test()
With Sheets(Array("feuil1", "feuil2")).Select

Range("g3,i3,k3,g6,i6,k6").Value = "Vide"
End With
End Sub

Seulement le changement ne se fait que sur la première feuille.

J'ai réussi à un moment à faire une inscription sur 3 feuilles, mais je ne sais plus comment.

Sinon faudrait il écrire : Case Is = 1, 2, 3..etc ?

Pouvez vous donc m'expliquer ce qu'il faut comprendre dans la sélection multiple de feuilles ?

Merci
 
C

Compte Supprimé 979

Guest
Re : Explication code Vba ?

Bonjour Calvus,

Parfois VBA ne veut pas des choses qui nous paraissent logique :eek:
Voici ce que tu peux utiliser à la place ;)
Code:
Sub Test()
  Dim Ind As Integer, TabSht() As String
  ' Définit le tableau des feuilles à parcourir
  TabSht = Split("Feuil1,Feuil2", ",")
  ' Pour chaque feuille
  For Ind = 0 To UBound(TabSht)
    With Sheets(TabSht(Ind))
      .Range("G3,I3,K3,G6,I6,K6").Value = "Vide"
    End With
  Next Ind
End Sub

A+
 

Calvus

XLDnaute Barbatruc
Re : Explication code Vba ?

Bonjour BrunoM45,

Je te remercie. J'ai examiné ton code avant de répondre. Je n'aurais évidemment jamais trouvé ça tout seul !
Je vais étudier ça de plus près. Je ne connaissais pas Split, et vaguement Ubound.

Et je viens de passer du temps pour finalement remplacer ( dans ma tête ) Ind par i, pour pouvoir à peu près comprendre le
Code:
Sheets(TabSht(Ind))

Ind n'est finalement qu'une variable, c'est ça ?

On pourrait donc traduire par :

Feuille(Tableau(1))
Feuille(Tableau(2))
Feuille(Tableau(3))

C'est ça ?

Et est ce le plus simple comme procédure ?

Merci et tout cas et bonne soirée.
 
C

Compte Supprimé 979

Guest
Re : Explication code Vba ?

Re,

"Ind" est bien une variable, je l'utilise par l'abréviation de "Indice"
Ta traduction est parfaite ;)

Pour la procédure, je n'en connais pas d'autres, mais possible que ça existe :p

A+
 

Calvus

XLDnaute Barbatruc
Re : Explication code Vba ?

Re,
Re,

Ta traduction est parfaite ;)

Merci merci merci.. je rougis ! :eek:

Vois tu, c'est ça qui est difficile quand on veut apprendre? C'est qu'on ne passe non plus des échelons, mais des montagnes. Dur de trouver quelque chose de progressif.

Sinon, est ce à dire qu'il faille renseigner tous les noms de feuilles dans la fonction Split ?
Là non plus on ne peut pas dire : Split(feuille 1 à 48) ??

Je vais écrire aux programmeurs de Microsoft moi !!

Merci encore.
A+
 

Si...

XLDnaute Barbatruc
Re : Explication code Vba ?

salut

Array pour Array, autre proposition
Code:
Sub test()
  Dim F As Worksheet, i As Byte
  For i = 0 To 1
    'tableau de feuilles qui commence toujours par l'index 0 
     Set F = Array(Sheets("Feuil1"), Sheets("Feuil2"))(i)
    F.Range("G3,I3,K3,G6,I6,K6") = "Vide"
  Next
End Sub
les feuilles doivent être parcourues une par une !
 

Paf

XLDnaute Barbatruc
Re : Explication code Vba ?

Bonjour à tous

S'il s'agit de balayer toutes les feuilles

Code:
For i = 1 To Worksheets.Count
   Worksheets(i).Range("G3,I3,K3,G6,I6,K6") = "Vide"
Next

si certaines feuilles ne doivent pas être traitées:

Code:
For i = 1 To Worksheets.Count
   If  Worksheets(i).Name <> "Accueil"  Then   Worksheets(i).Range("G3,I3,K3,G6,I6,K6") = "Vide"
Next

A+
 

Calvus

XLDnaute Barbatruc
Re : Explication code Vba ?

Re,

Incroyable Paf ! Ca existe donc ! Merci.

Le plus drôle, c'est que j'avais essayé for i = 1 to Sheets.Count car j'avais consulté l'aide. Mais ça s"était arrêté là, le reste du code ne fonctionnant plus.

Et la seconde formule est parfaite pour mon cas réel.

Merci
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Explication code Vba ?

Bonsoir Calvus,

(...) Là aussi obligé d'écrire tous les noms des feuilles?
Si tu en as 48, tu les écris toutes ? C'est ça ? (...) Etrange qu'il n'y ait pas plus simple tout de même non ?

Il faut bien que la procédure sache sur quelles feuilles elle doit agir. Sans indiquer les noms des feuilles, comment le saurait elle ?

A moins de vouloir le faire sur toutes les feuilles par une boucle (excepté quelques feuilles) :
Code:
Sub test()
Dim F As Worksheet
  For Each F In Worksheets
    If F.Name <> "Feuil1" And F.Name <> "Feuil4" Then F.Range("g3,i3,k3,g6,i6,k6") = "vide"
  Next F
End Sub
 
Dernière édition:

Si...

XLDnaute Barbatruc
Re : Explication code Vba ?

re re


je répondais à la deuxième proposition de PaF en disant que le problème était le même et je ne connais pas de méthode simple pour éviter de citer tous les cas .

Garder ou exclure la démarche est la même "il faut les citer". En cas de nombres différents, on prendra les moins nombreux.
 
Dernière édition:

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 086
Messages
2 085 197
Membres
102 814
dernier inscrit
JLGalley