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

Excel Discussion :

Accès à des données dans une cellule "listée" [XL-2007]


Sujet :

Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3
    Points : 4
    Points
    4
    Par défaut Accès à des données dans une cellule "listée"
    Bonjour à tous,

    Je me permets de créer un post car j'ai un léger souci. Je suis en train de développer une macro permettant de recouper toute une liste de fichier dans un seul fichier unique. Ces fichiers dépendent de différents paramètres rentrés sur la première ligne. Or pour éviter les erreurs de saisie ces fichiers comportent une validation de données par listes. Après avoir vaillamment lutté avec Excel, je me suis rendu compte que le format dans ces cellules est particulier : Excel les considère comme des array (résultat de VarType = 8204). J'aimerai savoir comment récupérer ces valeurs qui me permettent de positionner les valeurs récupérées sur mon classeur de destination. Vous trouverez ci-après une partie du code incriminé :

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    'wbk est le classeur destination
    While Fichier <> ""
            Set Wb = Workbooks.Open(Fichier)
            Fichier = Dir()
     
            For i = 1 To 4
                wbk.Sheets(1).Cells(row, 1) = CStr(Wb.Sheets(1).Cells(1, 3)) 
                wbk.Sheets(1).Cells(row, 2).Value = CStr(Wb.Sheets(1).Cells(1, 5))
                wbk.Sheets(1).Cells(row, 3).Value = Wb.Sheets(1).Range("H1:I1").Value 'Pose problème
                wbk.Sheets(1).Cells(row, 4).Value = Wb.Sheets(1).Range(Cells(1, 12), Cells(1, 13)).Value 'Pose problème
     
    'j'ai tenté de faire mon test en passant par des variables (de type Variant pour être large)
     
                test = wbk.Sheets(3).Cells(4, 7).Value
                test = CStr(test)
                essai = Wb.Sheets(1).Range("O1:P1")
     
    'tentative désespérée pour lire les valeurs de tout le tableau à défaut de pouvoir récupérer la valeur de la cellule 
    'renvoie l'erreur "erreur 9 : l'indice n'appartient pas à la sélection"
                For k = LBound(essai) To UBound(essai)
                    MsgBox essai(i).Value
                Next k
     
                If essai = test Then
     
                    For k = 1 To 28
                        ThisWorkbook.Sheets(1).Cells(row, k + 4).Value = Wb.Sheets(1).Cells(i + 4, k + 1).Value
                    Next k
     
                Else
     
                    For k = 1 To 28
                        ThisWorkbook.Sheets(1).Cells(row, k + 34).Value = Wb.Sheets(1).Cells(i + 4, k + 1).Value
                    Next k
     
                End If
     
     
            row = row + 1
     
            Next i
     
     
     
        Wb.Close True
        Set Wb = Nothing
    Wend

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 922
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 922
    Points : 28 908
    Points
    28 908
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Ton erreur provient du fait que tu utilises la variable essai comme une variable tableau à une dimension (MsgBox essai(i).Value) or lorsque l'on charge un range comme dans la ligne ci-dessous.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    essai = Wb.Sheets(1).Range("O1:P1")
    la variable est automatiquement chargée à deux dimensions soit essai(Ligne, Colonne)
    Soit

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Bonjour,

    Mon problème a l'air d'être résolu en passant par une variable. Merci beaucoup pour votre aide
    Je me permets de mettre mon code au cas où quelqu'un d'autre en aurait besoin :

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    While Fichier <> ""
            Set Wb = Workbooks.Open(Fichier)
            Fichier = Dir()
            Wb.Activate
            Call retirer_liste 'petite procédure retirant la validation des cellules par liste
     
            test1 = Wb.Sheets(1).Range("K1:L1")
            test2 = Wb.Sheets(1).Range("O1:P1")
     
            For i = 1 To 4
     
     
                'Wb.Sheets(1).Range("O1:P1").Select
                Wb.Activate
     
                'MsgBox VarType(Wb.Sheets(1).Range("O1:P1").Value)
     
                If test2(1, 2) = "Baseline" Then
     
                    For k = 1 To 28
                        wbk.Sheets(1).Cells(row, 1) = CStr(Wb.Sheets(1).Cells(1, 3))
                        wbk.Sheets(1).Cells(row, 2).Value = CStr(Wb.Sheets(1).Cells(1, 5))
                        wbk.Sheets(1).Cells(row, 3).Value = Wb.Sheets(1).Range("H1:I1").Value
                        wbk.Sheets(1).Cells(row, 4).Value = test1(1, 2)
                        ThisWorkbook.Sheets(1).Cells(row, k + 4).Value = Wb.Sheets(1).Cells(i + 4, k + 1).Value
                    Next k
     
                Else
     
                    For k = 1 To 28
                        wbk.Sheets(2).Cells(row, 1) = CStr(Wb.Sheets(1).Cells(1, 3))
                        wbk.Sheets(2).Cells(row, 2).Value = CStr(Wb.Sheets(1).Cells(1, 5))
                        wbk.Sheets(2).Cells(row, 3).Value = Wb.Sheets(1).Range("H1:I1").Value
                        wbk.Sheets(2).Cells(row, 4).Value = test1(1, 2)
                        ThisWorkbook.Sheets(2).Cells(row, k + 4).Value = Wb.Sheets(2).Cells(i + 4, k + 1).Value
                    Next k
     
                End If
     
     
            row = row + 1
     
            Next i
     
        Wb.Close True
        Set Wb = Nothing
    Wend

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

Discussions similaires

  1. Accès et stockage des données dans une appli
    Par aristeas dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 18/01/2009, 21h55
  2. Réponses: 1
    Dernier message: 18/04/2008, 14h20
  3. Access: Insérer des données dans une table acces
    Par Malika_AL dans le forum VBA Access
    Réponses: 6
    Dernier message: 27/01/2008, 22h41
  4. Réponses: 4
    Dernier message: 24/10/2007, 10h43

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