XL 2013 Couper-coller ligne d'un tableau structuré dans un autre tableau

Tubule

XLDnaute Nouveau
Bonjour,

Je me suis largement inspirée des réponses trouvées dans ce forum, et ça m'a bien aidé pour résoudre mon problème. Néanmoins, celui-ci persiste.

J'ai 2 tableaux structurés, dans 2 pages différentes. Pour effectuer un "archivage" de dossier, l’utilisateur choisit via un formulaire un nom de dossier qu'il veut archiver. Pendant ce temps, la ligne du tableau contenant ce nom de dossier est sensée être coupée et collée dans l'autre tableau.
La date de l'archivage est également sensée apparaître dans la colonne de date (première colonne du tableau).

Pour cela, j'ai rédigé le code suivant (inspiré de ce forum):

VB:
With LO1 'Coupage-collage de la ligne du dossier
        X = Application.Match(ComboBox1, .ListColumns("Dossier").DataBodyRange, 0)
        .Range(X, 0).Offset(0, -1).Value = Now() 'Date de l'archivage dans la colonne "date dernière modification"
        .Range(X, 0).Cut LO2.ListRows.Add.Range(1, 0)
        .Range(X, 0).EntireRow.Delete
    End With

Néanmoins, ça ne fonctionne pas du tout. J'obtiens le message d'erreur suivant : "Erreur définie par l'application ou par l'objet" avec la ligne du changement de date surlignée. Je ne comprends pas ce qui ne va pas.

Vous trouverez en pièce jointe un fichier test.

Merci d'avance pour le coup de main.
 

Pièces jointes

  • test.xlsm
    32.7 KB · Affichages: 21

job75

XLDnaute Barbatruc
Bonjour Tubule, sylvanu, Bernard, chris,

Perso j'utiliserai plutôt ce code, très simple :
VB:
Private Sub UserForm_Initialize() 'Formulaire d'archivage d'un dossier
    ComboBox1.List = [Tab_Planning[Dossier]].Value
End Sub

Private Sub CommandButton1_Click() 'Pour le bouton Valider
    Dim lig&, c As Range
    lig = ComboBox1.ListIndex + 1
    If lig = 0 Then ComboBox1.DropDown: Exit Sub
   
    With [Tab_Archivage].Columns(1) 'recherche la 1ère cellule vide en 1ère colonne
        Set c = .Find("", , xlValues, , xlByColumns)
        If c Is Nothing Then Set c = .Cells(.Rows.Count + 1)
    End With
   
    With [Tab_Planning]
        c.Resize(, .Columns.Count) = .Rows(lig).Value 'copie les valeurs
        c = Date 'date de l'archivage
        .Rows(lig).Delete xlUp 'supprime la ligne source
    End With
   
    MsgBox "Dossier archivé avec succès !", , "Archivage" 'confirmation
    Unload Me
End Sub

Private Sub CommandButton2_Click() 'Pour le bouton Annuler
    Unload Me
End Sub
 

Pièces jointes

  • test(1).xlsm
    31.5 KB · Affichages: 2

job75

XLDnaute Barbatruc
Pour peaufiner utilisez ce fichier (2) s'il y a des lignes vides dans le tableau source :
VB:
Private Sub UserForm_Initialize() 'Formulaire d'archivage d'un dossier
    On Error Resume Next 'si aucune SpecialCell
    With [Tab_Planning[Dossier]]
        Intersect(.SpecialCells(xlCellTypeBlanks).EntireRow, [Tab_Planning]).Delete xlUp 'supprime les lignes vides
        ComboBox1.List = .Value
    End With
End Sub
 

Pièces jointes

  • test(2).xlsm
    33.4 KB · Affichages: 6

themyse1

XLDnaute Nouveau
Bonjour à tous,

Je me permets de vous solliciter car je suis bloqué avec mon tableau.
J'aimerais que les données de l'onglet "rapport de caisse" agrémentent le tableau "archivage" à l'aide d'un bouton au fur et à mesure (tous les jours).
J'ai essayé d'enregistrer une macro en copiant collant les données, mais ça me le copie toujours sur la même ligne.

Merci pour l'aide que vous pourrez m'apporter.


PJ mon fichier
 

Pièces jointes

  • Rapport de caisse 2022.xlsx
    915.2 KB · Affichages: 3

job75

XLDnaute Barbatruc
Bonjour themyse1,

1. Pourquoi squatter ce fil au lieu de créer le vôtre ?

2. Dans la 1ère feuille pourquoi ne pas utiliser la fonction SOMME en cellule J26 ?

3. En 2ème feuille où va-t-on aller chercher les données des colonnes U et V ?

A+
 

job75

XLDnaute Barbatruc
Bon pour que vous ne soyez pas venu pour rien voyez le fichier joint et la macro du bouton :
VB:
Private Sub CommandButton1_Click() 'bouton Archiver
Dim c As Range, ge
With [Tableau8] 'tableau structuré
    Set c = .Columns(1).Find("", , xlValues)
    If c Is Nothing Then Set c = .Cells(.Rows.Count + 1, 1)
    c.Resize(, 19) = Application.Transpose([J10:J28].Value2)
    c(1, 22) = [G29]
    .Columns(22).EntireColumn.AutoFit 'ajustement largeur
    .Parent.Activate 'facultatif
End With
[J10:J12,J14:J25,J27,G29,G34:G38,M34:M41] = "" 'RAZ
End Sub
 

Pièces jointes

  • Rapport de caisse 2022(1).xlsm
    927 KB · Affichages: 3

themyse1

XLDnaute Nouveau
Bonjour themyse1,

1. Pourquoi squatter ce fil au lieu de créer le vôtre ?

2. Dans la 1ère feuille pourquoi ne pas utiliser la fonction SOMME en cellule J26 ?

3. En 2ème feuille où va-t-on aller chercher les données des colonnes U et V ?

A+
Bonjour,

1. Je ne voulais pas ajouter une nouvelle discussion, mais je vais créer une nouvelle discussion.
2. Oui, je voulais tester quelque chose, mais ça n'a pas fonctionné j'ai oublié de le retirer
3. Pour U et V il n'y à rien à rechercher on le fera manuellement

Merci pour votre retour rapide.
 

themyse1

XLDnaute Nouveau
Bonjour themyse1,

1. Pourquoi squatter ce fil au lieu de créer le vôtre ?

2. Dans la 1ère feuille pourquoi ne pas utiliser la fonction SOMME en cellule J26 ?

3. En 2ème feuille où va-t-on aller chercher les données des colonnes U et V ?

A+
Bonjour,

Veuillez m'excuser je pensais que multiplier les fils ne serait pas productif, et j'avais l'impression que celui-ci était en rapport avec ce que je souhaitait faire. en tout cas merci de votre réponse
 

Discussions similaires

Statistiques des forums

Discussions
315 094
Messages
2 116 145
Membres
112 669
dernier inscrit
Guigui2502