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 :

Répartition données dans plusieurs cellules sous conditions [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2015
    Messages : 23
    Par défaut Répartition données dans plusieurs cellules sous conditions
    Bonjour à vous tous,
    Je vous contact car je n'arrive plus à avancer sur une macro qui me permet de répartir des données sur plusieurs cellules.
    Je m'explique : dans un tableau2 j'ai toutes les semaines de l'année et pour chaque semaine j'ai la quantitée de produit à produire. La macro que j'essaie de construire me permet de completer mon tableau1 (colonne G) et pour chaque produit dans la semaine désirée lui imputer la date de production.
    Voici un petit bout de mon code et en pj mon fichier pour mieux me comprendre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub date_prod()
    Dim i As Integer
    For i = 2 To 500 Step 1
    If Sheets("Tableau1").Range("F" & i) = Sheets("Tableau2").Range("A" & i) Then
        Sheets("Tableau1").Range("G" & i) = Sheets("Tableau2").Range("D" & i)
    End If
    Next i
    End Sub
    Je vous remercie par avance
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    j'ai un peu de mal à comprendre comment doit s'effectuer le repérage dans ton tableau 2, afin de compléter le tableau 1 :

    - ton tableau 1 dispose du champs "Code produit", contrairement à ton tableau 2
    - dans ta macro, tu veux récupérer la date en colonne D, qui correspond à la date du champs "LUNDI", il ne faut donc pas tenir compte des autres jours de la semaine ?

    En fait, ton problème souffre d'un manque de clarté : ce remplissage correspond à quel besoin exactement ?
    Car la structure du fichier me semble inadaptée avec les faibles informations fournies, et sources d'erreurs d'interprétation

  3. #3
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2015
    Messages : 23
    Par défaut
    Merci à toi de prendre le temps de me répondre. Je pense que ce que je désire faire n'est peut être pas faisable. Je vais essayer d'être plus claire.
    Dans mon cas de figure on ne tient pas compte du code produit on prend simplement en compte le numéro de semaine. En fonction de ce numero de semaine on va chercher dans le tableau2 la date de production (colonne D, F, H, J, L).
    Par exemple pour la semaine 14 j'ai 8 produits à produire (peu importe le code produit). Dans le tableau2 j'ai donc, 2 produits pour lundi, 2 produits pour mardi, 2 produits pour mercredi, 1 produit pour jeudi et 1 pour vendredi.
    Ce que je souhaite faire c'est dans le tableau1 renseigner les dates de production calculées dans le tableau2 :

    MOIS Code lancement Code produit Date liv. Date com. SEM DDO Date prod.
    4 6610 NA28008-016 1/4/2015 27/03/2015 14 30/03/2015
    4 6613 NA28012-016 1/4/2015 27/03/2015 14 30/03/2015
    4 6624 NA28003-016 2/4/2015 30/03/2015 14 31/03/2015
    4 6615 NA28008-016 2/4/2015 30/03/2015 14 31/03/2015
    4 6616 NA28008-016 3/4/2015 02/04/2015 14 01/04/2015
    4 6617 NA28008-016 7/4/2015 02/04/2015 14 01/04/2015
    4 6618 NA28012-016 8/4/2015 03/04/2015 14 02/04/2015
    4 6626 NA28008-016 9/4/2015 08/04/2015 14 03/04/2015

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    En résumé, tu souhaites extraire toutes les lignes d'enregistrements d'un tableau "source" vers une plage de données "cible" et ce suivant un ou des critères, comme l'indique le titre de la discussion ?
    Si c'est bien le cas, le filtre avancé d'excel est la solution (en VBA, c'est la méthode AdvancedFilter).
    A lire Les filtres avancés ou élaborés dans Excel
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Voici une piste sans utilisation des filtres avancés, pour lesquels je n'ai pas encore eu le temps d'en appréhender le fonctionnement.

    Il faut adapter à ton cas, j'ai commenté les étapes pour la compréhension.
    Le code est fonctionnel sur le fichier que tu as fourni.

    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
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
     
    Option Explicit
     
    Sub date_prod()
     
        Dim i As Integer
        Dim j As Integer
        Dim ShSource As Worksheet
        Dim ShDest As Worksheet
        Dim CellSource As Range
        Dim CellDest As Range
        Dim Reponse As String
     
        ' récupération du numéro de semaine
        ' attention à prévoir la vérification que la réponse est bien un numéro de semaine
        ' et gérer le cas où l'utilisateur ferme l'invite ou annule l'invite
        Reponse = InputBox("Veuillez indiquer le numéro de semaine")
     
        ' mise sous variable des deux feuilles
        With ThisWorkbook
     
            Set ShSource = .Worksheets("Tableau2")
            Set ShDest = .Worksheets("Tableau1")
     
        End With
     
        ' on cherche la ligne du tableau 2 qui contient le numéro de semaine
        ' on positionne CellSource sur la colonne A de cette ligne
        For i = 2 To ShSource.UsedRange.Rows.Count
            If ShSource.Range("A" & i) = Reponse Then
     
                Set CellSource = ShSource.Range("A" & i)
                Exit For
     
            End If
        Next i
     
        ' gestion du cas où cette semaine n'existe pas dans tableau 2
        If CellSource Is Nothing Then
     
            MsgBox ("La semaine " & Reponse & " n'existe pas dans Tableau2")
            Exit Sub
     
        End If
     
        ' on cherche la première ligne de tableau 1 qui contient ce numéro de semaine
        For i = 2 To ShDest.UsedRange.Rows.Count
            If ShDest.Range("F" & i) = Reponse Then
     
                Set CellDest = ShDest.Range("F" & i)
                Exit For
     
            End If
        Next i
     
        ' gestion du cas où cette semaine n'existe pas dans tableau 1
        If CellDest Is Nothing Then
     
            MsgBox ("La semaine " & Reponse & " n'existe pas dans Tableau1")
            Exit Sub
     
        End If
     
        ' pour les 5 jours de la semaine
        For i = 2 To 10 Step 2
     
            ' on boucle autant de fois que le nombre de pièces à produire sur cette journée
            For j = 0 To CellSource.Offset(0, i) - 1
     
                ' on écrit la date de production sur les "j" lignes de tableau 1
                CellDest.Offset(j, 1) = CDate(CellSource.Offset(0, i + 1))
     
            Next j
     
            ' après avoir fini le traitement de la journée, on décale la ligne d'écrite dans tableau2
            Set CellDest = CellDest.Offset(CellSource.Offset(0, i), 0)
     
        Next i
     
        Set CellDest = Nothing
        Set CellSource = Nothing
        Set ShDest = Nothing
        Set ShSource = Nothing
     
    End Sub

  6. #6
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut




    Bonjour,

    avec un filtre avancé, en général il ne faut guère plus de dix lignes de code …
    Sans compter sa célérité : résultat instantané !


    __________________________________________________________________________________________________
    Je suis Charlie - Je suis Bardo

  7. #7
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2015
    Messages : 23
    Par défaut
    Je suis en train de tester avec les filtres avancés pour voir si je peux avoir le résultat souhaité sans passer par vb si cela est possible.
    Je te remercie pour ta proposition. Je reviens vers vous après quelques tests qui je l'espère seront concluant

    Après quelques tests je vais finalement opter pour le code de joe.levrai. En effet, le filtre avancé m’a causé bien des soucis. Cependant, j’ai juste une question concernant la macro j’ai essayé de la remodifier pour le cas où les semaines ne serait pas dans l’ordre croissant mais cela ne fonctionne pas. Exemple ci-dessous :

    MOIS Code lancement Code produit Date liv. Date com. SEM DDO Date prod.
    4 6610 NA28008-016 1/4/2015 27/03/2015 14
    4 6623 NA28008-016 9/4/2015 06/04/2015 15
    4 6618 NA28012-016 8/4/2015 03/04/2015 17
    4 6625 NA28012-016 10/4/2015 07/04/2015 15
    4 6616 NA28008-016 3/4/2015 02/04/2015 14
    4 6637 NA28008-016 16/4/2015 15/04/2015 16
    4 6625 NA28012-016 10/4/2015 07/04/2015 15
    4 6626 NA28008-016 9/4/2015 08/04/2015 14
    4 6623 NA28008-016 9/4/2015 06/04/2015 15
    Merci

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

Discussions similaires

  1. obliger une saisie dans une cellule sous condition
    Par fibule38 dans le forum Excel
    Réponses: 7
    Dernier message: 22/05/2015, 18h12
  2. Extraire une donnée dans une table sous conditions
    Par mugiwan dans le forum Excel
    Réponses: 4
    Dernier message: 11/03/2014, 13h08
  3. [XL-2000] Saisie dans des cellules sous conditions
    Par cedana dans le forum Excel
    Réponses: 3
    Dernier message: 14/01/2010, 14h00
  4. Copier/coller dans plusieurs feuilles sous condition
    Par lilou86 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 16/11/2009, 12h18
  5. Récupération de donnée dans un tableau sous conditions
    Par Guillaume.guegan dans le forum Excel
    Réponses: 5
    Dernier message: 06/11/2008, 09h16

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