Posez votre question Signaler

[VB] Boucle [Résolu]

Lydia - Dernière réponse le 26 sep 2007 à 15:19
Bonjour,

Je débute en VB et j'aimerais savoir s'il est possible de faire une boucle dans une déclaration de variables. En effet, j'ai fait un programme qui va chercher des données dans x feuilles Excel et plutôt que d'effectuer x fois la même opération pour chacune des feuilles Excel (en nommant les feuilles feuil1.cells(ligne, colonne) puis feuil2.cells(ligne, colonne)...), j'aimerais faire une boucle qui fasse l'opération une seule fois sur la feuille Excel d'intérêt que j'aurai trouvé au préalable et à laquelle j'aurai donné un indice k = à une valeur entière (feuilk.cells(ligne,colonne)). Le problème, c'est que mon programme boucle indéfiniment, alors que le k de la feuille Excel d'intérêt a déjà pris la valeur entière correspondant à son numéro de feuille. J'ai donc tenté quelques petites modif du genre Feuilk & "." & Cells(ligne, colonne), mais sans succès. Je fais donc appel à vos compétences pour sortir de ce casse-tête et je vous joins la partie de mon programme qui me pose problème :

'Cherche la feuille Excel k correspondant à la sélection ThèmeAlarme de l'utilisateur'
If ThemeAlarme.Text = "Air" Then
k = 1
End If
If ThemeAlarme.Text = "Apnée" Then
k = 2
End If
'... pour x feuilles Excel'

'Boucle cherche la 1ère case vide de la feuille k d'Excel'
Do
If IsEmpty(Feuilk & "." & Cells(j, 1)) Then
Exit Do
End If
j = j + 1
Loop

j = j - 1 'dernière case Excel non vide"

'Affichages de la rubrique MessageAlarme dépendant de la rubrique ThemeAlarme'
For i = 2 To j
MessageAlarme.AddItem (Feuilk & "." & Cells(i, 1))
Next i

Merci d'avance au petit génie qui m'aidera à résoudre mon problème...
Lire la suite 

[VB] Boucle »

13 réponses
Réponse
+2
moins plus
re:

Avec cette sub, vérifie que les noms de feuilles sont valide!

Cette sub créé une feuille et y place tous les nomd de feuilles!

Sub TestNomFeuille()

Dim CetteFeuille As Worksheet
Dim I As Integer

ActiveWorkbook.Sheets.Add.Name = "NomFeuille"

I = 1
For Each CetteFeuille In Worksheets
Sheets("NomFeuille").Cells(I, 1).Value = CetteFeuille.Name
I = (I + 1)
Next CetteFeuille

End Sub


Lupin
Ajouter un commentaire
Réponse
+0
moins plus
si themealarme est listbox
tu récuperes sa proprieté index attention
sans doute départ à 0
Lydia - 29 avr 2005 à 15:37
Excuse moi, mais étant une simple débutante en VB, je n'ai pas compris ta suggestion. Pour répondre à ton interoogation, ThemeAlarme est une combobox et non une listbox.

Peux-tu éclairer la lanterne d'une pauvre petite débutante en VB STP.

Merci d'avance.
Ajouter un commentaire
Réponse
+0
moins plus
Tu devrais plutot déclarer une variable
Dim Mafeuille as Worksheet

et pour l'affecter (à mettre après ta recherche de la feuille correspondant au thème de l'utilisateur)
set Mafeuille = ActiveWorkbook.Worksheet("Feuil" & k)

et apres a chaque fois que tu voudras t'en servir tu feras simplement Mafeuille.cells(....)

ca devrait etre bon normalement
Ajouter un commentaire
Réponse
+0
moins plus
par contre tet kil y'a un s a worksheet chais plus trop, donc ca donnerait

set Mafeuille = ActiveWorkbook.Worksheets("Feuil" & k)
Lydia - 2 mai 2005 à 11:23
Merci pour ta réponse FMAT !!!

Ca fait plaisir de pouvoir trouver de l'aide en prog en temps réel !!!

Par contre, j'ai suivi tes conseils et la ligne de prog
Set Mafeuille = ActiveWorkbook.Worksheets("Feuil" & k)
provoque un bug dans le programme. J'ai pourtant déclaré Mafeuil : Dim Mafeuille As Worksheets

J'ai essayé avec un s et sans s à worsheet, mais il y a toujours un bug... Je vais continuer à chercher pourquoi mon programme ne tourne toujours pas et en tout cas, je te remercie pour ton aide...
Ajouter un commentaire
Réponse
+0
moins plus
Bonjour Lydia,
Tu peux essayer ça :
Sub Boucle()

  Select Case ThemeAlarm_Text
  Case "Air"
    k = 1
  Case "Apnée"
    k = 2
  End Select
  
  Sheets("Feuil" & k).Select
  
  For i = 2 To Range(Cells(1, 1), Cells(1, 1)).End(xlDown).Row
    MessageAlarme.AddItem Cells(i, 1).Value
  Next i
  
