XL 2019 Déplacer ligne d'un tableau structuré à un autre, au choix [VBA]

Leguyl

XLDnaute Occasionnel
Bonjour à tou(te)s,

Dans un fichier, j'ai un onglet Data reprenant la réf., le nom des chantiers et les initiales des gestionnaires de chantiers plus d'autres onglets nommés avec ces initiales et contenant chacun un tableau structuré avec la même structure.

Il arrive parfois qu'un chantier soit réattribué à un autre gestionnaire. J'aimerais éviter le simple couper/coller manuel d'un tableau à un autre.

Auriez-vous une solution VBA qui me permette, par ex, de déplacer facilement une ligne d'un tableau structuré à un autre de son choix ?

Merci d'avance à qui voudra bien se pencher sur ma demande.
 

Pièces jointes

  • Fact.xlsm
    43.2 KB · Affichages: 14

Leguyl

XLDnaute Occasionnel
Re,

Ça marche mais... la ligne collée dans le tableau de destination contient uniquement les valeurs et, donc, les formules de cette ligne sont perdues.

Avec un simple copier/coller d'une ligne du tableau source vers celui de destination, les formules restent "liées" aux cellules de la source. Je veux dire que la formule suivante, dans le tableau tabCD :

VB:
=[@[CA total]]-[@Facturé]

devient

Code:
=tabCD[@[CA total]]-tabCD[@Facturé]

lorsque la ligne est collée dans un autre tableau.

Existe-t-il un moyen d'éviter cela, càd de déplacer une ligne en gardant les formules mais sans référence au tableau source ?
 
Dernière édition:

cp4

XLDnaute Barbatruc
Re,

Ça marche mais... la ligne collée dans le tableau de destination contient uniquement les valeurs et, donc, les formules de cette ligne sont perdues.

Avec un simple copier/coller d'une ligne du tableau source vers celui de destination, les formules restent "liées" aux cellules de la source. Je veux dire que la formule suivante, dans le tableau tabCD :

VB:
=[@[CA total]]-[@Facturé]

devient

Code:
=tabCD[@[CA total]]-tabCD[@Facturé]

lorsque la ligne est collée dans un autre tableau.

Existe-t-il un moyen d'éviter cela, càd de déplacer une ligne en gardant les formules mais sans référence au tableau source ?
Bonjour,

Juste une suggestion en l'absence de @vgendron ;), Copier les cellules n'ayant pas de formule et les ajouter au bas du tableau. Car à l'ajout d'une ligne, les formules sont automatiquement ajouter dans un tableau structuré.
A+

edit: resalut @vgendron pas vu
 

vgendron

XLDnaute Barbatruc
ha?? peut-etre un pb de version ?
la fonction existe pour ces versions
Excel for Microsoft 365 Excel for Microsoft 365 for Mac Excel for the web Excel 2021 Excel 2021 for Mac Excel 2019 Excel 2019 for Mac Excel 2016 Excel 2016 for Mac Excel 2013 Excel for Mac 2011 Less
 

cp4

XLDnaute Barbatruc
ha?? peut-etre un pb de version ?
la fonction existe pour ces versions
Excel for Microsoft 365 Excel for Microsoft 365 for Mac Excel for the web Excel 2021 Excel 2021 for Mac Excel 2019 Excel 2019 for Mac Excel 2016 Excel 2016 for Mac Excel 2013 Excel for Mac 2011 Less
Merci pour l'info, je suis sous excel 2010

edit: solution pour excel 2010
VB:
If Not LigneToCopy.Columns(j).HasFormula Then
 
Dernière édition:

Leguyl

XLDnaute Occasionnel
Bonjour,

Si ça marche au poil avec mes fichiers tests, ce n'est pas le cas dans mon fichier de travail qui contient des onglets supplémentaires avec des tableaux de synthèse, des listes...

J'obtiens ce message lorsque je clique sur le bouton "Déplacer chantier" :

Erreur d'exécution '9' :
L'indice n'appartient pas à la sélection

Si je supprime ces onglets, ça fonctionne
 

cp4

XLDnaute Barbatruc
Bonjour,

Si ça marche au poil avec mes fichiers tests, ce n'est pas le cas dans mon fichier de travail qui contient des onglets supplémentaires avec des tableaux de synthèse, des listes...

J'obtiens ce message lorsque je clique sur le bouton "Déplacer chantier" :



Si je supprime ces onglets, ça fonctionne
Bonjour,

Hé, oui, le piège lorsqu'on fournit un fichier qui ne reflète pas exactement le fichier réel.
Question: Est-ce que les onglets supplémentaires se trouvent dans le tableau "tabChantiers" en colonne C?

edit: à supposer que c'est le cas (question ci-dessus), Remplace le code de l'userform comme ci-dessous.
VB:
Private Sub UserForm_Initialize()
   Dim d As Object, cel As Range
   Set d = CreateObject("scripting.dictionary")
   Me.Cbx_Source.Clear
   Me.Cbx_Dest.Clear

   For Each cel In Range("tabChantiers[Gest.]")
      d(cel.Value) = ""
   Next cel
   If d.Count > 0 Then
      For i = 0 To d.Count - 1
         With Sheets(d.keys()(i)).ListObjects(1)
            Me.Cbx_Source.AddItem .Name
            Me.Cbx_Dest.AddItem .Name
         End With
      Next i
   End If
End Sub
 
Dernière édition:

Leguyl

XLDnaute Occasionnel
Bonjour,

Hé, oui, le piège lorsqu'on fournit un fichier qui ne reflète pas exactement le fichier réel.
Question: Est-ce que les onglets supplémentaires se trouvent dans le tableau "tabChantiers" en colonne C?
Bonjour cp4,

Non, là ça ne pose pas de problème d'ajouter des onglets pour des gestionnaires supplémentaires avec la même structure de tableau.

Le problème se pose plutôt lorsque l'onglet supplémentaire contient un tableau différent des précédents. Par ex. dans l'un d'entre-eux j'ai une synthèse des résultats par gestionnaire, dans un autre, une liste de chantiers non encore "emportés" par la boîte. Même un simple onglet vide empêche le code de fonctionner.
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 176
Messages
2 085 961
Membres
103 066
dernier inscrit
bobfils