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 :

Remplir un tableau à partir d'une liste [Sous-conditions]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2018
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juillet 2018
    Messages : 1
    Par défaut Remplir un tableau à partir d'une liste [Sous-conditions]
    Bonjour,

    Dans le cadre d'un projet pro, j'essaie de remplir mon tableau [feuil 2] avec les noms des personnes sur la feuille 1 [A8:A24] en tenant compte de 2 conditions (voir 3 conditions)

    la démarche que je souhaite mettre en place est la suivante :

    1) se positionner à la colonne qui corresponde au jour (E1)
    2) si la personne est présente (P) + Apte (A) => mettre le nom de la personne dans le tableau [feuil 2]

    J’espère que je suis clair dans mes explications.

    Merci d'avance pour votre aide
    Fichiers attachés Fichiers attachés

  2. #2
    Membre confirmé
    Homme Profil pro
    Ingénieur
    Inscrit en
    Mai 2018
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Haute Loire (Auvergne)

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

    Informations forums :
    Inscription : Mai 2018
    Messages : 93
    Par défaut
    Voici un exemple de code, à toi de continuer. Tout te faire ne te sera pas utile.

    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
    For i = 4 To 35 'boucle sur les mois
    If Cells(1, 5) = Cells(5, i) Then 'condition sur le jour
        Sheets("Feuil1").Activate
        derniereligne = Range("B65536").End(xlUp).Row
        For j = 8 To derniereligne 'boucle sur la liste des personnes
            If Cells(j, i) = "P" Then 'condition si lettre "P"
                If Cells(j, 35) = "A" Then 'condition sir lettre "A" pour N10
                    Cells(j, 1).Copy
                    Sheets("Feuil2").Activate
                    derniereligne2 = Range("B65536").End(xlUp).Row
                    Cells(derniereligne + 1, 1).Select
                    ActiveSheet.Paste
                End If
            End If
        Next
    End If
    Next
    Si tu as des questions hésites pas!

  3. #3
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Bonjour le fil, bonjour le forum,

    Surtout éviter les Activate/Select autant que possible !... (j'avais déjà fait cette remarque à Xaviou il me semble...)
    Essaie comme ça. Une partie du code est commenté car ton fichier ne propose qu'une seule feuille. Tu adapteras :
    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
    Sub Macro1()
    Dim O As Worksheet 'déclare la varaible O (Onglets)
    Dim F1 As Worksheet 'déclare la variable F1 (onglet Feuil1)
    Dim F2 As Worksheet 'déclare la variable F2 (onglet Feuil2)
    Dim R As Range 'déclare la variable R (Recherche)
    Dim COL As Byte 'déclare la variable COL (COLonne)
    Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
    Dim I As Integer 'déclare la variable I (Incrément)
    Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)
     
     
    'si 12 onglets dans le classeur
    'For Each O In Worksheets 'boucle sur tous les onglets O du classeur
        'si A1 de l'onglet de la boucle est égale à l'année de la date en cours et si A2 est égale au mois de la date en cours, définit l'onget F1, sort de la boucle
        'If O.Range("A1") = Year(Date) And O.Range("A2") = Month(Date) Then Set F1 = O: Exit For
    'Next O 'prochaine onglet de la boucle
    'sinon
    Set F1 = Worksheets("Feuil1") 'définit l'onglet F1
     
    Set F2 = Worksheets("Feuil2") 'définit l'onglet F2
    F2.Range("A1").CurrentRegion.Offset(1, 0).ClearContents 'efface d'éventuelles anciennes données
    TV = F1.Range("A8:AK" & F1.Cells(Application.Rows.Count, "A").End(xlUp).Row) 'définit le tableau des valeurs TV
    Set R = F1.Rows(5).Find(Day(Date), , xlValues, xlWhole) 'définit la recherche R
    COL = R.Column 'définit la colonne COL
    For I = 1 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV
        If TV(I, COL) = "P" And TV(I, 35) = "A" Then 'condition : si "P" est présent dans la colonne COL de TV et si N10 vaut "A"
            Set DEST = F2.Cells(Application.Rows.Count, "A").End(xlUp).Offset(1, 0) 'définit la cellule de destination DEST
            DEST.Value = TV(I, 1) 'renvoie le nom dans la celluel DEST
        End If 'fin de la condition
        If TV(I, COL) = "P" And TV(I, 36) = "A" Then 'condition : si "P" est présent dans la colonne COL de TV et si N20 vaut "A"
            Set DEST = F2.Cells(Application.Rows.Count, "B").End(xlUp).Offset(1, 0) 'définit la cellule de destination DEST
            DEST.Value = TV(I, 1) 'renvoie le nom dans la celluel DEST
        End If 'fin de la condition
        If TV(I, COL) = "P" And TV(I, 37) = "A" Then 'condition : si "P" est présent dans la colonne COL de TV et si N30 vaut "A"
            Set DEST = F2.Cells(Application.Rows.Count, "C").End(xlUp).Offset(1, 0) 'définit la cellule de destination DEST
            DEST.Value = TV(I, 1) 'renvoie le nom dans la celluel DEST
        End If 'fin de la condition
    Next I 'prochaine ligne de la boucle
    End Sub

Discussions similaires

  1. [XL-2007] Remplir un tableau à partir d'une liste dans un autre onglet
    Par maymou27 dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 20/06/2012, 14h34
  2. iReport Generation tableau à partir d'une List
    Par ggalou dans le forum iReport
    Réponses: 0
    Dernier message: 14/12/2010, 09h39
  3. Remplir un tableau à partir d'une valeur initiale
    Par Maliciouss dans le forum Pascal
    Réponses: 9
    Dernier message: 13/12/2009, 14h46
  4. [formulaire] remplir un champ à partir d'une liste
    Par mystikgirl30 dans le forum IHM
    Réponses: 4
    Dernier message: 23/04/2007, 11h30
  5. [SQL] Obtenir un tableau à partir d'une liste
    Par JMO91 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 11/01/2006, 00h07

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