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

  • Initiateur de la discussion Initiateur de la discussion Formulatix
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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

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é
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…