End Sub

Ajx.
Lydia - 2 mai 2005 à 11:36
Salut Ajx,

Merci pour ton aide !!!

J'ai également suivi tes conseils qui m'ont été très utiles, surtout la partie concernant la valeur de mon indice k :
Select Case ThemeAlarme_Text
Case "Air"
k = 1
Case ...
End select

Par contre, la partie du programme qui sélectionne la bonne feuille Excel provoque un bug dans le programme que je ne sais pas résoudre :
Sheets("Feuil" & k).Select

J'ai donc essayé de déclarer une variable Mafeuille : Dim Mafeuille As Worksheets comme proposé par FMAT puis j'ai tenté un mélange de vos deux suggestions :
Set Mafeuille = ActiveWorkbook.Worksheets("Feuil" & k)
Ma feuille("Feuil" & k).Select

Mais là encore le programme ne fonctionne pas... Je vais donc chercher un peu plus en détail dans l'aide de VB pour tenter de trouver l'erreur. En tout cas, merci pour ton aide à bientôt peut-être si tu as une nouvelle suggestion.

Lydia.
Ajouter un commentaire
Réponse
+0
moins plus
Salut,

Fait comme ceci :

Sub TestFeuille()

..Dim K As Integer
..Dim MaFeuille As Worksheet

..For K = 1 To 3
....Set MaFeuille = Worksheets("Feuil" & K)
....MsgBox MaFeuille.Name
..Next K

End Sub

Sous OXP, WXP ça roule très bien chez moi.

Lupin
Lydia - 2 mai 2005 à 18:53
Salut Arsène,

J'ai essayé ta suggestion dans mon programme :
For k = 1 To 24
Set MaFeuille = Worksheets("Feuil" & k)
MsgBox MaFeuille.Name
Next k

Mais il y a toujours un bug... Quand je disais que je débutais en VB...

En fait, les message d'erreurs sont les suivants :
Worksheets("Feuil" & k) = <l'indice n'appartient pas à la sélection>
et MaFeuille = nothing

Donc je ne sais pas si çà éclaire la lanterne d'un gentleman cambrioleur, en tout cas aucune ampoule n'est venue éclairer la mienne... Mais merci quand-même de ton aide...

Lydia.
Ajouter un commentaire
Réponse
+0
moins plus
re:

en fait :
Worksheets("Feuil" & k) = <l'indice n'appartient pas à la sélection>

-->> que vaut [K] ?

Le message t'indique que tu tente de sélectionner une feuille qui n'existe pas !

Lupin
Ajouter un commentaire
Réponse
+0
moins plus
Salut,

J'ai vu ton souci et j'ai créer ce petit module pour une seule feuille et ça marche.
Il ne reste qu'à l'adapter à ton cas.

J'ai consideré dans mon module une seule feuille (donc k=1)

sub a()
Dim k as long, r as long
Dim i as long
k=1 ' donc la 1ere feuille
r=1 'initialisation de la variable ( on commence de la 1ere ligne)

Do
If IsEmpty(Sheets("feuil" & k).Cells(r,1)) Then
'on cherche dans la 1ere colonne
Exit Do
End If
r=r+1
Loop
MsgBox "numèro de ligne de la 1ere cell vide " & r

'on commence à la 1er ligne jusqu'à la dernière cellule non vide
For i=1 to r-1
'affiche le contenu des cellules non vides
MsgBox "contenu cells = " & Sheets("feuil" & k).Cells(i,1)
Next i
End Sub

Les MsgBox ne sont que pour tester.
Tu adaptes après à ton exercice :

MessageAlarme.AddItem Sheets("feuil" & k).Cells(i,1)

Je vais écrire encore une fois le module sans commentaires

-------------------------------------------------------------------
sub a()
Dim k as long, r as long
Dim i as long
k=1
r=1

Do
If IsEmpty(Sheets("feuil" & k).Cells(r,1)) Then
Exit Do
End If
r=r+1
Loop
MsgBox "numèro de ligne de la 1ere cell vide " & r

For i=1 to r-1
MsgBox "contenu cells = " & Sheets("feuil" & k).Cells(i,1)
Next i
End Sub
------------------------------------------------------------------
A+
Ajouter un commentaire
Réponse
+0
moins plus
est ce que cette boucle est juste ?sinon ou est le probléme? et merci
Ajouter un commentaire
Ce document intitulé « [VB] Boucle » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
5 extensions si vous voulez revenir à l'ancien Facebook