Copié/collé avec variable

Résolu/Fermé
Berloutte Messages postés 6 Date d'inscription mercredi 21 mai 2014 Statut Membre Dernière intervention 13 juin 2014 - Modifié par pijaku le 12/06/2014 à 07:54
Berloutte Messages postés 6 Date d'inscription mercredi 21 mai 2014 Statut Membre Dernière intervention 13 juin 2014 - 13 juin 2014 à 14:09
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 :
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 !
A voir également:

4 réponses

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 13/06/2014 à 11:20
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
1
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 12/06/2014 à 09:20
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
0
Berloutte Messages postés 6 Date d'inscription mercredi 21 mai 2014 Statut Membre Dernière intervention 13 juin 2014
12 juin 2014 à 09:53
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é.
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
12 juin 2014 à 10:07
OK pour activate à supprimer
,mais que vient faire
Plan, fiche technique etc
avec "suivi de diffusion"

au besoin
mettre le classeur sans données confidentielles en pièce jointe sur
http://cjoint.com/
puis copier l'adresse du lien et la coller dans le message de réponse
0
Berloutte Messages postés 6 Date d'inscription mercredi 21 mai 2014 Statut Membre Dernière intervention 13 juin 2014
12 juin 2014 à 11:59
Il s'agissait d'exemples.
Ce sera plus clair avec le classeur, en effet :
https://www.cjoint.com/?3Fml32ojv4i

Merci encore Michel !
0
Berloutte Messages postés 6 Date d'inscription mercredi 21 mai 2014 Statut Membre Dernière intervention 13 juin 2014
13 juin 2014 à 14:09
Super !! C'est exactement ce que je voulais !

Merci beaucoup Michel !
0