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 :

info conditionnelle-Nombre lignes changeant


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2006
    Messages
    233
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Juillet 2006
    Messages : 233
    Par défaut info conditionnelle-Nombre lignes changeant
    Bonjour à tous,
    J'ai un fichier excel contenant plusieurs centaines de lignes toutes sur la colonne A.
    Je dois parcourir tout le fichier en effectuant le traitement suivant:

    Si je rencontre le mot "Motif=" et que avant le "Motif= suivant" je rencontre une ligne contenant ASN13 alors je recopie la valeur suivant le signe "[/B]=[/B]" dans la feuille nommée ASN13 sinon je recopie cette valeur dans la feuille ASN14.

    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
     
            Motif=2940x8             SOcyzt01400001       FrontAz AB000
                Brig0x01400
                Normy0x Rob--  USx-- V2
                SIOUX< ASN13-- ABX13
                IPaDR0x3
           Motif=21xx             SOcyzt01400002       FrontAz AB000
                Brig0x01400
                Normy0x Rob--  USx-- SOc-- V2
                SIOUX<Morn-- ASN13-- ABX13
                IPaDR0x20939
           Motif=218069             SOcyzt01400003       FrontAz AB000
                Brig0x01400
                Normy0x Rob--  USx-- SOc-- V2
                SIOUX<Morn-- ASN13-- ABX13
                IPaDR0x4
           Motif=46x011             SOcyzt01400004       FrontAz AB000
                Brig0x01400
                Normy0x Rob--  USx-- SOc-- V2
                SIOUX<Morn-- ASN13-- ABX13
                IPaDR0x4048
           Motif=46x014             SOcyzt0140000       FrontAz AB000
                Brig0x01400
                Normy0x Rob--  USx-- SOc-- V2
                SIOUX<Morn-- ASN13-- ABX13
                IPaDR0x4049
           Motif=46x01x             SOcyzt01400006       FrontAz AB000
                Brig0x01400
                Normy0x Rob--  USx-- SOc-- V2
                SIOUX<Morn-- ASN13-- ABX13
                IPaDR0x400
           Motif=214996             SOcyzt0140000x       FrontAz AB000
                Brig0x01400
                Normy0x Rob--  USx-- SOc-- V2
                SIOUX<Morn-- ASN13-- ABX13
                IPaDR0x214x
           Motif=21043             SOcyzt01400008       FrontAz AB000
                Brig0x01400
                Normy0x Rob--  USx-- SOc-- V2
                SIOUX<Morn-- ASN13-- ABX13
                IPaDR0x24x8
           Motif=29403             SOcyzt01400009       FrontAz AB000
                Brig0x01400
                Normy0x Rob--  US1-- V2
                IPaDR0x9
           Motif=29402             SOcyzt01400010       FrontAz AB000
                Brig0x01400
                Normy0x Rob--  US1-- V2
                IPaDR0x10
           Motif=29401             SOcyzt01400011       FrontAz AB002
                Brig0x01400
                Normy0x Rob--  US1-- V2
                IPaDR0x11
           Motif=29400             SOcyzt01400012       FrontAz AB000
                Brig0x01400
                Normy0x Rob--  US1-- V2
                IPaDR0x12
           Motif=33x63             SOcyzt01400013       FrontAz AB000
                Brig0x01400
                Normy0x Rob--  USx-- SOc-- V2
           Motif=210777             SOcyzt01400       FrontAz AB0
                Brig0x01405
                Normy0x Rob--  USx-- SOc-- V2
                SIOUX<Morn-- ASN13-- ABX13
                IPaDR0x2458
    Est ce que qq1 a une idée?

    Merci

  2. #2
    Membre Expert
    Avatar de JackOuYA
    Inscrit en
    Juin 2008
    Messages
    1 040
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 1 040
    Par défaut
    Bonsoir,


    Juste une chose cette colonne A d'ou elle sort ? c'est pas un fichier texte, dans ce cas se serai peu-être mieux de faire cela au moment de la lecture du fichier texte ?


    Sinon ...
    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
    Sub yaMaestro()
     Dim iAsn14 As Integer
     Dim iASn13 As Integer
     Dim iPos As Integer
     Dim c As Range 'cellule lu
     Dim bAsn13 As Boolean
    'je considére que les 2 feuilles Asn13 et Asn14 existent et sont vides.
    ' sinon il faudrai les crée ou initialiser les 2 variables iAsn13 et iAsn14
     Dim stMotif As String 'Memo du dernier Motif mémorisé.
     Dim r As Range
     'La feuille liste contient  ' plusieurs centaines de lignes
     Set r = ThisWorkbook.Sheets("liste").Range("A1").CurrentRegion
     For Each c In r 'Parcours les cellules de la colonne A
     
       iPos = InStr(c, "Motif=")
       If iPos > 0 Then 'Nouvelle chaine motif
         If stMotif <> "" Then ' Le 1° motif l'on ne fait rien
             If bAsn13 Then
                iASn13 = iASn13 + 1
                ThisWorkbook.Sheets("ASn13").Cells(iASn13, 1) = stMotif
             Else
                iAsn14 = iAsn14 + 1
                ThisWorkbook.Sheets("ASn14").Cells(iAsn14, 1) = stMotif
             End If
             bAsn13 = False
          End If
             stMotif = Mid(c, iPos + 6, InStr(iPos, c, " ") - iPos - 6)
     
       End If
       If InStr(c, "ASN13") > 0 Then bAsn13 = True
     Next
     ' pose du dernier :
          If stMotif <> "" Then ' Le 1° motif l'on ne fait rien
             If bAsn13 Then
                iASn13 = iASn13 + 1
                ThisWorkbook.Sheets("ASn13").Cells(iASn13, 1) = stMotif
             Else
                iAsn14 = iAsn14 + 1
                ThisWorkbook.Sheets("ASn14").Cells(iAsn14, 1) = stMotif
             End If
             bAsn13 = False
          End If
     
    End Sub

  3. #3
    Membre confirmé
    Inscrit en
    Juillet 2006
    Messages
    233
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Juillet 2006
    Messages : 233
    Par défaut
    Merci beaucoup JackOuYA,

    Le problème tel que je l'ai posé a été reglé à 100%
    Mais j'ose te demander encore une chose:

    Si dans la feuille ASN14, je voudrais mettre en plus de la valeur suivant "motif=", toutes les lignes qui suivent jusqu'au "motif=" suivant; comment modifier le code en conséquence.


    Merci infiniment.

  4. #4
    Membre Expert
    Avatar de JackOuYA
    Inscrit en
    Juin 2008
    Messages
    1 040
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 1 040
    Par défaut
    Bonjour,


    Au moment ou tu mémorise la valeur suivant "motif=", mémorise aussi le numéro de ligne en cours dans une variable (iMotif.) , puis au moment ou tu colle le tout dans ta feuille copie aussi les lignes ente iMotif et la ligne courante -1.

Discussions similaires

  1. Compter nombre lignes générées par GROUP BY
    Par Trunks dans le forum Langage SQL
    Réponses: 2
    Dernier message: 26/03/2006, 16h52
  2. Pb nombre lignes
    Par eloman dans le forum SQL Procédural
    Réponses: 15
    Dernier message: 02/02/2006, 13h22
  3. [VB.NET] Nombre ligne d'un DataGrid
    Par botanique dans le forum Windows Forms
    Réponses: 11
    Dernier message: 05/11/2005, 16h45
  4. Nombre ligne dans un ensemble de fichier
    Par devdev2003 dans le forum Linux
    Réponses: 8
    Dernier message: 13/05/2005, 18h59
  5. Compter le nombre ligne listée (COUNT) ?
    Par StouffR dans le forum Langage SQL
    Réponses: 7
    Dernier message: 02/09/2002, 09h41

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