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
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 SubA suivre, sans doute...
A+
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.)
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) & sMsgA+
Bonjour Curculi57,
Merci pour ton aide, je vais essayé ce que tu m'as donné ce soir.
Bonne journée,
Aline