Macro coller avec tri

Lechette Messages postés 1 Statut Membre -  
 melanie1324 -
Bonjour,

J'ai créé un classeur ou on saisi des données correspondant à des invidus. Je souhaite que lorsqu'on clique sur le bouton "archiver", les données (sélection multiple possible...) soient copiées et collées dans un autre classeur "classeur2" protégé, en les plaçant bien sur en face du nom auquel elles se rapportent. Je bloque à ce moment la...
Voici mon code. Jusqu'à la fin ca roule mais je ne sais pas comment m'y prendre pour coller mes données en face des noms...

Sub Archivage()
'
' Selection des plages de cellules contenant des nombres

'variables qui identifie la plage de céllules à parcourir
numero_ligne_debut = 10
numero_ligne_fin = 100
colonne_debut = "J"
colonne_fin = "K"


'index des numéros de lignes, qui va varier de la ligne de début à la ligne de fin
numero_ligne = numero_ligne_debut

'variable booléenne qui indique si la ligne va devoir etre traitée ou non
ligne_a_traiter = False

'variable chaine, qui va contenir la (ou les plages de céllule, séparé par des virgules) à sélectionner
chaine_plage = ""

'variable qui va indiquer si la séléction est la première ou pas
premier_selection = True

While numero_ligne <> numero_ligne_fin
    numero_ligne_deb_selection = numero_ligne
    ligne_a_traiter = False
    While Not Feuil6.Cells(numero_ligne, 10) = ""
        numero_ligne = numero_ligne + 1
        ligne_a_traiter = True
    Wend
    If ligne_a_traiter Then
        If premier_selection And ligne_a_traiter Then
            chaine_plage = "J" & numero_ligne_deb_selection & ":K" & numero_ligne - 1
        Else
            chaine_plage = chaine_plage & ",J" & numero_ligne_deb_selection & ":K" & numero_ligne - 1
        End If
        premier_selection = False
    Else
        numero_ligne = numero_ligne + 1
    End If
Wend
Range(chaine_plage).Select
Selection.Copy
    Workbooks.Open Filename:="Classeur2.xlsx"
    With ActiveSheet
        .[a1].Select
        .Paste
    End With
    
End Sub

Merci d'avance!!
Configuration: Windows Vista
Internet Explorer 7.0

1 réponse

  1. melanie1324
     
    Bonjour,

    Voici une solution :
    cells(numero_ligne;numero_colonne).select
    do while selection <> ""
    sheets("feuil1").select (tu sélectionnes ta feuille de départ)
    cells(numero_ligne,numero_colonne).select (sélectionnes la cellule où se trouve le nom)
    nom = selection

    tu prends les données que tu veux copier à ce moment

    Sheets("feuil2").select (tu sélectionnes la feuille d'arrivée)
    cells(i,j) (i étant la première ligne du tableau, j étant le numéro de colonne représentant le nom)

    do while selection <> ""
    if selection = nom then
    cells(i,j+1). select (sélectionnes la cellule ou tu veux que ca soit collé)
    Activesheet.paste
    z=1
    z=2
    end if
    i=i+1
    cells(i,j).select
    If z=2 then
    cells(40000;35).select
    end if
    loop

    if z<>1
    cells(i,j).select
    selection =nom (si ta ligne n'existes pas, tu la créés)
    cells(i,j+1).select
    Activesheet.paste
    end if
    sélectionnes ta feuille de départ
    numero_ligne = numero_ligne+1
    cells(numero_ligne;numero_colonne).select
    loop

    le morceau de VBA que je te proposes est de comparer le nom de la première feuille au nom de la seconde. S'il est trouvé, tu colles les données, sinon il les rajoute en bas du tableau.
    0