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 :

Pb de lecture données dans une plage de cellule avec itération


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juillet 2004
    Messages
    42
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Juillet 2004
    Messages : 42
    Points : 28
    Points
    28
    Par défaut Pb de lecture données dans une plage de cellule avec itération
    Pb de lecture données dans une plage de cellule

    --------------------------------------------------------------------------------

    Bonjour,
    j'ai un problème avec une boucle d'instructions .
    En fait je récupère une valeur dans une cellule appartenant à une plage définie dans une feuille excel. ensuite je lis cette valeur et je la retrancrits dans un tableau en 4 dimensions. Qui est lui sur une autre feuille.
    la première écriture se passe sans pb, mais pour la deuxième, je n'arrive pas à repartir sur ma feuille source et lire la valeur de la deuxième cellule de ma plage de données.
    Pouvez_vous m'aidez?
    Merci.
    ci-dessous ma boucle:
    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
    'Sélection de la plage de données contenant les triplets "TRIPLET_SD
    Application.Goto Reference:="TRIPLET_SD"
     
    CPT2 = 2
    For Each c In Range("TRIPLET_SD")
     
    If c.Value <> "" Then
     
    'Affichage des coordonnées de la première cellule de la plage
    'MsgBox ActiveCell.Address
    'Affichage du contenu de la première cellule de la plage
    'MsgBox ActiveCell.Value
    'Lecture du contenu de la cellule active
    Donnee = ActiveCell.Value
    'Lecture du type d'établissement dans le triplet de la cellule active
    Type_SD = Left(Donnee, 5)
    'Affichage du type d'établissment
    'MsgBox "le type d'établissement est " & Type_SD
    'Lecture du couple service*nature dans le triplet de la cellule active
    Donnee_sce = Right(Donnee, 12)
    'Lecture du service dans le couple
    Sce_SD = Left(Donnee_sce, 3)
    'Affichage du service
    'MsgBox "le service est " & Sce_SD
    'Lecture de la nature
    Nature_SD = Right(Donnee, 8)
    'Affichage de la nature
    'MsgBox "la nature est " & Nature_SD
    'MsgBox " la valeur du cpt est " & CPT
    'Récupération du numéro de ligne
    'MsgBox ActiveCell.Row
    Numligne_SD = ActiveCell.Row
    'Positionnement sur la cellule contenant nature*sous-destination
    Cells(Numligne_SD, 2).Select
    'MsgBox ActiveCell.Address
    'Récupération du contenu de la cellule
    CelluleNatSd = ActiveCell.Value
    'Lecture de la sous-destination
    Sousdestination = Right(CelluleNatSd, 3)
    'MsgBox "la sous-destination est " & Sousdestination
     
     
    ActiveWorkbook.Worksheets("Restitution").Select
    ActiveSheet.Cells(CPT2, 1).Select
    ActiveCell.Value = Type_SD
    ActiveCell.Offset(0, 1).Select
    ActiveCell.Value = Sce_SD
    ActiveCell.Offset(0, 1).Select
    ActiveCell.Value = Nature_SD
    ActiveCell.Offset(0, 1).Select
    ActiveCell.Value = Sousdestination
    ActiveCell.Offset(1, -3).Select
    MsgBox ActiveCell.Address
    CPT2 = CPT2 + 1
     
    End If
     
    Next c

    [Edit] bbil : penser au balise de codes , bouton :

  2. #2
    Membre confirmé Avatar de Commodore
    Homme Profil pro
    Business manager
    Inscrit en
    Février 2004
    Messages
    599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Business manager

    Informations forums :
    Inscription : Février 2004
    Messages : 599
    Points : 632
    Points
    632
    Par défaut
    ça plante ?
    => sur quel ligne ?
    => message d'erreur ?

    donne plus de précisions stp
    Moi, j'aime pas facebook.

    Musiciens de France

  3. #3
    Membre à l'essai
    Profil pro
    Consultant finance
    Inscrit en
    Novembre 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Consultant finance

    Informations forums :
    Inscription : Novembre 2005
    Messages : 18
    Points : 19
    Points
    19
    Par défaut Re:
    Salut rond24, Commodore_Psykopate
    Citation Envoyé par rond24
    Pb de lecture données dans une plage de cellule
    ...
    'MsgBox "la nature est " & Nature_SD
    'MsgBox " la valeur du cpt est " & CPT
    ...
    Que représente CPT ?
    A la fin de la 2nde partie de ton code tu change de feuille active pour ne plus revenir sur la feuille initiale. C'est pour ça que CPT2 s'incrémente mais les traitements qui suivent (à partir du 2ème c de TRIPLET_SD) ne sont pas effectués.

    Une solution c'est de bien resélectionner la feuille initiale au début :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For Each c In Sheets("Feuil1").Range("TRIPLET_SD")
      Code ...
    Next
    Ciao

  4. #4
    Nouveau membre du Club
    Inscrit en
    Juillet 2004
    Messages
    42
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Juillet 2004
    Messages : 42
    Points : 28
    Points
    28
    Par défaut [VBA-E]Pb de lecture données sur une plage avec itération et condition
    Merci pour vos réponses.
    J'ai retravaillé mon code.
    je travaille sur un tableau de 1086l*150col.
    je veux lire chacune de ces cellules, tester qu'elles ne sont pas vides, puis récupérer le contenu.
    Pour ma première ligne les 15 premières cellules st remplies, et donc mon code fonctionne, mais dès la première cellule vide rencontrée il me met erreur 1024.
    Comment puis-je faire?
    est-ce que j'utilise bien le Goto?
    voici le code et merci encore.

    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
     
     
    Sub SOUS_DESTINATION_TRIPLET()
        Dim Type_SD As String
        Dim Sce_SD As String
        Dim Nature_SD As String
        Dim Sousdestination As String
        Dim TRIPLET_SD As Range
        Dim CPT As Long
        Dim c As Object
        Dim Donnee As String
        Dim Donnee_sce As String
        Dim Numligne_SD As String
        Dim CelluleNatSd As String
        Dim Counter As Integer
        Dim CPT2 As Long
        Dim CPT3 As Long
        Dim CPT4 As Long
        Dim CPT5 As Long
        Dim CPT6 As Long
        Dim Montab As Variant
        Dim cmpt1 As Long
        Dim Numline As Long
        Dim Numcolonne As Long
     
            ActiveWorkbook.Worksheets("Restitution").Select
            ActiveSheet.Cells(1, 1).Select
            ActiveCell.Offset(1, 1).Select
            ActiveCell.Value = "TYPE ETABLISSEMENT"
            ActiveCell.Offset(0, 1).Select
            ActiveCell.Value = "SERVICE"
            ActiveCell.Offset(0, 1).Select
            ActiveCell.Value = "NATURE"
            ActiveCell.Offset(0, 1).Select
            ActiveCell.Value = "SOUS-DESTINATION"
            ActiveCell.Offset(1, -3).Select
     
            'Sélection de la plage de données contenant les triplets "TRIPLET_SD
            Application.Goto Reference:="TRIPLET_SD"
     
            'Range("TRIPLET_SD").Item(CPT4, CPT5).Select
            'Donnee = Range("TRIPLET_SD").Item(CPT4, CPT5)
            'MsgBox "la valeur lue de donnée est " & Donnee
            CPT3 = 1
            CPT4 = 1
            CPT2 = 2
            'Cells(1, 1).Select
            'ActiveCell.Value = Range("TRIPLET_SD").Columns.Count
            Numline = Range("TRIPLET_SD").Rows.Count
            Numcolonne = Range("TRIPLET_SD").Columns.Count
            'MsgBox Numline
            'MsgBox Numcolonne
     
            For CPT6 = 1 To Numline
     
                For CPT5 = 1 To Numcolonne
     
                    Range("TRIPLET_SD").Item(CPT3, CPT4).Select
                    Donnee = Range("TRIPLET_SD").Item(CPT3, CPT4)
                    'MsgBox "la valeur lue de donnée est " & Donnee
     
                        If ActiveCell.Value = "" Then
     
                        GoTo Line
     
                        End If
     
                    'If c.Value <> "" Then
     
                    'Affichage des coordonnées de la première cellule de la plage
                    'MsgBox ActiveCell.Address
                    'Affichage du contenu de la première cellule de la plage
                    'MsgBox ActiveCell.Value
                    'Lecture du contenu de la cellule active
                    Donnee = ActiveCell.Value
                    'Lecture du type d'établissement dans le triplet de la cellule active
                    Type_SD = Left(Donnee, 5)
                    'Affichage du type d'établissment
                    'MsgBox "le type d'établissement est " & Type_SD
                    'Lecture du couple service*nature dans le triplet de la cellule active
                    Donnee_sce = Right(Donnee, 12)
                    'Lecture du service dans le couple
                    Sce_SD = Left(Donnee_sce, 3)
                    'Affichage du service
                    'MsgBox "le service est " & Sce_SD
                    'Lecture de la nature
                    Nature_SD = Right(Donnee, 8)
                    'Affichage de la nature
                    'MsgBox "la nature est " & Nature_SD
                    'MsgBox " la valeur du cpt est " & CPT
                    'Récupération du numéro de ligne
                    'MsgBox ActiveCell.Row
                    Numligne_SD = ActiveCell.Row
                    'Positionnement sur la cellule contenant nature*sous-destination
                    Cells(Numligne_SD, 2).Select
                    'MsgBox ActiveCell.Address
                    'Récupération du contenu de la cellule
                    CelluleNatSd = ActiveCell.Value
                    'Lecture de la sous-destination
                    Sousdestination = Right(CelluleNatSd, 3)
                    'MsgBox "la sous-destination est " & Sousdestination
     
                    'CPT2 = 2
                    'Dim Montab As Variant, cmpt1 As Long, cmpt2 As Long
                    ActiveWorkbook.Worksheets("Restitution").Select
                    'Montab = Range("B3:E65535").Value
                    'Montab = Range(Cells(CPT2, 1), Cells(65535, 4)).Value
                    ActiveSheet.Cells(CPT2 + 1, 2).Select
                    'MsgBox " cellule active de mon tab" & ActiveCell.Address
     
                    'For cmpt1 = 1 To CPT
                    'Montab.Item(cmpt1, 1).Value = Left(Donnee, 5)
                    'Montab(cmpt1, 2) = Sce_SD
                    'Montab(cmpt1, 3) = Nature_SD
                    'Montab(cmpt1, 4) = Sousdestination
     
                    'Next cmpt1
                    'Range("A1:J65535").Value = Montab
     
                    'CPT2 = 2
                    'ActiveWorkbook.Worksheets("Restitution").Select
                    'ActiveSheet.Cells(CPT2, 1).Select
                    ActiveCell.Value = Type_SD
                    ActiveCell.Offset(0, 1).Select
                    ActiveCell.Value = Sce_SD
                    ActiveCell.Offset(0, 1).Select
                    ActiveCell.Value = Nature_SD
                    ActiveCell.Offset(0, 1).Select
                    ActiveCell.Value = Sousdestination
     
                    'ActiveCell.Offset(1, -3).Select
                    'MsgBox ActiveCell.Address
                    'CPT2 = CPT2 + 1
                     CPT2 = CPT2 + 1
                    'End If
                    ActiveWorkbook.Worksheets("Feuil1").Select
                    Range("TRIPLET_SD").Item(CPT3, CPT4).Select
                    MsgBox ActiveCell.Address
     
                    'End If
    Line:
                     CPT4 = CPT4 + 1
     
                     'MsgBox "la colonne de la deuxième cellule est " & CPT4
                     'MsgBox ActiveCell
     
                Next
     
                    CPT3 = CPT3 + 1
     
            Next
     
                'For Each c In Range("TRIPLET_SD")
                'If c.Value <> "" Then
                'CPT = CPT + 1
                'End If
                'Next c
     
                'MsgBox " Il y'a " & CPT & " triplets"
     
    End Sub

  5. #5
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    Citation Envoyé par rond24
    ...est-ce que j'utilise bien le Goto?...
    Le "Goto" est une source d'ennuie.. limite son utilisation à la gestion d'erreur...( on Error goto...), utilise des if...then else... par exemple...

    sur quelle ligne tu as une erreur ...?

    sinon l'utilisation d'activeCell, ActiveSheet... et aussi une source potentielle d'erreur... préfére nommer explicitement tes feuilles et cellules... du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    dim f as workSheet
    set f = Thisworkbook.sheets("Feuil1")
     
    Msgbox F.range("A1")

  6. #6
    Nouveau membre du Club
    Inscrit en
    Juillet 2004
    Messages
    42
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Juillet 2004
    Messages : 42
    Points : 28
    Points
    28
    Par défaut Re pb lecture données
    Bjr,
    merci pr tes conseils. J'ai pu contourner mon pb en récupérant le résultat de ma boucle sur ma feuille source, et ensuite en exportant l'ensemble, avec formatage sur ma feuille "Restitution".

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

Discussions similaires

  1. [XL-2010] VBA Pointeur - Recherche Données dans une plage
    Par Coxtox dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 28/04/2015, 09h37
  2. [XL-2010] Recherche de données dans une plage
    Par Klennex62 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 13/01/2014, 16h47
  3. Insertion de données dans une plage à partir d'un formulaire
    Par andre55 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 24/10/2007, 10h48
  4. [Formule]nombre de données dans une plage horaire
    Par melitoriva dans le forum Excel
    Réponses: 3
    Dernier message: 04/05/2007, 17h47
  5. Remplacer "#N/A" dans une plage de cellule.
    Par Yogi_01 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 12/04/2006, 14h59

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