Copier coller ligne tableau structuré VBA

matiouzzz

XLDnaute Nouveau
Bonjour à tous,

J'ai une question concernant une macro que je réalise en ce moment.

J'ai un classeur Excel avec plusieurs tableaux structurés que j'ai nommés dans Excel (par exemple: tableau_avancement_service_prio1 ; tableau_avancement_service_prio2 etc...) avec tableau_avancement_service_prio1 dans la feuille 1 et tableau_avancement_service_prio2 dans la feuille2. Chacun de ces tableaux comporte plusieurs lignes et plusieurs colonnes.

Je voudrais savoir s'il est possible de copier une ligne de tableau_avancement_service_prio1 vers une autre ligne de tableau_avancement_service_prio2

Dans ma macro, j'ai commencé par écrire:

Dim tableau_avancement_service_prio1 As Range
Dim tableau_avancement_service_prio2 As Range
Set tableau_avancement_service_prio2 = Range("tab_av_service_prio2")
Set tableau_avancement_service_prio1 = Range("tab_av_service_prio1")

Je pensais pouvoir écrire quelque chose comme:
tableau_avancement_service_prio2(num_ligne_collage)= tableau_avancement_service_prio1(num_ligne_copiage)

Hélas, après avoir écumé bon nombre de forums sur le sujet je n'ai pas trouvé de réponse à mon pb...

Y a t'il une solution pas trop compliquée svp?


En vous remerciant par avance,

Cordialement,

Matiouzzz
 
Dernière édition:

youky(BJ)

XLDnaute Barbatruc
Bonjour Matiouzzz,
Bienvenu en VBA
D'après ce que je comprends tu débute.
Voici une petite macro explicative . . .
Bruno
VB:
sub essai()
'on se positionne sur l'onglet qui reçoit les données
sheets("tableau...._prio2").select
'sans précision c'est la page active qui est prise en compte
ligne=[A65000].end(xlup).row+1 'N°ligne ou on va écrire de la page active
with sheets("tableau...._prio1")'quand on veux avoir affaire à lui on mets un . avant

'boucle sur prio1
For k=2 to .[A65000].end(3).row 'de 2 en bas de col A
'copie de col A à col Z
'ici If condition pour copier si besoin
range("A" & ligne & ":Z" & ligne).value=.range("A" & k & ":Z" & k).value
ligne =ligne+1'on incrémente la ligne+1, le K est incrémenté par le For
next

end with
end sub
 

matiouzzz

XLDnaute Nouveau
Bonjour youky,
et merci pour ta réponse !
En fait le code que tu m'as envoyé ne correspond pas vraiment à mon problème, parce que je ne l'avais pas présenté comme il faut...
Dans le fichier que j'utilise, j'utilise la sub transferer_ligne_tab_service_prio2_vers_prio1 dans une autre sub principale
Tout marche mis à part ce petit problème justement qui me bloque et m'empêche de terminer proprement mon premier projet VBA.
J'ai eu recours à la création de tableaux structurés Excel (cf mon fichier Excel joint) car je fais du traitement de données par la suite,
et ce format me permet de faire pas mal d'analyses. C'est pour ça que je voudrais absolument garder ce format là, car j'ai déjà passé beaucoup de temps à créer tous mes outils...

VB:
Sub transferer_ligne_tab_service_prio2_vers_prio1(num_ligne_supprimer)

'Cette routine copie une ligne du tableau priorite2,
'la rajoute dans le tableau priorite1
'Et finalement la supprime du tableau priorite2
'Par exemple, si un process est passé de prio2 à prio1 dans un autre tableau (listing),
' (le test sur le tableau listing est effectué dans une autre subroutine)
'la routine ci-après va supprimer la ligne du process
'dans le tableau priorite2 correspondant au process à changer de tableau
'et coller toutes les infos du process ds le tableau priorite1
'On entre en arguments: le n° de ligne à copier du tableau priorite2 à transférer
'ce n° de ligne est donné dans une autre sub

Dim tableau_priorite2 As Range
Dim tableau priorite1 As Range
Set tableau_priorite2 = Range("priorite2")
Set tableau_priorite1 = Range("priorite1")

Dim plage_numero_process_service_prio1 As Range
Set plage_numero_process_service_prio1 = Range("priorite1[N° process]")

fin_tab_av_service_prio1 = plage_numero_process_service_prio1.Rows.Count
If plage_numero_process_service_prio1(fin_tab_av_service_prio1) <> 0 Then
tableau_avancement_service_prio1.ListObject.ListRows.Add
fin_tab_av_service_prio1 = plage_numero_process_service_prio1.Rows.Count + 1
End If
'renvoie le n° de la ligne à remplir avec le process ds le tableau priorite1
'il s'agit en fait de la dernière ligne, vide, du tableau priorite1

'On copie colle les infos de la ligne à supprimer du tab_av_service_prio2 vers le tab_av_service_prio1
tableau_priorite1.ListObject.ListRows(fin_tab_av_service_prio1) = tableau_priorite2.ListObject.ListRows(num_ligne_supprimer)
' /!\ c'est ici que mon code bug..
' J'ai cherché à coder le fait que dans le tableau priorite1,
'la ligne fin_tab_av_service_prio1 dèu tableau priorite1 prenne les valeurs
'du tableau priorite2 à la ligne num_ligne_supprimer
'avec num_ligne_supprimer l'argument de ma fonction
'par exemple, sur le fichier excel joint
'si je veux supprimer le process n°5 du tableau priorite2
'num_ligne_supprimer=5
'et ce process se rajoute à la fin du tableau priorite1

'On supprime la plage de données du tab_av_service_prio2 à la ligne num_ligne_supprimer
'et on fait remonter les lignes en dessous
tableau_avancement_service_prio2.ListObject.ListRows(num_ligne_supprimer).Delete
'cette commdande ci-dessus marche, je l'ai trouvée sur des forums
'j'ai voulu utiliser la même "syntaxe" pour faire le copier coller au-dessus

End Sub

Je mets donc en pièce jointe le classeur Excel qui me sert de test pour bricoler ma macro.
J'espère avoir été plus clair et ne pas demander quelque chose d'impossible...
J'ai cependant une forte intuition que mon problème n'est qu'une question de syntaxe !

En vous remerciant par avance,

Cordialement,

Matiouzzz
 

Pièces jointes

  • supprimer_ligne_tableau.xlsm
    16.3 KB · Affichages: 54
Dernière édition:

youky(BJ)

XLDnaute Barbatruc
Re,
Voici une macro pour le fichier joint.
Tu dois t'en sortir
Bruno
VB:
Sub bruno()
deb1 = [priorite1].Row
bas1 = [priorite1].Rows.Count + 1
deb2 = [priorite2].Row
bas2 = [priorite2].Rows.Count
For k = bas2 To 1 Step -1
[priorite1].Rows(bas1).Value = [priorite2].Rows(k).Value
bas1 = bas1 + 1
[priorite2].Rows(k).Delete
Next
End Sub
 

Discussions similaires