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 :

Compter le nombre de ligne entre deux valeurs


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    automatitien
    Inscrit en
    Novembre 2015
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : automatitien
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Novembre 2015
    Messages : 60
    Par défaut Compter le nombre de ligne entre deux valeurs
    Bonjour,

    J'ai souvent de grands projets en VBA, mais malheureusement trop peu de pratique pour m'y remettre sereinement lorsque l'idée me prends

    Bon rien de très compliqué
    Je scrute un tableau pour y retrouver une phrase ou seul les premier termes m’intéressent.
    sous cette phrase il y a un nombre variable de paramètres que je voudrais ranger dans un tableau.

    du coup, une fois que j'en ai trouvé une, je regarde en dessous ou ce trouve le terme m’annonçant la fin des paramètres ici "STRUCT_END"

    le tableau apparait sous la forme suivante
    STRUCT_BEGIN
    DBi_Compteurs
    Volumes_UFO1_FIT_7001
    Volumes_UFO1_FIT_7101
    Volumes_UFO1_FIT_8001
    STRUCT_END
    STRUCT_BEGIN
    DBi_Moteurs
    UFO1_PD_5101
    UFO1_PD_5102
    UFO1_PD_5103
    UFO1_PC_5001
    UFO1_PC_6101
    STRUCT_END
    STRUCT_BEGIN
    BH_FIT_6202
    Val_4mA
    Val_20mA
    Val_Forc
    Val
    Etat_MAE
    BP_Forc
    Def_Voie
    STRUCT_END

    j'ai écrit ceci :

    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
     
     'On scrute le CSV
        For Each B In Range("A1:A" & Nb_ligneB)
     
          'On cherche les termes commençant par "DBi"
            If Left(B.Value, 3) = "DBi" Then
     
                    'On relève la valeur
               DBi = Range("A" & B.Row).Value
               UDT = Range("B" & B.Row).Value
     
     'On cherche Struct_End en dessous
        For Each C In Range("A & B.Row:A" & Nb_ligneB)
        If Range("A" & C.Row).Value = "STRUCT_END" Then
         C.Row = STRUCT_END_Row
     
        Next
            End If
     
           Next
    En écrivant ceci, j'ai un défaut de compilation "Next sans For"....
    Le problème vient probablement d'ailleur vu que Next et For sont bien présent

    Peut-être ici?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     For Each C In Range("A & B.Row:A" & Nb_ligneB)
    Merci d'avance pour votre aide

    Valery

  2. #2
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 441
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 441
    Par défaut
    Bonjour,

    En respectant les indentations, on peut immédiatement voir si les If <> End If, For <> Next sont convenablement écrites. Pour votre code:
    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
        'On scrute le CSV
        For Each B In Range("A1:A" & Nb_ligneB)
            'On cherche les termes commençant par "DBi"
            If Left(B.Value, 3) = "DBi" Then
                'On relève la valeur
                DBi = Range("A" & B.Row).Value
                UDT = Range("B" & B.Row).Value
                'On cherche Struct_End en dessous
                For Each C In Range("A" & B.Row & ":A" & Nb_ligneB)  '<--- corrigé
                    If Range("A" & C.Row).Value = "STRUCT_END" Then
                        C.Row = STRUCT_END_Row '--- ? à corriger
                    End If  '<--- manquant
                Next
            End If
        Next
    Cordialement.

  3. #3
    Membre averti
    Homme Profil pro
    automatitien
    Inscrit en
    Novembre 2015
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : automatitien
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Novembre 2015
    Messages : 60
    Par défaut
    Merci beaucoup, ça fonctionne!


    Bizarrement, la variable STRUCT_END_Row ne me renvoi pas la bonne valeur....

    Normalement lors du premier scan "B", je m'arrête disons ligne 7 de ma feuille et j'ai un "STRUCT_END" seulement 3 ligne en dessous donc le second scan "C" je devais avoir la valeur 10. En réalité réalité je récupère la position du dernier STRUCT_END soit ligne 3000 et quelques....
    Comme si les précédent n’étaient pas vu ou que le scan commençait par le bas.

    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
    'On scrute le CSV
    For Each B In Range("A1:A" & Nb_ligneB)
            'On cherche les termes commençant par "DBi"
            If Left(B.Value, 3) = "DBi" Then
                'On relève la valeur
                DBi = Range("A" & B.Row).Value
     
     
                'On cherche Struct_End en dessous
                    For Each C In Range("A" & B.Row & ":A" & Nb_ligneB)
                        If Range("A" & C.Row).Value = "STRUCT_END" Then
                        STRUCT_END_Row = C.Row
                        End If
                    Next C
     
                        For Each D In Range("A" & B.Row + 1 & ":A" & STRUCT_END_Row - 1)
                        numid = numid + 1
                        Process = Split(D, "_")
                        UDT = Range("B" & B.Row + 1).Value
     
                        'Je compléte les élément dans un tableau
     
                              itab = numid
                             'Définit la taille du tableau
                             ReDim Preserve TableauTag(1 To 6, 1 To itab)
     
                             TableauTag(1, itab) = numid
                             TableauTag(2, itab) = "PLC"
                             TableauTag(3, itab) = Process(0)
                             TableauTag(4, itab) = DBi
                             TableauTag(5, itab) = D.Value
                             TableauTag(6, itab) = UDT
     
     
     
     
                         Next D
     
            End If
        Next B
    Merci à vous pour vos remarques

  4. #4
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 441
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 441
    Par défaut
    Bonjour,

    Ceci devrait le faire, avec le Exit For à la ligne 21 (car sinon continue jusqu'en bas du tableau):
    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
    Option Explicit
     
    Sub Scan()
        Dim B As Range, C As Range, D As Range
        Dim nb_ligneB As Long, DBi As String
        Dim STRUCT_END_Row As Long, numId As Long, UDT As String
        Dim process
        Dim TableauTag() As Variant
        'On scrute le CSV
        numId = 0
        nb_ligneB = 24
        For Each B In Range("A1:A" & nb_ligneB)
            'On cherche les termes commençant par "DBi"
            If Left(B.Value, 3) = "DBi" Then
                'On relève la valeur
                DBi = Range("A" & B.Row).Value
                'On cherche Struct_End en dessous
                For Each C In Range("A" & B.Row & ":A" & nb_ligneB)
                    If Range("A" & C.Row).Value = "STRUCT_END" Then
                        STRUCT_END_Row = C.Row
                        Exit For
                    End If
                Next C
                For Each D In Range("A" & B.Row + 1 & ":A" & STRUCT_END_Row - 1)
                    numId = numId + 1
                    process = Split(D, "_")
                    UDT = Range("B" & B.Row + 1).Value
                    'Je compléte les élément dans un tableau
                    'Définit la taille du tableau
                    ReDim Preserve TableauTag(1 To 6, 1 To numId)
                    TableauTag(1, numId) = numId
                    TableauTag(2, numId) = "PLC"
                    TableauTag(3, numId) = process(0)
                    TableauTag(4, numId) = DBi
                    TableauTag(5, numId) = D.Value
                    TableauTag(6, numId) = UDT
                    'Debug.Print TableauTag(1, numId) & " # " & TableauTag(2, numId) & " # " & TableauTag(3, numId) & " # " & _
                                TableauTag(4, numId) & " # " & TableauTag(5, numId) & " # " & TableauTag(6, numId)
                Next D
            End If
        Next B
    End Sub
    Cordialement.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 24/05/2017, 17h20
  2. [XL-2010] Compter le nombre de lignes entre 2 valeurs de ma table
    Par Danner dans le forum Excel
    Réponses: 11
    Dernier message: 19/05/2016, 22h43
  3. Savoir le nombre de ligne entre deux valeurs
    Par lilloDay dans le forum Excel
    Réponses: 1
    Dernier message: 10/05/2011, 19h56
  4. Réponses: 1
    Dernier message: 30/01/2008, 17h47
  5. [MS-DOS] Compter les nombres de jours entre deux dates diffé
    Par Furius dans le forum Scripts/Batch
    Réponses: 4
    Dernier message: 19/02/2006, 14h33

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