Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2019 un copier coller de plage cellules automatisé pour listing dynamique

Formulatix

XLDnaute Nouveau
Bonjour,

Feuille test jointe pour exemple
La feuille aura pour but de gérer une liste de produits affectés par choix à des fournisseurs

Cellules de B7 à F7 = liste des produits issue d’un listing
1_Cellule A8 liste = sélection le fournisseur
2_Cellules de B8 à F8 = choix des produits affectés au fournisseur condition « 1 »
3_Cellules de B9 à F9 = calcul du rang de chaque produit retenu
4_Cellules de B11 à F11 = listing trié des produits retenus

Je bloque sur une procédure

Je sélectionne le fournisseur en cours de choix dans la cellule A11 (liste=A8)
Je souhaite que ce choix puisse se confirmer en A11 avec la ligne 11
Je reviens sur la cellule A8 pour sélectionner un autre fournisseur
Je refais les étapes 2 à 4
Je sélectionne le fournisseur en cours de choix dans la cellule A12 (liste=A8)
Je souhaite que ce choix puisse se confirmer en A12 avec la ligne 12

Macro obligatoire?

Si on peut s’en passer je préfèrerais

Merci de votre aide
 

Pièces jointes

  • affect prod test.xlsx
    11.3 KB · Affichages: 5
Solution
OK !! je viens de comprendre

le problème : c'est DANS la macro

Adaptation ici:
VB:
Sub Valider()
Dim tSaisie As ListObject
Dim tData As ListObject

Set tSaisie = ActiveSheet.ListObjects("t_Saisie")
Set tData = ActiveSheet.ListObjects("t_Bdd")

With tData
    .ListRows.Add
    LastLine = .ListRows.Count
    .DataBodyRange(LastLine, 1) = tSaisie.DataBodyRange(1, 1)
    k = 2
    For j = 2 To 102
        If tSaisie.DataBodyRange(1, j) = 1 Then
            .DataBodyRange(LastLine, k) = tSaisie.Range(1, j).Offset(-1, 0) 'on prend ce qu'il y a AU DESSUS de la table
            k = k + 1
        End If
    Next j
End With
End Sub

vgendron

XLDnaute Barbatruc
Bonjour

Je n'ai pas vraiment compris ce que tu veux faire...

ligne 7 = liste des produits ==> ca ne devrait pas bouger
ligne8 et 9 ==> pour saisir une nouvelle entrée..?

lignes 11 12 13 ...... c'est "l'enregistrement " des nouvelles entrées au fur et à mesure??
 

Formulatix

XLDnaute Nouveau
Bonjour vgendron,

Dsl pour ce retour tardif
Grace à ton aide j’ai pu avancer sur mon projet
Par contre je suis largué sur la programmation macros, ça fait bien 20 ans que je n’en ai pas refait.

Mon second problème est donc le suivant
Dans la feuille « Gestion listes », les listes des produits et fournisseurs évoluent en permanence (fournisseurs en H et produits en R)
Dans feuille « Affectation », je n’ai pas de problèmes pour le fournisseur que je dois sélectionner en liste déroulante $A$2 automatiquement mise à jour depuis « Gestion listes »H.

Par contre la liste des produits ne peut pas être récupérée automatiquement depuis « Gestion listes »R en entête du tableau « t_Saisie » (formules non autorisées sur entête tableau)

J’ai bien essayé de modifier le type de mise forme du tableau « t_Saisie » pour disposer d’une plage de cellules à fonctions (ex : ='Gestion listes'!R2) et / ou la macro

Dans ces cas l’export que j’arrive à obtenir dans « t_Bdd » correspond à $A$2 et valeurs 1 de « t_Saisie »

Pour la date en $B$1 j’ai bricolé une valeur confirmée par 1 en $B$2.
La position de la cellule saisie date n'est pas figée dans la mesure ou elle reste contiguë à la cellule sélection du fournisseur
 

Pièces jointes

  • testV4 macro.xlsm
    45.8 KB · Affichages: 5

vgendron

XLDnaute Barbatruc
Hello

j'ai pas tout compris, mais pour la table "t_Saisie", tu peux faire une table SANS ligne d'entete, et tu mets une formule pour pointer vers les produits
 

Pièces jointes

  • testV4 macro.xlsm
    44.6 KB · Affichages: 6

vgendron

XLDnaute Barbatruc
euh.. je ne vois pas de quoi tu parles..
la SEULE chose que j'ai changée: c'est supprimer la ligne d'entete de la table t_Saisie et mis une formule dans la ligne 1

le reste. je n'y ai pas touché
 

vgendron

XLDnaute Barbatruc
OK !! je viens de comprendre

le problème : c'est DANS la macro

Adaptation ici:
VB:
Sub Valider()
Dim tSaisie As ListObject
Dim tData As ListObject

Set tSaisie = ActiveSheet.ListObjects("t_Saisie")
Set tData = ActiveSheet.ListObjects("t_Bdd")

With tData
    .ListRows.Add
    LastLine = .ListRows.Count
    .DataBodyRange(LastLine, 1) = tSaisie.DataBodyRange(1, 1)
    k = 2
    For j = 2 To 102
        If tSaisie.DataBodyRange(1, j) = 1 Then
            .DataBodyRange(LastLine, k) = tSaisie.Range(1, j).Offset(-1, 0) 'on prend ce qu'il y a AU DESSUS de la table
            k = k + 1
        End If
    Next j
End With
End Sub
 

Discussions similaires

Réponses
0
Affichages
168
Réponses
3
Affichages
571
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…