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 :

VBA - Création d'une boucle avec recherche de variable


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2018
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2018
    Messages : 1
    Par défaut VBA - Création d'une boucle avec recherche de variable
    Bonjour tout le monde !
    Je vous sollicite par rapport à la réalisation d'une macro sûrement toute simple mais que je n'arrive pas à réaliser correctement (je ne maitrise pas bien encore le langage VBA)

    Mon problème : mon fichier XLS contient des comptes-rendus qui font 18 lignes concernant une cinquantaine de secteurs d'une usine - mon but est de cibler mes secteurs à moi en supprimant les secteurs inutiles et en gardant les miens - j'ai pensé donc à créer une boucle qui va chercher l'intitulé de mes secteurs (est-ce clair jusqu'ici ? ^^)

    En langage humain cela revient à :
    -Créer comme variable les Secteurs
    -Définir quels secteurs je cherche (a1,a2,a3...)
    -Cibler les lignes 1 à 3677
    -Se placer sur la ligne 1
    -Si la macro trouve un des secteurs recherchés -> descendre 18 lignes plus bas
    -Si la macro ne trouve pas un des secteurs recherchés -> supprimer la ligne et les 17 lignes suivantes
    -Recommencer la boucle Si

    J'imagine que c'est simple pour des Exceliens aguerris, mais je galère à réaliser cette boucle..votre aide me serait bien utile !

    Merci d'avance les amis !

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Une piste parmi tant d'autres.
    Pour faire le test, fais une copie de ton fichier original et colle le code ci-dessous dans un module standard puis testes (la feuille où se trouvent tes secteurs doit être la feuille active, tu pourras adapter par la suite).
    La procédure fonctionne de la manière suivante, dans un tableau sont saisis les secteurs à rechercher, quand un secteur est trouvé, les 18 lignes qui suivent sont stockées dans un tableau où, pour l'exemple, j'ai défini seulement 5 colonnes, une fois la recherche terminée, toutes les valeurs sont supprimées de la feuille et le tableau contenant les valeurs récupérées y est collé :
    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
     
    Sub Test()
     
        Dim Plage As Range
        Dim Cel As Range
        Dim Tablo()
        Dim Tbl
        Dim I As Integer
        Dim J As Long
        Dim K As Integer
        Dim Adr As String
     
        'plage défini sur la colonne A à partir de A1
        With ActiveSheet: Set Plage = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp)): End With
     
        'tableau des secteurs, à adapter
        Tbl = Array("a1", "a2", "a3")
     
        'boucle sur les secteurs...
        For I = 0 To UBound(Tbl)
     
            Set Cel = Plage.Find(Tbl(I), , xlValues, xlWhole)
     
            'si trouvé, stocke les valeurs des 18 lignes qui suivent dans un tableau
            'ici, pour l'exemple, ce sont les valeurs de cinq colonnes qui sont récupérées
            If Not Cel Is Nothing Then
     
                Adr = Cel.Address
     
                Do
     
                    For K = 1 To 18
     
                        J = J + 1: ReDim Preserve Tablo(1 To 5, 1 To J)
     
                        Tablo(1, J) = Cel.Offset(K, 0).Value
                        Tablo(2, J) = Cel.Offset(K, 1).Value
                        Tablo(3, J) = Cel.Offset(K, 2).Value
                        Tablo(4, J) = Cel.Offset(K, 3).Value
                        Tablo(5, J) = Cel.Offset(K, 4).Value
     
                    Next K
     
                    Set Cel = Plage.FindNext(Cel)
     
                Loop While Adr <> Cel.Address
     
            End If
     
        Next I
     
        'supprime toutes les valeurs de la feuille et colle le tableau
        With ActiveSheet
     
            .Cells.Clear
            .Range(.Cells(1, 1), .Cells(UBound(Tablo, 2), 5)).Value = Application.Transpose(Tablo)
     
        End With
     
    End Sub

Discussions similaires

  1. VBA, Création d'une Matrice avec boucles imbriquées.
    Par EdouardNourtar dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 23/06/2020, 16h57
  2. [XL-2013] VBA - Création d'une Boucle à partir d'un Tableau
    Par m.renauld dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 27/12/2014, 15h09
  3. Création d'une boucle VBA pour la fonction SOMME.SI
    Par choudoudou15 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 01/05/2009, 12h03
  4. [VBA]Création d'une procédure de recherche
    Par Thegad dans le forum VBA Access
    Réponses: 3
    Dernier message: 03/04/2007, 18h16
  5. Réponses: 4
    Dernier message: 15/06/2006, 10h05

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