Transfert des données d'une Feuille a une autr

SVP Aidez Moi Transfert des données d'une Feuille a une autre

J'ai une feuille base qui contient des actions d’amélioration qui est constitué de plusieurs colonnes et j'ai une autre

Feuille Rapp.Resp qui me permet de faire le récapitulatif de la feuille base

Le but c'est de Transfert des données de la base vers Rapp.Resp selon le nom du responsable dans la cellule I6 et selon L’état dans la cellule M6

j'ai trouver une solution avec un tableau dynamique croisé dans la feuille journal mais c'est pas très rentable si les actions du responsable dépasse les 20 ou 30 actions

est ce qu'il est possible de faire le transfert avec un code vba sans avoir passer par un tableau dynamique croisé..

et le transfert ce fait selon le nom du responsable dans la cellule I6 et selon L’état (En cours , A Suivre , A Verifier, Cloture...) dans la cellule M6 dans la feuille Rapp.Resp

Merci d'avance

21acp-version-1.xlsm (246.29 Ko)

Bonjour,

Si j'ai bien compris, constitution d'un tableau à partir des données de Base sur les critères nom de responsable et état.

Procédure de conception assez basique pour réaliser cette opération :

Sub RappResp()
    Dim rap(), RR, Ba, resp$, état$, n%, i%, j%, k%
    With Worksheets("Rapp.Resp")
        If .Range("I6") <> "" And .Range("M6") <> "" Then
            resp = .Range("I6").Value
            état = .Range("M6").Value
        Else
            MsgBox "Indiquer un nom de responsable et l'état recherché avant de lancer la " _
             & "constitution du rapport.", vbInformation, "Données initiales manquantes"
            Exit Sub
        End If
    End With
    Ba = Array(1, 16, 19, 28, 29, 30, 31, 32, 9, 26, 25, 27, 24)
    ReDim rap(12, 0)
    k = -1
    With Worksheets("Base")
        n = .Cells(.Rows.Count, 1).End(xlUp).Row
        For i = 2 To n
            If .Cells(i, 10) = resp And .Cells(i, 27) = état Then
                k = k + 1
                ReDim Preserve rap(12, k)
                For j = 0 To 12
                    If .Cells(i, Ba(j)) <> "" Then rap(j, k) = .Cells(i, Ba(j))
                Next j
            End If
        Next i
    End With
    RR = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 13, 17, 18, 19)
    With Worksheets("Rapp.Resp")
        n = .Cells(.Rows.Count, 1).End(xlUp).Row
        .Range("A11:S" & n).ClearContents
        For i = 0 To k
            For j = 0 To 12
                .Cells(i + 11, RR(j)).Value = rap(j, i)
            Next j
        Next i
    End With
End Sub

A attacher à un bouton sur la feuille concernée.

Cordialement

Merci beaucoup c'est très gentil de ta part et merci pour ta réponse ça fait l'affaire juste un petit souci

Si Etat (cellule M6) est vide je veux qu'il m'apporte tout les actions du responsable indiquer dans I6 c'est a dire par

exemple responsable slim + etat vide le programme m'apporte les actions en cours, les actions a vérifier, les actions clôturé

et t'il possible de faire un trie dans la colonne Q après l’exécution du programme

merci une autre fois

Je ne vois pas dans ta demande initiale d'indication visant la possibilité d'ignorer le critère état.

Si tu veux une réponse exacte, il convient que ta question soit précise et complète.

Si tu supprimes tout ce qui a trait à l'état dans la macro, celle-ci prendra en compte tous les états.

Je n'ai pas le temps de la modifier pour l'instant...

Oui, le tri est possible, cela te laisse le temps de préciser le tri souhaité !

Cordialement

merci pour ton code et pour ta réponse

ton code ma aidé et il me convient parfaitement sauf qu'il supprime la ligne 10 puis les ligne 9 jusqu’à la première ligne tout si l'état ne figure pas pour le responsable

C-a-dire lorsque je insère un nom d'un responsable et je met par exemple État clôture et cet responsable n'a aucune action clôture le programme m'efface tout, je pense que le programme doit vérifie si l'etat demandé ne figure pas pour cet responsable doit vider les cellules au-dessous de la ligne 10

et pour le tri sur la colonne de Priorité "Q" un tri de A-Z

et merci une autre fois

Je ne comprends pas ton propos : si tu lances la constitution d'un rapport à partir du nom d'un responsable, avec ou sans choix d'un état, il convient d'effacer le rapport précédent pour y substituer la nouvelle extraction. Les données restent dans la base qui est la source et pourront toujours êtré à nouveau extraites.

OK pour le tri : une ligne à rajouter. Je le ferai en rectifiant la procédure pour prendre en compte le mode sans état particulier (ou tous états confondus). Il faut modifier le type de comparaison pour l'état, afin d'éviter de doubler la procédure (en volume).

Cordialement

Mr MFerrand merci pour ton aide j'ai un revue de direction le mardi matin et je ne sais pas quoi faire sans ton aide

mille mercis ta procédure me convient a merveille juste parfois elle m'efface le continue de toute la feuille Rapp.Resp

tu peux l’essayer Si tu mets le nom du responsable Imed qui n'a aucune action dans la base et tu lance la constitution du rapport il va afficher rien jusqu’à là pas de problème, si tu change le nom de Imed par le nom KG le programme efface tout le contient de la feuille Rapp.Resp car le responsable KG aussi n'a aucune action

Autre chose si tu peux mettre des petits commentaires dans le code ça nous aide a comprendre et apprendre

merci encore et encore

OK ! Je vois le problème ! On va y remédier.

A+

Merci beaucoup vraiment C'est très aimable

Bonjour,

Voilà pour les problèmes soulevés.

Par contre, petite difficulté pour le tri (que j'aurais dû prévoir) à cause des cellules fusionnées.

Donc : soit on défusionne (ce qui pourrait te poser des problèmes par la suite, soit on trie en VBA avant de restituer le tableau sur la feuille. Rien de compliqué mais s'agissant d'une retouche faut pas que je me trompe dans les rectifications d'indices... (on testera de toute façon).

Tu peux déjà tester la version rectifiée (sans tri).

[NB: j'ai mis l'état (et le responsable) sous liste déroulante...]

A+

Version définitive à tester.

J'ai ajouté quelques commentaires dans la macro pour te permettre de t'y retrouver à l'occasion...

Sub RappResp()
    Dim rap(), RR, Ba, resp$, état$, n%, i%, j%, k%
    'Affectation des critères à des variables chaîne ('String')
    'Si le critère responsable manque, un message le signale et la procédure s'interrompt
    'Si le critère état n'est pas servi, il est remplacé par un caractère joker ('*')
    ' permettant la prise en compte de tous les états
    With Worksheets("Rapp.Resp")
        If .Range("I6") <> "" Then
            resp = .Range("I6").Value
            If .Range("M6").Value <> "" Then
                état = .Range("M6").Value
            Else
                état = "*"
            End If
        Else
            MsgBox "Indiquer un nom de responsable (et éventuellement l'état recherché) avant de" _
             & " lancer la constitution du rapport.", vbInformation, "Données initiales manquantes"
            Exit Sub
        End If
    End With
    'On affecte à la variable 'Ba' un tableau des numéros de colonnes des données à prélever dans la base
    'On dimensionne une variable-tableau ('rap') sur 13 colonnes (0 à 12) pour recueillir les données
    Ba = Array(1, 16, 19, 28, 29, 30, 31, 32, 9, 26, 25, 27, 24)
    ReDim rap(12, 0)
    'Prélèvement des données dans la base
    'Si les critères responsable et état sont ceux sélectionnés (pour l'état comparaison au moyen de
    ' l'opérateur 'Like' permettant de l'ignorer s'il n'a pas été servi)
    'On ajoute dans ce cas une ligne au tableau 'rap' (qu'on redimensionne au fur et à mesure)
    With Worksheets("Base")
        n = .Cells(.Rows.Count, 1).End(xlUp).Row
        For i = 2 To n
            If .Cells(i, 10) = resp And .Cells(i, 27) Like état Then
                k = k + 1
                ReDim Preserve rap(12, k)
                For j = 0 To 12
                    If .Cells(i, Ba(j)) <> "" Then rap(j, k) = .Cells(i, Ba(j))
                Next j
            End If
        Next i
    End With
    'Tri du tableau sur la priorité (élément d'indice 'colonne' 10 dans le tableau 'rap')
    ' (l'indice 'ligne' 0 est utilisé pour procéder aux substitutions ('switch') destinées à
    ' reclasser les lignes du tableau)
    For i = 1 To k - 1
        For j = i + 1 To k
            If rap(10, j) < rap(10, i) Then
                For n = 0 To 12
                    rap(n, 0) = rap(n, i)
                    rap(n, i) = rap(n, j)
                    rap(n, j) = rap(n, 0)
                Next n
            End If
        Next j
    Next i
    'On affecte à la variable 'RR' un tableau des colonnes cible à servir (opération nécessaire en
    ' raison des fusions de cellules)
    RR = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 13, 17, 18, 19)
    'Affectation du tableau trié à la feuille cible
    With Worksheets("Rapp.Resp")
        n = .Cells(.Rows.Count, 1).End(xlUp).Row
        If n >= 11 Then .Range("A11:S" & n).ClearContents
        For i = 1 To k
            For j = 0 To 12
                .Cells(i + 10, RR(j)).Value = rap(j, i)
            Next j
        Next i
    End With
End Sub

Cordialement

Ferrand

Merci Merci Merci

C'est bon ça fait l’affaire c'est ce que je veux mille merci, pour le tri si c'est facile avec vba sans dé-fusionné les cellules c'est bon si non le programme fait l’affaire mémé sans tri

Rechercher des sujets similaires à "transfert donnees feuille autr"