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 avec les variables tableaux [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 19
    Points : 10
    Points
    10
    Par défaut Problème avec les variables tableaux
    Bonjour,

    J'arrive à saturation donc je poste pour avoir de l'aide si possible. Je simlifie un peu mon pb et localise l'explication là ou je pense avoir mon pb.

    J'ai 10 colonnes séparées chacunes de 3 colonnes. Dans chaque colonne les mots "Moyens" et "Domages" ne sont présents qu'une fois.
    Ma macro boucle sur les 10 colonnes, détecte les deux mots.
    Je veux stocker les cellules présentes entre ces deux mots et pour toutes les colonnes dans une variable tableau dynamique (je ne connais pas le nombre de lignes entre les deux mots) à une dimension. Comment puis-je faire? Avez=vous une astuce?

    Merci de vos réponses

  2. #2
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    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
    23
    24
    25
    26
    27
    28
    29
    Dim LastLig As Long, i As Long, Moy As Long, Dom As Long
    Dim j As Integer, Nbre As Integer, NbIni As Integer, DimTablo As Integer
    Dim c As Range
    Dim Tablo()
     
    ReDim Tablo(1 To 1)
    With Sheets("Feuil3")
        For j = 1 To 37 Step 4
            LastLig = .Cells(Rows.Count, j).End(xlUp).Row
            Set c = .Range(.Cells(1, j), .Cells(LastLig, j)).Find("Moyens", lookat:=xlWhole)
            If Not c Is Nothing Then
                Moy = c.Row
                Set c = .Range(.Cells(1, j), .Cells(LastLig, j)).Find("Domage", lookat:=xlWhole)
                If Not c Is Nothing Then
                    Dom = IIf(c.Row > Moy, c.Row, Moy)
                    Moy = IIf(c.Row > Moy, Moy, c.Row)
                    Nbre = Dom - Moy - 1
                    NbIni = IIf(j = 1, 0, UBound(Tablo))
                    DimTablo = NbIni + Nbre
                    ReDim Preserve Tablo(1 To DimTablo)
                    For i = 1 To Nbre
                        Tablo(NbIni + i) = .Cells(Moy + i, j)
                    Next i
                End If
            End If
        Next j
        MsgBox UBound(Tablo)
        .Range("B1:B" & UBound(Tablo)) = Application.Transpose(Tablo)
    End With

  3. #3
    Membre à l'essai
    Inscrit en
    Juillet 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 19
    Points : 10
    Points
    10
    Par défaut
    Ca m'donne envie d'pleurer tellement c'est beau
    Merci beaucoup
    MouM

  4. #4
    Membre à l'essai
    Inscrit en
    Juillet 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 19
    Points : 10
    Points
    10
    Par défaut Allé un peu vite
    Aie,

    Quand j'essaye d'ajoueter une deuxième dimension, j'obtiens l'erreur "runtime error '9': Subscript out of range". C'est l'eerur que j'obtenais déjà avant mon premier post...

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    Dim LastLig As Long, i As Long, Moy As Long, Dom As Long
    Dim j As Integer, Nbre As Integer, NbIni As Integer, DimTablo As Integer
    Dim c As Range
    Dim Tablo()
     
    ReDim Tablo(1 To 1, 1 To 1)
    With Sheets("Feuil3")
        For j = 1 To 37 Step 4
            LastLig = .Cells(Rows.Count, j).End(xlUp).Row
            Set c = .Range(.Cells(1, j), .Cells(LastLig, j)).Find("Moyens", lookat:=xlWhole)
            If Not c Is Nothing Then
                Moy = c.Row
                Set c = .Range(.Cells(1, j), .Cells(LastLig, j)).Find("Domage", lookat:=xlWhole)
                If Not c Is Nothing Then
                    Dom = IIf(c.Row > Moy, c.Row, Moy)
                    Moy = IIf(c.Row > Moy, Moy, c.Row)
                    Nbre = Dom - Moy - 1
                    NbIni = IIf(j = 1, 0, UBound(Tablo, 1))
                    DimTablo = NbIni + Nbre
                    ReDim Preserve Tablo(1 To DimTablo, 1 To 3)
                    For i = 1 To Nbre
                        Tablo(NbIni + i, 1) = .Cells(Moy + i, j)
                        Tablo(NbIni + i, 2) = FonctionPerso(.Cells(Moy + i, j))
                        Tablo(NbIni + i, 2) = .Cells(Moy + i, j+1)
                    Next i
                End If
            End If
        Next j
        MsgBox UBound(Tablo)
        .Range("B1:B" & UBound(Tablo)) = Application.Transpose(Tablo)
    End With
    Je ne vois vraiment pas ce qui peut clocher et la répercussion de ce que j'ai fait sur le résultat. Si quelqu'un a une réponse, ca serait cool.

    Merci.

    MouM

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    592
    Détails du profil
    Informations personnelles :
    Âge : 74
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 592
    Points : 730
    Points
    730
    Par défaut
    Bonsoir,

    Avec une erreur de ce type, il faut cliquer sur debug puis passer la souris sur la ligne surlignée, les valeurs des variables sont alors visualisées, il est très rare que cela ne montre pas le problème.

    PPz

  6. #6
    Expert éminent
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Points : 6 699
    Points
    6 699
    Par défaut
    Bonjour,

    Une bonne chose, encore plus révélatrice pour voir le contenu des Array est d'afficher la fenêtre Variable Locales dans l'éditeur via affichage etc..

    vois sinon :

    Utiliser les variables tableaux en VBA Excel


    Conceptualisation des variables tableau en VBA


    cordialement,

    Didier

  7. #7
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    Dim LastLig As Long, i As Long, Moy As Long, Dom As Long
    Dim j As Integer, Nbre As Integer, NbIni As Integer, DimTablo As Integer
    Dim c As Range
    Dim Tablo()
     
    ReDim Tablo(1 To 3, 1 To 1)
    With Sheets("Feuil3")
        For j = 1 To 37 Step 4
            LastLig = .Cells(Rows.Count, j).End(xlUp).Row
            Set c = .Range(.Cells(1, j), .Cells(LastLig, j)).Find("Moyens", lookat:=xlWhole)
            If Not c Is Nothing Then
                Moy = c.Row
                Set c = .Range(.Cells(1, j), .Cells(LastLig, j)).Find("Domage", lookat:=xlWhole)
                If Not c Is Nothing Then
                    Dom = IIf(c.Row > Moy, c.Row, Moy)
                    Moy = IIf(c.Row > Moy, Moy, c.Row)
                    Nbre = Dom - Moy - 1
                    NbIni = IIf(j = 1, 0, UBound(Tablo, 2))
                    DimTablo = NbIni + Nbre
                    ReDim Preserve Tablo(1 To 3, 1 To DimTablo)
                    For i = 1 To Nbre
                        Tablo(1, NbIni + i) = .Cells(Moy + i, j)
                        Tablo(2, NbIni + i) = FonctionPerso(.Cells(Moy + i, j))
                        Tablo(3, NbIni + i) = .Cells(Moy + i, j + 1)
                    Next i
                End If
            End If
        Next j
        MsgBox UBound(Tablo, 2)
        .Range("C101:E" & 100 + UBound(Tablo, 2)) = Application.Transpose(Tablo)
    End With

  8. #8
    Membre à l'essai
    Inscrit en
    Juillet 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 19
    Points : 10
    Points
    10
    Par défaut Merci
    Merci beaucoup,

    D'aprés ce que je peux voir dans le code corrigé (merci mercatog), on ne peut redimensionner que la dernière dimension du tableau, ce qui explique l'erreur.
    Merci PPz78. J'avais essayé de survoler la ligne jaune. L'info bulle laissait entendre que la dimension du tableau n'était pas bonne mais je ne comprenais pas pourquoi.
    Merci aussi à Ormonth, j'utiliserai cette possibilité dorénavant. Je me demande comment j'ai pu m'en passer jusque là. J'avais déjà lu "Utiliser les variables tableaux" mais "conceptualisation" a l'air trop cool, je vais m'y mettre. Pour l'heure, je vais essayer d'avancer mon petit code

    Merci encore à tous

    MouM

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 20/06/2006, 16h25
  2. Problème avec les variables en PHP
    Par King_T dans le forum Langage
    Réponses: 3
    Dernier message: 06/05/2006, 23h46
  3. Problèmes avec les variables et les unités
    Par christoufe dans le forum EDI
    Réponses: 2
    Dernier message: 22/01/2006, 16h22
  4. Problèmes avec les variables final
    Par casolaro dans le forum Langage
    Réponses: 7
    Dernier message: 09/12/2004, 14h29
  5. Réponses: 6
    Dernier message: 28/05/2004, 09h39

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