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 :

Créer une liste à partir d'une colonne excel pour l'utiliser dans un code VBA


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Février 2019
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur commercial
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2019
    Messages : 24
    Par défaut Créer une liste à partir d'une colonne excel pour l'utiliser dans un code VBA
    Bonjour à tous,

    J'aimerai créer une liste sous VBA afin de pouvoir l'utiliser dans un la suite d'un code. J'aimerai récupérer les données d'une colonne avec des strings pouvant changer et pouvant être plusieurs du même type, les mettre dans une liste et effectuer une recherche en utilisant "For each".

    J'ai déjà fait mon code, il marche très bien mais j'ai du coup rentré une par une les possibilités de la liste dans mon code. Or si une nouvelle valeur apparait (ce qui est possible) alors je devrai la rajouter manuellement dans mon code ce qui est possiblement une source d'erreur.

    Concrètement j'aimerai que pour chaque nouvelle valeur dans ma colonne, elle soit rajoutée dans ma liste mais uniquement si elle n'est pas déjà présente dedans. A chaque fois que je lancerai ma macro normalement ça devrait me creer une nouvelle liste (pas besoin d'enregistrer cette liste quelque part).

    Voici mon 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
    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
    Sub TEST()
     
    '
    ' TEST Macro
    '
     
    '
    Application.ScreenUpdating = False
     
     
    Dim Ind As Long, Ind2 As Long
    Dim Titre(4) As String, TypeAno(20) As String
     
    Titre(1) = "PROJET"
    Titre(2) = "INDUSTRIEL"
    Titre(3) = "OUTILS"
    Titre(4) = "SUPPORT SGP"
     
    TypeAno(1) = "Absence de natif"
    TypeAno(2) = "Autre"
    TypeAno(3) = "Baghera Doc"
    TypeAno(4) = "Contraire règles CNES/périmètre"
    TypeAno(5) = "Contrôles de base hors gestion de conf."
    TypeAno(6) = "Crypt And Share"
    TypeAno(7) = "Doc. non conforme"
    TypeAno(8) = "Doc. non exploitable"
    TypeAno(9) = "Doublon"
    TypeAno(10) = "Erreur création DT"
    TypeAno(11) = "Erreur de choix de projet"
    TypeAno(12) = "Erreur liste de diffusion"
    TypeAno(13) = "Hors format ECSS"
    TypeAno(14) = "Hors format PDF-A"
    TypeAno(15) = "Manque infos actions"
    TypeAno(16) = "Manque infos enregistrement"
    TypeAno(17) = "PDF non normalisé"
    TypeAno(18) = "Rediffusion"
    TypeAno(19) = "Réseau"
    TypeAno(20) = "Traitement"
     
     
    ligne = 5
     
    While ligne < 500
        NomDuProjet = Cells(ligne, 2).Value
        nom = Application.WorksheetFunction.CountIf(Range("Anomalies.xlsx!$N$4:$N$1120"), NomDuProjet)
     
        If nom = 0 Then
            ligne = ligne + 1
        Else
            nom = Application.WorksheetFunction.CountIf(Range("Anomalies.xlsx!$N$4:$N$1120"), NomDuProjet)
            Cells(ligne, 7).ClearContents
            Cells(ligne, 8).ClearContents
            Cells(ligne, 7).Value = nom
     
            For Ind = 1 To 4
                Domaine = Application.WorksheetFunction.CountIfs(Range("Anomalies.xlsx!$N$4:$N$1120"), NomDuProjet, _
                Range("Anomalies.xlsx!$K$4:$K$1120"), Titre(Ind))
     
                Cells(ligne, 8).Value = Cells(ligne, 8).Value & IIf(Domaine <> 0, Domaine & "  " & Titre(Ind) & vbCrLf, "")
     
                For Ind2 = 1 To 20
                    TypeAnomalie = Application.WorksheetFunction.CountIfs(Range("Anomalies.xlsx!$N$4:$N$1120"), NomDuProjet, _
                    Range("Anomalies.xlsx!$K$4:$K$1120"), Titre(Ind), Range("Anomalies.xlsx!$J$4:$J$1120"), TypeAno(Ind2))
     
                    Cells(ligne, 8).Value = Cells(ligne, 8).Value & IIf(TypeAnomalie <> 0, TypeAnomalie & "  " & TypeAno(Ind2) & vbCrLf, "")
                Next Ind2
            Next Ind
     
            ligne = ligne + 1
        End If
    Wend
    End Sub
    Et voici la partie que je veux optimiser :

    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
    TypeAno(1) = "Absence de natif"
    TypeAno(2) = "Autre"
    TypeAno(3) = "Baghera Doc"
    TypeAno(4) = "Contraire règles CNES/périmètre"
    TypeAno(5) = "Contrôles de base hors gestion de conf."
    TypeAno(6) = "Crypt And Share"
    TypeAno(7) = "Doc. non conforme"
    TypeAno(8) = "Doc. non exploitable"
    TypeAno(9) = "Doublon"
    TypeAno(10) = "Erreur création DT"
    TypeAno(11) = "Erreur de choix de projet"
    TypeAno(12) = "Erreur liste de diffusion"
    TypeAno(13) = "Hors format ECSS"
    TypeAno(14) = "Hors format PDF-A"
    TypeAno(15) = "Manque infos actions"
    TypeAno(16) = "Manque infos enregistrement"
    TypeAno(17) = "PDF non normalisé"
    TypeAno(18) = "Rediffusion"
    TypeAno(19) = "Réseau"
    TypeAno(20) = "Traitement"
    Merci d'avance pour vos réponses !

    Lubinovitch

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par Lubinovitch Voir le message
    Concrètement j'aimerai que pour chaque nouvelle valeur dans ma colonne, elle soit rajoutée dans ma liste mais uniquement si elle n'est pas déjà présente dedans. A chaque fois que je lancerai ma macro normalement ça devrait me creer une nouvelle liste (pas besoin d'enregistrer cette liste quelque part).
    Où se trouvent ces données dans ta feuille de calcul ?

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Février 2019
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur commercial
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2019
    Messages : 24
    Par défaut
    Ces données se trouvent à l'adresse suivante : Anomalies.xlsx!$J$4:$J$1120

    Pour l'instant je les ai écrite dans mon code mais l'idée et que la liste m'évite de les écrire.

    Cordialement,

    Lubinovitch

  4. #4
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim TypeAno() As String
    Dim Col As Long, NbTypeAno As Long
     
    NbTypeAno = Cells(Columns.Count, "J").End(xlToLeft).Column - 3
    Redim TypeAno(NbTypeAno)
     
    For Col = 4 To NbTypeAno + 3
        TypeAno(Col) = Cells(Col, "J").Value
    Next Col
    En précédent ta macro d'un Option Base 1.

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Février 2019
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur commercial
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2019
    Messages : 24
    Par défaut
    Lorsque j'utilise ce que tu m'as proposé il m'indique une erreur d'execution 9 pour la ligne Redim TypeAno(NbTypeAno). Je précise quand même que mes données viennent d'un autre classeur.

    Merci pour ton aide !

  6. #6
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par Lubinovitch Voir le message
    Je précise quand même que mes données viennent d'un autre classeur.
    Tu n'as qu'à adapter les lignes 4 et 8 du code que j'ai donné pour aller chercher les données dans le classeur et la feuille concernés.

Discussions similaires

  1. [2016] Créer une colonne calculée pour des dates
    Par stanlagtan dans le forum Développement
    Réponses: 5
    Dernier message: 18/09/2018, 18h16
  2. Réponses: 27
    Dernier message: 29/08/2014, 12h29
  3. Recuper une connexion existante pour l'utiliser dans un bloc JAVA
    Par zafzef dans le forum Développement de jobs
    Réponses: 2
    Dernier message: 28/06/2013, 10h46
  4. Probleme ADO adapter une requete sql pour l'utiliser dans mon code vb6
    Par jacko842 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 22/04/2009, 15h53
  5. Réponses: 2
    Dernier message: 20/07/2008, 19h22

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