Copié/collé avec variable

Résolu
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 :
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

  1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
  2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
  3. Berloutte Messages postés 6 Statut Membre
     
    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
    1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      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
    2. Berloutte Messages postés 6 Statut Membre
       
      Il s'agissait d'exemples.
      Ce sera plus clair avec le classeur, en effet :
      https://www.cjoint.com/?3Fml32ojv4i

      Merci encore Michel !
      0
  4. Berloutte Messages postés 6 Statut Membre
     
    Super !! C'est exactement ce que je voulais !

    Merci beaucoup Michel !
    0