XL 2013 Copier/coller une plage de cellules avec conditions

mmk

XLDnaute Nouveau
Bonjour à tous,

J'ai créé un planning Excel avec 2 feuilles :
- l'une récapitule le planning de tous les employés (chefs d'équipe + vendeurs)
- l'autre s'intéresse uniquement à une catégorie d'employé (les chefs d'équipe) qui doivent assurer des permanences récurrentes. Cette 2e feuille se veut collaborative, c'est à dire que chaque chef d'équipe peut s'y rendre pour y entrer ses indisponibilités.

Ce que je souhaite :
Seule la 1e feuille serait remplie, je souhaite créer une macro qui copie/colle le planning de la 1e feuille vers la 2e feuille, avec le point particulier que si la personne a déjà indiqué dans une cellule de la 2e feuille qu'elle était "INDISPO", la cellule de la 1e feuille ne se colle pas et qu'on passe à la cellule suivante.

Je suis autodidacte en VBA que je pratique depuis seulement 2 mois, et je peine à trouver une solution. J'imagine qu'il me faut une boucle de type "for each" mais tout ce que j'entreprend pour le moment s'avère être un échec cuisant ^^

Je joins bien sûr un petit fichier type pour essayer d'illustrer au mieux mon propos :)

D'avance merci pour toutes les pistes que vous pourrez me souffler

Manon
 

Pièces jointes

  • copier_coller plage.xlsx
    13.9 KB · Affichages: 4

mmk

XLDnaute Nouveau
Merci beaucoup pour cette première ébauche, c'est en effet ressemblant à ce que je souhaite...
j'ai encore du mal avec la logique des boucles, dans avec les boucles imbriquées c'est encore pire ^^

Cependant cette hypothèse tient compte seulement du fait que la cellule de la feuille 2 soit vide. Mais dans le cas d'un changement de planning par exemple, il se peut que l'une des cellules soient déjà pourvue d'une valeur.
est-ce qu'on ne peut pas plutôt changer la condition par un "IF NOT cells().value = "INDISPO" then
Si oui comment s'y prendre ?
 

mmk

XLDnaute Nouveau
Super !!!
Avec vos propositions, j'obtiens donc au final ce code, qui copie/colle toute ma cellule (pour conserver le style de cellule), ce qui est plus parlant pour moi

VB:
Sub Test()
 
  Dim i%, j%, col%, Dl%, Dc%, Lr%, Lc%
  Dim Ws As Worksheet, Wd As Worksheet
  Set Ws = Sheets("Feuil1")
  Set Wd = Sheets("Feuil2")
  Dl = Ws.Range("A" & Rows.Count).End(xlUp).Row
  Dc = Ws.Cells(3, Columns.Count).End(xlToLeft).Column
  Lr = Wd.Range("A" & Rows.Count).End(xlUp).Row
  Lc = Wd.Cells(3, Columns.Count).End(xlToLeft).Column
  j = 4
    For i = 4 To Dl
      If Ws.Cells(i, "A").Value = Wd.Cells(j, "A").Value And Ws.Cells(i, "B").Value = Wd.Cells(j, "B").Value Then
        For col = 6 To Dc
          If Wd.Cells(3, col - 3).Value = Ws.Cells(3, col).Value Then
            If Wd.Cells(j, col - 3).Value <> "INDISPO" Then Ws.Cells(i, col).Copy Destination:=Wd.Cells(j, col - 3)
          End If
        Next col
      End If
      j = j + 1
    Next i
    Wd.Activate
End Sub

Merci mille fois ! :):)
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
315 097
Messages
2 116 186
Membres
112 679
dernier inscrit
Yupanki