Historique de validation
coucou tous le monde j'espere que vous aller bien
je veux cree une macro que copie les cellules suivantes (B1, B3, A6, B6, E20, F20) de la feuille calcule sur la derniere lignes de la feuilles Historique
des idees ?
un petit essaye
Sub histo()
Dim lRow As Long
Set hs = Sheets("Historique")
Set cs = Sheets("calcul")
lRow = hs.Cells(Rows.Count, 1).End(xlUp).Row
'date
cs.Range("B1").Copy
hs.Range("A" & lRow + 1).PasteSpecial xlPasteValues
'nom
cs.Range("B3").Copy
hs.Range("B" & lRow + 1).PasteSpecial xlPasteValues
'non prod
cs.Range("E20").Copy
hs.Range("E" & lRow + 1).PasteSpecial xlPasteValues
'temps
cs.Range("F20").Copy
hs.Range("F" & lRow + 1).PasteSpecial xlPasteValues
'client
cs.Range("A6:A19").Copy
hs.Range("C" & lRow + 1).PasteSpecial xlPasteValues
'reference
cs.Range("B6:B19").Copy
hs.Range("D" & lRow + 1).PasteSpecial xlPasteValues
End Suble probleme danc 'reference' et 'client' il copies toutes les cellules , je veux qu'il copie juste les cellules non vides
Bonjour,
Ceci (non testé)
Sub Histo()
Dim lRow_Hs As Long, lRow_Cs As Long, i As Long
Dim Hs As Worksheet, Cs As Worksheet
Application.ScreenUpdating = False
Set Hs = Sheets("Historique")
Set Cs = Sheets("calcul")
lRow_Cs = Cs.Cells(Rows.Count, 1).End(xlUp).Row
lRow_Hs = Hs.Cells(Rows.Count, 1).End(xlUp).Row
If lRow_Cs > 5 Then
For i = 6 To lRow_Cs
Hs.Range("A" & lRow_Hs + 1).Value = Cs.Range("B1").Value 'date
Hs.Range("B" & lRow_Hs + 1).Value = Cs.Range("B3").Value 'nom
Hs.Range("E" & lRow_Hs + 1).Value = Cs.Range("E20").Value 'non prod
Hs.Range("F" & lRow_Hs + 1).Value = Cs.Range("F20").Value 'temps
Hs.Range("C" & lRow_Hs + 1) = Cs.Cells(i, "A") 'client
Hs.Range("D" & lRow_Hs + 1) = Cs.Cells(i, "B") 'reference
Next i
lRow_Hs = lRow_Hs + 1
End If
End SubCdlt
Ceci:
Sub Histo()
Dim lRow_Hs As Long, lRow_Cs As Long, i As Long
Dim Hs As Worksheet, Cs As Worksheet
Application.ScreenUpdating = False
Set Hs = Sheets("Historique")
Set Cs = Sheets("calcul")
lRow_Cs = Cs.Cells(Rows.Count, 1).End(xlUp).Row
lRow_Hs = Hs.Cells(Rows.Count, 1).End(xlUp).Row
If lRow_Cs > 5 Then
For i = 6 To lRow_Cs
Hs.Range("A" & lRow_Hs + 1).Value = Cs.Range("B1").Value 'date
Hs.Range("B" & lRow_Hs + 1).Value = Cs.Range("B3").Value 'nom
Hs.Range("E" & lRow_Hs + 1).Value = Cs.Range("E20").Value 'non prod
Hs.Range("F" & lRow_Hs + 1).Value = Cs.Range("F20").Value 'temps
Hs.Range("C" & lRow_Hs + 1) = Cs.Cells(i, "A") 'client
Hs.Range("D" & lRow_Hs + 1) = Cs.Cells(i, "B") 'reference
Next i
lRow_Hs = lRow_Hs + 1
End If
'Ajout des noms manquants
For i = 3 To lRow_Hs
If Hs.Cells(i, "B") = "" Then Hs.Cells(i, "B") = Hs.Cells(i - 1, "B")
Next i
End SubCdlt
merci beaucoup ca marche tres bien, est ce qu'il ya une moyenne de copie tous le range de A6 jusqua F& last row, de la fauille de calcule
jai essaye de modifier le code mais ca marche pas
Sub Histo1()
Dim lRow_Hs As Long, lRow_Cs As Long, i As Long
Dim Hs As Worksheet, Cs As Worksheet
Application.ScreenUpdating = False
Set Hs = Sheets("Historique")
Set Cs = Sheets("calcul")
lRow_Cs = Cs.Cells(Rows.Count, 1).End(xlUp).Row
lRow_Hs = Hs.Cells(Rows.Count, 1).End(xlUp).Row
If lRow_Cs > 5 Then
For i = 6 To lRow_Cs
Hs.Range("A" & lRow_Hs + 1).Value = Cs.Range("B1").Value 'date
Hs.Range("B" & lRow_Hs + 1).Value = Cs.Range("B3").Value 'nom
Hs.Range("I" & lRow_Hs + 1).Value = Cs.Range("E20").Value 'T non prod
Hs.Range("J" & lRow_Hs + 1).Value = Cs.Range("F20").Value 'T temps
Hs.Range("C" & lRow_Hs + 1) = Cs.Range("A6:F" & lRow_Cs + 1) 'table
Next i
lRow_Hs = lRow_Hs + 1
End If
'Ajout des noms manquants
For i = 3 To lRow_Hs
If Hs.Cells(i, "B") = "" Then Hs.Cells(i, "B") = Hs.Cells(i - 1, "B")
Next i
End SubDésolé, je ne comprends pas, redéposez le fichier avec les résultats attendus,
Le fichier est vide, ça ne m'aide pas du tout, je voudrais qu'il soit rempli avec quelques exemples de résultats attendus.
Voila et merci
Bonjour,
Essayez ceci:
Sub Histo()
Dim lRow_Hs As Long, lRow_Cs As Long, i As Long
Dim Hs As Worksheet, Cs As Worksheet
Application.ScreenUpdating = False
Set Hs = Sheets("Historique")
Set Cs = Sheets("calcul")
lRow_Cs = Cs.Cells(5, 1).End(xlUp).CurrentRegion.Row + 4
lRow_Hs = Hs.Range("histo_tbl").Rows.Count
If lRow_Hs > 1 Then lRow_Hs = Hs.ListObjects("histo_tbl").DataBodyRange.Rows.Count + 1
If lRow_Cs > 5 Then
For i = 6 To lRow_Cs
Hs.Range("A" & lRow_Hs + 1).Value = Cs.Range("B1").Value 'date
Hs.Range("B" & lRow_Hs + 1).Value = Cs.Range("B3").Value 'nom
Next i
lRow_Hs = lRow_Hs + 1
End If
Range(Cs.Cells(6, "A"), Cs.Cells(lRow_Cs, "F")).Copy Hs.Cells(lRow_Hs, "C")
'Ajout des noms manquants
For i = 3 To lRow_Hs + 1
If Hs.Cells(i, "B") = "" Then Hs.Cells(i, "B") = Hs.Cells(i - 1, "B")
Next i
End SubAttention, avant de commencer, supprimer les dernières lignes vides du tableau structuré de la feuille "Historique".
Cdlt
bonjour,
excel a ajouté un outil fantastique : un tableau, donc il faut utiliser ses characteristiques et cela facilite enorme !
Sub Histo()
Dim LO As ListObject, i, c, cNouveau
Set LO = Sheets("Historique").ListObjects("histo_tbl") 'votre tableau
With Sheets("calcul") 'votre données
For Each c In .Range("A6:A18").Cells 'toute cette plage
If Len(c.Value) > 0 Then 'cellule non vide
Set cNouveau = LO.ListRows.Add.Range.Range("A1").Resize(, 8) 'nouvelle plage (ligne) ajoutée au tableau
cNouveau.Resize(, 2).Value = Array(.Range("B1").Value, .Range("B3").Value) '2 premières cellules
cNouveau.Cells(1, 3).Resize(, 6).Value = c.Resize(, 6).Value '6 autres cellules
End If
Next
End With
With LO.DataBodyRange 'ce tableau
For i = 2 To LO.ListRows.Count
If .Cells(i, "B") = "" Then .Cells(i, "B") = .Cells(i - 1, "B") ' 'Ajout des noms manquants
Next i
End With
End Submerci a vous , maintenant il marche tres tres bien et ui cest tres interessant d'utiliser listobjects
