Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/08/2011, 17h46   #1
Membre du Club
 
Inscription : janvier 2004
Messages : 123
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 123
Points : 59
Points : 59
Envoyer un message via MSN à ANOVA
Par défaut Problème étrange avec des plages de cellules

Bonjour,

je vous contacte, car j'ai un problème très étrange avec des plages de cellules. Le voici. Je fais cette Sub :

Code :
1
2
3
4
5
6
7
8
9
Sub test()
    Dim ligne As Range
    Set ligne = Range("B4:O4")
 
    Dim cellule As Range
    For Each cellule In ligne
        MsgBox cellule.Address
    Next cellule
End Sub
elle est un peu stupide cette Sub (j'en conviens, c'est pour être didactique), mais elle fonctionne. Elle m'affiche les noms de toutes les cellules de la ligne.

Ensuite, je fais cette Sub :

Code :
1
2
3
4
5
6
7
8
Sub test2()
    Dim plage As Range
    Set plage = Range("B4:O10")
    Dim ligne As Range
    For Each ligne In plage.Rows
        MsgBox ligne.Address
    Next ligne
End Sub
Pas beaucoup plus intelligente, mais là encore, elle a le mérite de fonctionner. Elle me donne les adresses de toutes les lignes de la plage.

Maintenant je combine les deux :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
Sub test3()
    Dim plage As Range
    Set plage = Range("B4:O10")
    Dim ligne As Range
    Dim cellule As Range
    For Each ligne In plage.Rows
        'MsgBox ligne.Address
        For Each cellule In ligne
            MsgBox cellule.Address
        Next cellule
    Next ligne
End Sub
Et là, ça ne renvoie pas le résultat voulu (à savoir les adresses de toutes les cellules de la plage). Ma question est : pourquoi ?

Juste pour ceux qui s'apprêtent à me répondre que pour avoir toutes les adresses de cellules de la plage, il n'est pas nécessaire de passer par l'étape qui consiste à parcourir les lignes, c'est exact pour cet exemple. Mais en fait mon problème est de faire une fonction qui me renvoie le code XHTML d'une en tête d'un tableau en fonction de la plage qu'on passe en paramètre :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
Function creerEnTeteXHTML(ByVal plageEnTete As Range) As String
    Dim resultat As String
    resultat = "<thead>"
    Dim ligne As Range
    Dim cellule As Range
    Dim i As Integer
    For Each ligne In plageEnTete.Rows
        Dim cellule As Range
        For Each cellule In ligne
            If cellule.Address = ligne(1).Address Then
                resultat = resultat + "<tr><th>" + cellule.Text + "</th>"
            ElseIf cellule.Address = ligne(ligne.Count).Address Then
                resultat = resultat + "<th>" + cellule.Text + "</th></tr>"
            Else
                resultat = resultat + "<th>" + cellule.Text + "</th>"
            End If
        Next i
    Next ligne
 
    creerEnTeteXHTML = resultat + "</thead>"
End Function
Je vous remercie.
ANOVA est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/08/2011, 18h01   #2
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 885
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 885
Points : 7 151
Points : 7 151
Bonjour,

dans la 2eme boucle ajoute .Cells
Code :
1
2
3
4
5
6
7
8
9
10
11
12
Sub test3()
    Dim plage As Range
    Set plage = Range("B4:O10")
    Dim ligne As Range
    Dim cellule As Range
    For Each ligne In plage.Rows
        'MsgBox ligne.Address
        For Each cellule In ligne.Cells
            MsgBox cellule.Address
        Next cellule
    Next ligne
End Sub
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/08/2011, 19h31   #3
Membre du Club
 
Inscription : janvier 2004
Messages : 123
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 123
Points : 59
Points : 59
Envoyer un message via MSN à ANOVA
Merci jfontaine. Ca fonctionne effectivement. Par contre (histoire que je comprenne où est mon erreur), peux-tu m'indiquer pour quelle raison le .cells n'est pas nécessaire dans la Sub test() ? (la première, car c'est exactement la même chose non ?)

Encore merci.
ANOVA est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/08/2011, 19h37   #4
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 885
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 885
Points : 7 151
Points : 7 151
Je n'ai qu'une hypothèse qui restera a confirmer, mais si dans une boucle
Code :
For Each ligne In plage.Rows
ligne devient de type Row alors dans ce cas Cellule se comporte comme si tu avais écrit
Code :
For Each cellule In ligne.Rows
Mais ce n'est qu'une hypothèse
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/08/2011, 23h12   #5
Membre du Club
 
Inscription : janvier 2004
Messages : 123
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 123
Points : 59
Points : 59
Envoyer un message via MSN à ANOVA
Ok, donc ça me rassure, ma question n'était pas stupide. En tout cas, merci pour ton aide, ça va vraiment beaucoup me servir cette fonction.
ANOVA est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h06.


 
 
 
 
Partenaires

Hébergement Web