Copié/collé avec variable
Résolu
Berloutte
Messages postés
6
Statut
Membre
-
Berloutte Messages postés 6 Statut Membre -
Berloutte Messages postés 6 Statut Membre -
Bonjour,
Après cet après midi de tentatives et de recherches, je me résigne à poster sur le forum.
Je vous explique mon problème :
Sur un premier onglet, il y a un tableau avec un nombre variable de ligne selon les semaines.
Sur la première colonne, il y a un nombre qui identifie la ligne (qui est, dans mon contexte, un document).
J'ai envie de créer une macro qui me permet de copier/coller ces lignes sur un autre onglet suivant le numéro de la ligne.
J'ai essayé pas mal de choses, dont ce dernier essai :
Lorsque je lance ma maccro, rien ne se passe.
Je vous remercie beaucoup pour toute aide !
Après cet après midi de tentatives et de recherches, je me résigne à poster sur le forum.
Je vous explique mon problème :
Sur un premier onglet, il y a un tableau avec un nombre variable de ligne selon les semaines.
Sur la première colonne, il y a un nombre qui identifie la ligne (qui est, dans mon contexte, un document).
J'ai envie de créer une macro qui me permet de copier/coller ces lignes sur un autre onglet suivant le numéro de la ligne.
J'ai essayé pas mal de choses, dont ce dernier essai :
Sub diffusion()
Dim num As Long
Dim h As Integer
Dim i As Long
num = 13
'mon tableau commence à la ligne 13
While Not IsEmpty(Cells(num, 1))
'tant que la case n'est pas vide je fais le copié collé
h = Sheets("Diffusion").Cells(num, 1).Value
'h sera la valeur du numéro du document
Range(Cells(num, 1), Cells(num, 8)).Copy Destination:=Sheets("Suivi de Diffusion").Range(Cells(h, 1)).Offset(14, 0)
'la ligne de mon premier onglet à copier va de la colonne A à H, d'où le Range(Cells(num, 1), Cells(num, 8))
'à la ligne 30 de mon deuxième onglet il y a le doc 16 par exemple, d'où le offset(14, 0)
num = num + 1
'j'incrémente pour ma boucle
Wend
End Sub
Lorsque je lance ma maccro, rien ne se passe.
Je vous remercie beaucoup pour toute aide !
4 réponses
-
Bonjour
hé oui, il faut alors une boucle ;o)
Option Explicit
'--------
Sub diffuser()
Dim Derlig As Byte, Lig_d As Byte, Num As Byte, T_diff
Dim Lig_s As Byte
Application.ScreenUpdating = False
With Sheets("diffusion")
Derlig = .Columns("A").Find("", .Range("A12")).Row - 1
For Lig_d = 13 To Derlig
Num = .Cells(Lig_d, "A")
T_diff = .Range(.Cells(Lig_d, "B"), .Cells(Lig_d, "H")).Value
With Sheets("Suivi de diffusion")
Lig_s = .Columns("A").Find(Num, .Range("A12")).Row
.Range(.Cells(Lig_s, "B"), .Cells(Lig_s, "H")) = T_diff
.Rows(Lig_s).Rows.AutoFit ' voir si OK avec XL<2007
End With
Next
End With
Sheets("Suivi de diffusion").activate
End Sub
Michel -
Bonjour
Sans boucle
Option Explicit
'--------
Sub diffuser()
Dim Num As Byte, Derlig As Integer, T_copie
Application.ScreenUpdating = False
Num = 13
'mon tableau commence à la ligne 13
' range A12 ne doit pas être vide (un espace suffira)
Derlig = Columns("A").Find("", Range("A12"), xlValues).Row - 1
T_copie = Range(Cells(Num, 1), Cells(Derlig, 8))
With Sheets("Suivi de Diffusion").Range("A" & 30).Resize(UBound(T_copie), 8)
.Value = T_copie
.Activate
End With
End Sub
Michel -
Bonjour Michel,
Je vous remercie beaucoup d'avoir pris le temps de me répondre.
Lorsque je lance le programme, VBA m'envoie un message d'erreur : "Le mode Activate de la classe Range a échoué".
De plus, je pense m'être mal exprimé :
Si je comprends bien votre procédure, elle copie mon tableau entier dans le deuxième onglet. Or, j'aimerai pouvoir "ranger" les lignes de mon tableau une par une...
C'est à dire que dans le premier onglet j'ai qqch du type :
21. Plan
24. Note de calcul
23. Fiche technique
et que dans le deuxième onglet, après avoir lancé ma procédure, j'ai :
1.
2.
...
20.
21. Plan
22.
23. Fiche technique
24. Note de calcul
par exemple...
C'est la raison pour laquelle une boucle me semblait le plus judicieux (Peut-être à tort !!).
Je vous remercie encore du temps que vous m'avez accordé.-
-
Il s'agissait d'exemples.
Ce sera plus clair avec le classeur, en effet :
https://www.cjoint.com/?3Fml32ojv4i
Merci encore Michel !
-
-
Super !! C'est exactement ce que je voulais !
Merci beaucoup Michel !