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 :

[E-03] Transfert de données et de lignes


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 89
    Points : 56
    Points
    56
    Par défaut [E-03] Transfert de données et de lignes
    Bonjour,

    Voici mon problème.

    Dans ma première feuille de mon fichier excel, la feuille "Horaire Viande" dans la colone A à partir de la 6ième ligne, ce trouve le nom des personne.

    À toute les 3 lignes, apparait un autre nom.

    Dans la colonne E de la même ligne = heure de travail du Dimanche. Colonne G = heure de travail du Lundi, Colonne I = heure de travail du Mardi et ainsi de suite.

    Dans ma 2ième feuille "Remplacement", se trouve dans la colonne A à partir de la ligne 3, le nom de tous les même personnes, dans le même ordre, et dans les colonne C à I, ce trouve le nom de personne que la personne dans la colonne A de la même ligne voudrait remplacer en ordre de priorité.

    Maintenant, c'est là que sa ce complique.Dans la feuille "Horaire Viande", si une personne dans la colonne A, est inscrit "Vacance" dans la colonne S de la même ligne, il va voir dans la feuille "Remplacement" à partir du nom qui suis celui qui est en vacance, il regarde s'il a se choix dans ses préférence, et si oui, il copie les heure que la personne est en vacance et le colle sur la ligne de celui qui à le choix pour le remplacer.

    Est-ce possible de faire ça ?

    Si oui, comment?

    Merci pour votre aide.

  2. #2
    Membre régulier Avatar de DidierLoche
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 84
    Points : 105
    Points
    105
    Par défaut
    Bonjour,

    Un truc que je voudrais clarifier.
    Si Michel est en vacances, Gilles le remplace. Faut-il copier les horaires de Michel vers la ligne de Gilles (copie des horaires de la ligne 12 à la ligne 15) ou le contraire : copier les horaires de Gilles (ligne 15) à la ligne de Michel (ligne 12) ?
    Dans ton fichier Excel, Yves et Michel sont en vacances.
    Pour les deux, c'est Gilles qui les remplace. Que faut-il faire dans ce cas ?

    Didier

  3. #3
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 89
    Points : 56
    Points
    56
    Par défaut
    Bonjour et merci pour ton aide,

    copier les horaires de Michel vers la ligne de Gilles

    s'il n'y a pas de remplaçant disponible dans la liste ou qu'il remplace déjà quelqu'un, seulement inscrire vacance dans l'horaire du vacancier.

    Merci encore

  4. #4
    Membre régulier Avatar de DidierLoche
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 84
    Points : 105
    Points
    105
    Par défaut
    Bonjour,

    Voilà, j'ai travaillé sur ton problème.
    Pour faciliter le code, j'ai changé l'ordre des noms pour être identique à la liste de la feuille Remplacement.
    Voici donc le code activé par le bouton :
    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
    Sub remplacement()
    Dim li As Integer, li_rep As Integer, li_rep_trouvé As Integer
    Dim col_rep As Integer
    Dim Nom As String, Nom_rep As String, Situation_remplaçant As String
     
    For li = 9 To 15 Step 3
        Nom = Cells(li, 1)
        If Cells(li, 19) = "VACANCE" Then
            li_rep = li / 3 + 1 'ligne correspondante dans "Remplacement"
            col_rep = 2
            Do
            '
            ' Boucle qui cherche le 1er disponible pour remplacer "Nom"
            '
                col_rep = col_rep + 1
                Nom_rep = Worksheets("Remplacement").Cells(li_rep, col_rep)
                If Nom_rep <> "" Then
                    Situation_remplaçant = Application.WorksheetFunction.VLookup(Nom_rep, Range("A6:S15"), 19)
                End If
            Loop Until Situation_remplaçant = "" Or Nom_rep = ""
            If Nom_rep <> "" And Situation_remplaçant = "" Then
            '
            ' Remplaçant trouvé
            '
                li_rep_trouvé = Application.WorksheetFunction.Match(Nom_rep, Range("A:A"), 0)
                Range(Cells(li, 5), Cells(li + 2, 17)).Copy Destination:= _
                    Range(Cells(li_rep_trouvé, 5), Cells(li_rep_trouvé + 2, 17))
                Cells(li_rep_trouvé, 19) = "Remplacement de " & Nom
            End If
        End If
    Next li
    End Sub
    Quand quelqu'un remplace, le code écrit "Remplacement de ...". Cela permet de déclarer cette personne non disponible pour un autre remplacement.

    Est-ce que cela répond à ton besoin ?

    Didier

  5. #5
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 89
    Points : 56
    Points
    56
    Par défaut
    Bonjour DidierLoche

    Il me donne une erreur sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Situation_remplaçant = Application.WorksheetFunction.VLookup(Nom_rep, Range("A6:S15"), 19)
    me disant : impossible de lire la propriété VLookup de la classe WorkSheetFunction.

    Que veut dire cette erreur?

  6. #6
    Membre régulier Avatar de DidierLoche
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 84
    Points : 105
    Points
    105
    Par défaut
    Tu dois être sur la feuille "Horaire Viandes" pour que cela fonctionne. Est-ce bien le cas ?
    Pour que cela marhe dans tous les cas, j'ai légèrement modifié le 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
    Sub remplacement()
    Dim li As Integer, li_rep As Integer, li_rep_trouvé As Integer
    Dim col_rep As Integer
    Dim Nom As String, Nom_rep As String, Situation_remplaçant As String
     
    With Worksheets("Horaire Viandes")
        For li = 9 To 15 Step 3
            Nom = .Cells(li, 1)
            If .Cells(li, 19) = "VACANCE" Then
                li_rep = li / 3 + 1 'ligne correspondante dans "Remplacement"
                col_rep = 2
                Do
                '
                ' Boucle qui cherche le 1er disponible pour remplacer "Nom"
                '
                    col_rep = col_rep + 1
                    Nom_rep = Worksheets("Remplacement").Cells(li_rep, col_rep)
                    If Nom_rep <> "" Then
                        Situation_remplaçant = Application.WorksheetFunction.VLookup(Nom_rep, .Range("A6:S15"), 19)
                    End If
                Loop Until Situation_remplaçant = "" Or Nom_rep = ""
                If Nom_rep <> "" And Situation_remplaçant = "" Then
                '
                ' Remplaçant trouvé
                '
                    li_rep_trouvé = Application.WorksheetFunction.Match(Nom_rep, .Range("A:A"), 0)
                    .Range(Cells(li, 5), Cells(li + 2, 17)).Copy Destination:= _
                        .Range(Cells(li_rep_trouvé, 5), Cells(li_rep_trouvé + 2, 17))
                    .Cells(li_rep_trouvé, 19) = "Remplacement de " & Nom
                End If
            End If
        Next li
        End With
    End Sub
    Didier

  7. #7
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 89
    Points : 56
    Points
    56
    Par défaut
    Bizzard, toujours la même erreur.

    Je t'envoies le fichier avec les modifications que tu m'as donné.

    Regarde l'erreur que ça fait.

    Ce peut-il que l'erreur vient du fait que je suis avec excel 2003?

  8. #8
    Membre régulier Avatar de DidierLoche
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 84
    Points : 105
    Points
    105
    Par défaut
    Je n'arrive pas à récupérer ton zip, cela me fait une erreur (pièce non valide).
    Tu n'aurais pas renommé les onglets ?
    Je suis aussi sur Excel-2003.

    Didier

  9. #9
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 89
    Points : 56
    Points
    56
    Par défaut
    et voilà.

  10. #10
    Membre régulier Avatar de DidierLoche
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 84
    Points : 105
    Points
    105
    Par défaut
    Voili-voilà,

    2 choses :
    - J'avais changé l'ordre des noms dans la feuille "Horaire Viandes" et toi, tu l'as changé dans "Remplacement".
    - J'ai oublié un "False" dns l'instruction VLoopUp

    Ci-joint le 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
    Private Sub CommandButton1_Click()
    Dim li As Integer, li_rep As Integer, li_rep_trouvé As Integer
    Dim col_rep As Integer
    Dim Nom As String, Nom_rep As String, Situation_remplaçant As String
     
    With Worksheets("Horaire Viandes")
        For li = 6 To 12 Step 3
            Nom = .Cells(li, 1)
            If .Cells(li, 19) = "VACANCE" Then
                li_rep = li / 3 + 1 'ligne correspondante dans "Remplacement"
                col_rep = 2
                Do
                '
                ' Boucle qui cherche le 1er disponible pour remplacer "Nom"
                '
                    col_rep = col_rep + 1
                    Nom_rep = Worksheets("Remplacement").Cells(li_rep, col_rep)
                    If Nom_rep <> "" Then
                        Situation_remplaçant = Application.WorksheetFunction.VLookup(Nom_rep, .Range("A6:S16"), 19, False)
                    End If
                Loop Until Situation_remplaçant = "" Or Nom_rep = ""
                If Nom_rep <> "" And Situation_remplaçant = "" Then
                '
                ' Remplaçant trouvé
                '
                    li_rep_trouvé = Application.WorksheetFunction.Match(Nom_rep, .Range("A:A"), 0)
                    .Range(Cells(li, 5), Cells(li + 2, 17)).Copy Destination:= _
                        .Range(Cells(li_rep_trouvé, 5), Cells(li_rep_trouvé + 2, 17))
                    .Cells(li_rep_trouvé, 19) = "Remplacement de " & Nom
                End If
            End If
        Next li
        End With
     
     
    End Sub
    Didier

  11. #11
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 89
    Points : 56
    Points
    56
    Par défaut
    Merci, super.

    Bonne année 2009

  12. #12
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 89
    Points : 56
    Points
    56
    Par défaut
    Bonjour, encore moi,

    Je viens de me rendre compte que dans la feuille Horaire Viandes, il ne sont pas toujours dans le même ordre que la feuille Remplacement. Comment faire pour y aller en ordre d'ancienneté selon la feuille Remplacement colonne B?

    merci encore

  13. #13
    Membre régulier Avatar de DidierLoche
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 84
    Points : 105
    Points
    105
    Par défaut
    Bonjour,

    La macro fonctionne uniquement si le même ordre est respecté. On peut la modifier pour qu'elle s'en accommode. Elle suppose aussi que Gilles (irremplaçable d'après tes critères ... personne n'est irremplaçable )

    Pour mettre la liste dans le bon ordre dans "Horaire Viandes", deux solutions :
    - La liste n'est pas longue : tu le fais à la main, sélectionne les trois lignes d'une personne, tu cliques sur le bord, tu déplaces la sélection en appuyant sur Shift et tu lâches le bouton de la souris au bon endroit.
    - La liste est longue et là, une petite macro pourrait le faire rapidement (voir si tu passes plus de temps à développer une macro qui ne sera éxecutée qu'une seule fois que de faire les modifications à la main)

    Didier

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 27/06/2006, 13h47
  2. [C#] [Excel] Transfert de données
    Par bartoumi dans le forum Windows Forms
    Réponses: 3
    Dernier message: 11/04/2005, 14h08
  3. Transfert de données securisées via Internet ???
    Par franck06 dans le forum Développement
    Réponses: 3
    Dernier message: 22/11/2004, 17h16
  4. [Designer] Problème de transfert de données entre modul
    Par BILLYPATOU dans le forum Designer
    Réponses: 11
    Dernier message: 09/03/2004, 18h15
  5. Transfert de données vers My SQL
    Par zoso dans le forum Outils
    Réponses: 2
    Dernier message: 30/09/2003, 10h21

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