Copie cellules d'une feuille à l'autre avec des données aléatoires

Bonjour,

Je souhaiterais effectuer une copie des formations et des dates de chaque employé de la feuille 3 à la feuille 1 de façon automatique.Sachant que les données de la feuille 3 me parviennent de façon aléatoires mais que chaque formation et dates correspondent bien à l'employé concerné.

Merci de votre aide,

Cordialement,

Aline

10exemple.xlsx (26.52 Ko)

Salut Aline,

me parviennent de façon aléatoire... automatique...

Il faut bien que quelqu'un les y colle, ces infos.

  • Ces infos écrasent-elles ou s'ajoutent-elles aux précédentes ?
  • Pour un nouveau, la date de début doit être inscrite UNE fois en [C] ?
  • Un nouveau venu s'insère en ligne 3 ?
  • Sinon, ces dates se retrouvent bien en [J] concaténées avec la formation ?

Dans cette version, les nouvelles infos sont réputées écraser les anciennes et débuter à la ligne 2.

En l'état, le code répond aux autres questions par oui!

La macro démarre sur un changement en 'INPUT' étant entendu que les nouvelles données sont censées être collées en bloc.

Private Sub Worksheet_Change(ByVal Target As Range)
'
Dim rCel As Range
Dim iRow%, iNb%, sItem$
'
Application.EnableEvents = False
Application.ScreenUpdating = False
'
If [A2] <> "" Then
    With Worksheets("Formations")
        For x = 2 To Range("A" & Rows.Count).End(xlUp).Row
            sItem = UCase(Cells(x, 2) & " " & Cells(x, 1))
            Set rCel = .Range("A:A").Find(what:=sItem, lookat:=xlWhole, LookIn:=xlValues, searchdirection:=xlNext)
            If Not rCel Is Nothing Then
                iRow = rCel.Row
            Else
                iRow = 3
                .Rows(3).Insert shift:=xlDown
                .Range("A3").Value = sItem
                .Range("C3").Value = CDate(Range("D" & x).Value)
            End If
            iNb = DateDiff("d", CDate(Range("D" & x).Value), CDate(Range("E" & x).Value))
            .Range("J" & iRow).Value = _
                .Range("J" & iRow).Value & IIf(.Range("J" & iRow).Value = "", "", Chr(10)) & UCase(Cells(x, 3)) & "   " & _
                UCase(Format(CDate(Range("D" & x).Value), "[$40-c]dd mmmm yyyy")) & IIf(iNb > 0, " " & IIf(iNb = 1, "ET ", "AU ") & UCase(Format(CDate(Range("E" & x).Value), "[$40-c]dd mmmm yyyy")), "")
        Next
        Cells.Delete
        .Activate
    End With
End If
'
Application.ScreenUpdating = True
Application.EnableEvents = True
'
End Sub

A suivre, sans doute...

A+

4aline.xlsm (35.04 Ko)

Bonjour,

Merci beaucoup pour votre aide.Etant en formation pendant deux jours je n'ai pas pu vous répondre avant.Je vais faire ce que vous m'avait envoyé aujourd'hui peux-être ou pendant le week-end.Cela dépendra de l'affluence de travail.

Bonne journée.

Aline.

Salut curulis57,

Beaucoup de travail, je souhaiterai savoir quand est ce que tu es en ligne le plus souvent?

J'ai essayé plusieurs trucs avant de te demander mais là je suis coincée, peux-tu m'aider?

Dans le bouton "Formation" je souhaiterai intégrer la macro que tu m'a faite.

Est-ce la bonne chose à faire?

Quand je fais un clic droit sur le bouton "formation", je choisie "Affecter une macro" et ensuite apparaît une fenêtre où on peux voir ceci:

Affecter une macro

Nom de la macro:

'TABLEAUENCADREMENT.xlsm'!FORMATIONS

macro dans : Tous les classeurs ouverts

et là je ne sais pas comment faire ensuite

Merci de ton aide

Aline

Salut Aline,

Conseil : oublie les contrôles de formulaire! Ils sont juste là pour assurer la compatibilité entre d'anciens fichiers construits avec ces contrôles et les versions modernes d'Excel.

Avantages des contrôles ActiveX :

  • plus faciles à programmer ;
  • leur code est intégré directement au module VBA de la feuille sur laquelle ils sont posés et non rejeté dans un module standard (Module 1, par ex.)
J'ai donc "créé" un bouton, placé en 'Formations' [A1] et adapté le code avec une gestion plus fine des dates des formations.
            iNB = DateDiff("d", CDate(.Range("D" & x).Value), CDate(.Range("E" & x).Value))
            iDay1 = Day(CDate(.Range("D" & x).Value)): iDay2 = Day(CDate(.Range("E" & x).Value))
            iMonth1 = Month(CDate(.Range("D" & x).Value)): iMonth2 = Month(CDate(.Range("E" & x).Value))
            iYear1 = Year(CDate(.Range("D" & x).Value)): iYear2 = Year(CDate(.Range("E" & x).Value))
            sMsg = "   " & IIf(iNB = 0, "", CStr(iDay1) & IIf(iMonth1 <> iMonth2 Or iYear1 <> iYear2, " " & tMonth(iMonth1 - 1) & IIf(iYear1 <> iYear2, " " & CStr(iYear1), ""), ""))
            sMsg = sMsg & IIf(iNB = 0, "", IIf(iNB = 1, " ET ", " AU ")) & CStr(iDay2) & " " & tMonth(iMonth2 - 1) & " " & CStr(iYear2)
            Range("J" & iRow).Value = Range("J" & iRow).Value & IIf(Range("J" & iRow).Value = "", "", Chr(10)) & UCase(.Range("C" & x).Value) & sMsg

A+

4aline.xlsm (35.93 Ko)

Bonjour Curculi57,

Merci pour ton aide, je vais essayé ce que tu m'as donné ce soir.

Bonne journée,

Aline

Rechercher des sujets similaires à "copie feuille donnees aleatoires"