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!!

1 réponse

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