IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Problème étrange avec des plages de cellules


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Inscrit en
    Janvier 2004
    Messages
    173
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 173
    Points : 127
    Points
    127
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Points : 9 402
    Points
    9 402
    Par défaut
    Bonjour,

    dans la 2eme boucle ajoute .Cells
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  3. #3
    Membre habitué
    Inscrit en
    Janvier 2004
    Messages
    173
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 173
    Points : 127
    Points
    127
    Par défaut
    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.

  4. #4
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Points : 9 402
    Points
    9 402
    Par défaut
    Je n'ai qu'une hypothèse qui restera a confirmer, mais si dans une boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each ligne In plage.Rows
    ligne devient de type Row alors dans ce cas Cellule se comporte comme si tu avais écrit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each cellule In ligne.Rows
    Mais ce n'est qu'une hypothèse

  5. #5
    Membre habitué
    Inscrit en
    Janvier 2004
    Messages
    173
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 173
    Points : 127
    Points
    127
    Par défaut
    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.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2007] Problème étrange avec TransferSpreadsheet et nom de cellules
    Par yonnel dans le forum VBA Access
    Réponses: 3
    Dernier message: 24/09/2014, 13h18
  2. [XL-2003] Problème avec des plages de cellules non rectangulaires
    Par rodival dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 24/08/2009, 16h49
  3. problème étrange avec excel
    Par lanfeust42 dans le forum Modules
    Réponses: 1
    Dernier message: 15/06/2006, 11h57
  4. Problème simple avec des checkbox
    Par nanor21 dans le forum Langage
    Réponses: 2
    Dernier message: 07/05/2006, 01h26
  5. [FLASH MX2004 PRO] Problème étrange avec LoadClip...
    Par josemoroide dans le forum Flash
    Réponses: 6
    Dernier message: 04/08/2004, 16h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo