Insertion de lignes dans un tableau
Bonjour à tous,
Alors voilà, je suis nouveau ici, et même si j'ai quelques bases en VBA, je m'y connais pas très bien ^^'
Pour un projet, j'ai besoin de faire un certain code, mais pas moyen de réussir, et j'ai eu beau chercher plusieurs jours, je n'ai pas encore trouvé ma perle rare !
Ce que j'ai besoin, c'est une macro qui me permettrait de couper des lignes d'un tableau d'une feuille et de les insérées dans un tableau d'une autre feuille.
Dans mon cas, de l'attente montage à Historique de montage, les interventions mise en état "fait" seront envoyé, en appuyant sur un bouton, vers la deuxième feuille.
Ma solution (version beta 0) était d'insérer une ligne et de modifier la fonction obtenu avec l'enregistreur de macro.
Ayant un tableau croisé dynamique me donnant le nombre de ligne de tâche classer "fait", je voulais utiliser la valeur contenue dans cette cellule dans mon programme afin d'adapter en permanence le nombre de ligne à ajouter en actualisant le tableau au passage.
Cependant, je ne sais pas comment faire, car j'ai essayé plusieurs chose :
- mettre la valeur de la cellule dans une variable "n" puis faire "Selection.ListObject.ListRows.Add (n)"
- ou directement Selection.ListObject.ListRows.Add (Range("O3")) (O3 étant la fameuse cellule)
Je joint une copie de mon excel, mais il ne s'agit malheureusement pas de la dernière version, je m'excuse donc, mais cela pourra toujours vous aider.
Merci à ceux qui voudront bien me sauver !
Salut,
Tes feuilles sont protégées par mots de passe, j'en ai alors fait des copies libres.
Dans le fichier ci-joint, les lignes indiquées comme faite sur la feuille ''Liste attente montage'' sont transférées sur l'autre feuille lorsque tu cliques sur le bouton en place.
Vu les références utilisées, il est possible de les placer au bon endroit sur la feuille ''Historique des montages''. Mais d'autres solutions sont envisageables.
C'est un début de solution ?
Si non, indique ce qui est en trop, ce qui manque à ma solution et fourni un fichier sans mot de passe ou indique les mots de passe mis en place.
Amicalement.
Salut ^^
Merci beaucoup de ton aide Yvouille, j'ai testé, et cela fait exactement l'effet escompter. JE te remercie énormément ! (Le mot de passe était écrit au dessus du premier tableau, j'ai donc envoyé le mauvais fichier, je m'en excuse !)
j'ai en parallèle aussi trouvé une solution fonctionnelle que je vais poster pour les curieux. Après tout ça peut toujours être utile et aucun soucis pour avoir des critique sur ce que j'ai fait pour m'améliorer !
Mais si tu pouvais juste m'aider adapter le tien à l'emplacement de mes tableaux (j'ai un peu du mal et je les envoies pas au bon endroit ou cela me détruit de mauvaise ligne ><)
Sub depla_histo()
'
' depla_histo Macro
'
'position initial et définition de variable
Sheets("Liste attente montage").Select
Dim n As Integer
n = Range("AK1").Value
'protection off et actualisation du nombre de fait
ActiveSheet.Unprotect "toto"
ActiveSheet.PivotTables("Tableau croisé dynamique6").PivotCache.Refresh
'Condition d'execution
If n <> 0 Then
i = 0
'Boucle de création de ligne selon le nombr de "fait"
While i <> n
Sheets("Historique des montages").Select
ActiveSheet.Unprotect "toto"
Range("B7").Select
Selection.ListObject.ListRows.Add (1)
i = i + 1
Wend
'séquence de déplacement
Sheets("Liste attente montage").Select
ActiveSheet.ListObjects("Liste").Range.AutoFilter Field:=8, Criteria1:= _
"fait"
On Error Resume Next
Range("Liste[[Référence]:[Date de livraison]]").Select
Selection.Copy
Sheets("Historique des montages").Select
Range("B7").Select
ActiveSheet.Paste
Sheets("Liste attente montage").Select
Selection.EntireRow.Delete
ActiveSheet.ListObjects("Liste").Range.AutoFilter Field:=8
End If
'actualisation
ActiveSheet.PivotTables("Tableau croisé dynamique6").PivotCache.Refresh
End SubEnfin bref, tout mes gros problèmes sont résolus, plus que des petits détails à régler, surtout niveau esthétique (bouton qui ouvre un fichier excel en raccourcie au lieu de liens hypertexte) mais rien d'important vraiment. Je joint aussi mon fichier, si cela permet de voir le fonctionnement ^^
Cordialement.
Salut ^^
Merci beaucoup de ton aide Yvouille, j'ai testé, et cela fait exactement l'effet escompter. JE te remercie énormément ! (Le mot de passe était écrit au dessus du premier tableau, j'ai donc envoyé le mauvais fichier, je m'en excuse !)
j'ai en parallèle aussi trouvé une solution fonctionnelle que je vais poster pour les curieux. Après tout ça peut toujours être utile et aucun soucis pour avoir des critique sur ce que j'ai fait pour m'améliorer !
Mais si tu pouvais juste m'aider adapter le tien à l'emplacement de mes tableaux (j'ai un peu du mal et je les envoies pas au bon endroit ou cela me détruit de mauvaise ligne ><)
Sub depla_histo() ' ' depla_histo Macro ' 'position initial et définition de variable Sheets("Liste attente montage").Select Dim n As Integer n = Range("AK1").Value 'protection off et actualisation du nombre de fait ActiveSheet.Unprotect "toto" ActiveSheet.PivotTables("Tableau croisé dynamique6").PivotCache.Refresh 'Condition d'execution If n <> 0 Then i = 0 'Boucle de création de ligne selon le nombr de "fait" While i <> n Sheets("Historique des montages").Select ActiveSheet.Unprotect "toto" Range("B7").Select Selection.ListObject.ListRows.Add (1) i = i + 1 Wend 'séquence de déplacement Sheets("Liste attente montage").Select ActiveSheet.ListObjects("Liste").Range.AutoFilter Field:=8, Criteria1:= _ "fait" On Error Resume Next Range("Liste[[Référence]:[Date de livraison]]").Select Selection.Copy Sheets("Historique des montages").Select Range("B7").Select ActiveSheet.Paste Sheets("Liste attente montage").Select Selection.EntireRow.Delete ActiveSheet.ListObjects("Liste").Range.AutoFilter Field:=8 End If 'actualisation ActiveSheet.PivotTables("Tableau croisé dynamique6").PivotCache.Refresh End SubEnfin bref, tout mes gros problèmes sont résolus, plus que des petits détails à régler, surtout niveau esthétique (bouton qui ouvre un fichier excel en raccourcie au lieu de liens hypertexte) mais rien d'important vraiment. Je joint aussi mon fichier, si cela permet de voir le fonctionnement ^^
Cordialement.
Edit: C'est bon j'ai réussi à l'adapter, je n'avais pas vu la ligne Range("B4"). J'ai donc transformer une partie en
Range("B7").Activate
If ActiveCell > .Range("B" & i) Then ' Il n'y a pas de référence précédente
Rows("7:7").Insert Shift:=xlDown
.Range("B" & i & ":H" & i).Copy Range("B" & ActiveCell.Row)
.Rows(i).Delete Shift:=xlUporiginal :
Range("B4").Activate
If ActiveCell > .Range("B" & i) Then ' Il n'y a pas de référence précédente
Rows("4:4").Insert Shift:=xlDown
.Range("B" & i & ":H" & i).Copy Range("B" & ActiveCell.Row)
.Rows(i).Delete Shift:=xlUpMerci énormément de ton aide !
Tant mieux si c'est liquidé
Chaleureusement.