Transfert de données selon plusieurs conditions à différentes feuilles

Bonjour je suis stagiaire et avec mes projets je me rends compte à quel point le VBA est utile, c'est pour ça que j'apprends sur le tas en ce moment.

Mais je n'arrive pas à faire ce que j'aimerais, si vous pouviez me donner des pistes ça serait parfait

J'ai actuellement un fichier Excel composé de 4 feuilles.

La première feuille : RENTREE.

Est une feuille où l'utilisateur rentre ses projets, il donne des informations diverses comme le service, la tutrice, des informations, date de début / date de fin et le type de projet ( PROJETS ou Mise à jour procédure ou encore confidentiel )

Et il y a trois autres feuilles selon le type de projet. Donc une feuille projets, une feuille mise à jour procédure et une feuille confidentiel.

Ce que j'aimerais faire c'est qu'il y ait un bouton transfert dans la feuille RENTREES . Et quand on clique sur celui ci, ça transfère les lignes relatives aux projets de cette feuille aux autres ( selon le type de projet, dans la feuille projet ou la feuille mise à jour procédure ou la feuille confidentiel ).

J'ai fait une ébauche de code mais je n'arrive pas à faire tout ce que j'aimerais et il y a des soucis :

- Le code supprime la majorité des données sur la ligne 9 dans la feuille Projets

- je n'arrive pas à faire la condition de transfert selon le type de projet. donc pour l'instant, les données vont toutes dans la feuille Projets mais donc j'aimerais à terme que selon le type de projet rentré, les données soient coupées puis copiées dans la feuille relative au type .

( la seule donnée non copiée est le type de projet )

Le code qui y inséré actuellement :

Sub Bouton4_Cliquer()
Dim F As Object
Dim P As Object

Set F = Sheets("RENTREE")
Set P = Sheets("Projets")
P.Range("A10:F" & P.Range("F50").End(xlUp).Row).ClearContents
For i = 10 To F.Cells(Rows.Count, 1).End(xlUp).Row
        F.Range("A" & i).Copy P.Range("A" & i)
        F.Range("B" & i).Copy P.Range("B" & i)
        F.Range("C" & i).Copy P.Range("C" & i)
        F.Range("D" & i).Copy P.Range("P" & i)
        F.Range("E" & i).Copy P.Range("Q" & i)
Next i
End Sub

Je mets en pièce jointe le classeur, pour que cela soit le plus compréhensible possible.

En vous remerciant de toute piste ou aide possible,

NB : J'ai étudié le sujet similaire mais je n'arrive pas bien à l'appliquer à mon cas

blnjour

ne pas faire comme sur du papier en 1970

faire un TCD filtré

aucun code, aucune formule

amitiés

Merci pour la réponse !

La solution du TCD est très intéressante mais elle ne marche pas dans mon cas, car plusieurs utilisateurs vont me donner cette première feuille.

Et je ne peux plus modifier mon sujet de départ pour mieux faire comprendre, dommage :p

En fait, plusieurs personnes vont me donner un exemplaire de la première feuille. Et à chaque fois j'aimerais qu'en cliquant sur le bouton de la première feuille, ça me transfère donc les lignes sur les autres feuilles.

Une meilleure solution serait peut être que je sorte la première feuille, et la mette dans un classeur différent.

Et le deuxième classeur ne contiendrait que les trois autres feuilles.

Le transfert se ferait donc d'un classeur à l'autre classeur

Bonjour flodino

Slt jmd,

à tester,

attention/ les noms de la colonne F sur l'onglet "RENTREE" doivent être identique au nom des onglets

Projet <> Projets

Sub Bouton4_Cliquer()
Dim F As Object
Dim P As Object
Dim sh As Worksheet

Set F = Sheets("RENTREE")
Set P = Sheets("Projets")
For i = 10 To F.Cells(Rows.Count, 1).End(xlUp).Row

        sh = Sheets(F.Cells(i, 6).Value)
        rw = sh.Cells(Rows.Count, 1).End(xlUp).Row + 1

        For j = 1 To 5
          F.Cells(i, j).Copy sh.Cells(i, rw)
        Next j
Next i
End Sub

Salut flodino, le forum

Je en stage aussi ce qui m'a ,comme toi, permis de découvrir le forum

Pourquoi tu n'utiliserait pas Access où/ou tu fais un userform qui rentre les donnés dans ton tableau directement?

Merci i20100

J'ai modifié le fichier pour que les noms correspondent et j'ai appliqué la nouvelle macro, mais j'ai une erreur d'exécution 91. Variable objet ou variable de bloc with non définie par rapport à sh = Sheets(F.Cells(i, 6).Value)

je ne sais pas trop quoi changer

re à tous

Access est très bien pour cet usage multi-utilisateurs

mais il y a une solution Excel

  • chacun possède un fichier en colonnes simples (comme dans mon exemple). Il y a toto1.xls, toto2.xls etc. Chacun saisit ses dossiers dedans, sans fin durant 20 ans.
  • tous les toto sont dans un même répertoire (ou bine ils t'en font une copie dans ce répertoire en commun)
  • toi tu fais menu Données, Obtenir de classeur et tu navigues vers le dossier
  • ça concatène les toto

par la suite, tu feras simplement "actualiser"

aucun calcul, aucun code

amitiés

Merci i20100

J'ai modifié le fichier pour que les noms correspondent et j'ai appliqué la nouvelle macro, mais j'ai une erreur d'exécution 91. Variable objet ou variable de bloc with non définie par rapport à sh = Sheets(F.Cells(i, 6).Value)

je ne sais pas trop quoi changer

essai en remplacant

Dim sh As Worksheet

par

Dim sh As Object

Merci Soma et JMD !

Pour access, c'est une très bonne solution mais mais je souhaite intégrer un GANTT parmi les données ce qui n'est possible que sur excel

Et JMD, j'ai tenté ta solution qui me semble également très intéressante, J'ai fait une feuille vierge pour concatener différntes feuilles comme tu l'as proposé.

Mais quand je souhaite intégrer les données ça m'enlève également le GANTT en le remplaçant par des cellules vides ^^

Merci i20100

J'ai modifié le fichier pour que les noms correspondent et j'ai appliqué la nouvelle macro, mais j'ai une erreur d'exécution 91. Variable objet ou variable de bloc with non définie par rapport à sh = Sheets(F.Cells(i, 6).Value)

je ne sais pas trop quoi changer

essai en remplacant

Dim sh As Worksheet

par

Dim sh As Object

Merci

il y a le même code d'erreur mais cette fois à la ligne sh = Sheets(F.Cells(i, 6).Value)

Bonjour,

Il y a du monde sur le sujet.

j'étais parti avec une solution TCD et Power Query (pour structurer les données).

Je suis peut-être hors sujet !...

Cdlt.

il y a le même code d'erreur mais cette fois à la ligne sh = Sheets(F.Cells(i, 6).Value)

mais cette fois à la ligne...

tu mentionnes la même ligne ?

Oui je ne m'attendais pas à autant de volonté d'aider c'est vraiment gentil ! merci tout le monde !

En plus je me suis sûrement mal exprimé, car je pense qu'il faut vraiment passer par une macro, car plusieurs utilisateurs vont me passer le fichier, et ils auront chacun rempli la feuille " RENTREE "

Et l'objectif c'est que en touchant le bouton en haut de la feuille RENTREE, les projets soient répartis selon leurs types.

Mais dans les trois autres feuilles, entre les informations sur le projet et le date de début du projet, un GANTT se fait automatiquement par la mise en forme conditionnelle selon la date de début et date de fin de projet.

Exemple :

capture

Plus je réfléchis, plus je pense qu'il faudrait sortir la feuile " RENTREE"

et donc les utilisateurs m'envoient les feuilles " RENTREES " et moi je clique sur le bouton et ça me les transfère dans les feuilles " Mise à jour procédure " ou " Projets " ou " Confidentiel " selon le type de projet.

Et après avoir transféré tous les projets grâce à la macro, j'ai l'ensemble des projets sur les feuilles triés selon le type

il y a le même code d'erreur mais cette fois à la ligne sh = Sheets(F.Cells(i, 6).Value)

mais cette fois à la ligne...

tu mentionnes la même ligne ?

Ah oui désolé, c'est à la même ligne à vrai dire

re,

à tester,

Sub Bouton4_Cliquer()
Dim F As Object
Dim P As Object
Dim sh As Object

Set F = Sheets("RENTREE")
Set P = Sheets("Projets")
For i = 10 To F.Cells(Rows.Count, 1).End(xlUp).Row

        Set sh = Sheets(F.Cells(i, 6).Value)
        rw = sh.Cells(Rows.Count, 1).End(xlUp).Row + 1

        For j = 1 To 5
          sh.Cells(i, rw) = F.Cells(i, j).Value
        Next j
Next i
End Sub

Merci de toujours suivre le sujet ^^

Mais la solution ne fonctionne pas tout à fait, le résultat donne :

capture

Mais le tri fonctionne parfaitement, car les lignes de projets vont être transférées au bon endroit selon le type de projet.

Par contre, les données ne sont pas mises à la bonne colonne et pas toutes les données sont transférées ( je crois seulement la date de début pour le moment )

je vais tenter de travailler à partir de ça, merci !

Si t'as une idée pour que ça rentre parfaitement ça serait parfait !

Par contre, les données ne sont pas mises à la bonne colonne et pas toutes les données sont transférées ( je crois seulement la date de début pour le moment )

je vais tenter de travailler à partir de ça, merci !

Si t'as une idée pour que ça rentre parfaitement ça serait parfait !

j'ai suivi le "patron" du premier message,

F.Range("A" & i).Copy P.Range("A" & i) F.Range("B" & i).Copy P.Range("B" & i) F.Range("C" & i).Copy P.Range("C" & i) F.Range("D" & i).Copy P.Range("P" & i) F.Range("E" & i).Copy P.Range("Q" & i)

si ce n'est pas le cas, explique dans quel colonne les données doivent être transféré

Oui c'est bien le patron que j'aimerais ^^

Les données de la feuille " Rentrée " à partir de la ligne 10 :

Colonne A => Va dans la colonne A dans l'une des trois autres feuilles

la colonne B => Va dans la colonne B

la colonne C => Va dans la colonne C

La colonne D => Va dans la colonne P

La colonne E => Va dans la colonne Q

Mais là j'ai des données qui viennnent dans la colonne J

Merci encore

re,

voici la modification,

Sub Bouton4_Cliquer()
Dim F As Object
Dim P As Object
Dim sh As Object

col = Array(1, 2, 3, 16, 17)

Set F = Sheets("RENTREE")
Set P = Sheets("Projets")
For i = 10 To F.Cells(Rows.Count, 1).End(xlUp).Row

        Set sh = Sheets(F.Cells(i, 6).Value)
        rw = sh.Cells(Rows.Count, 1).End(xlUp).Row + 1

        For j = 1 To 5
          sh.Cells(i, col(j - 1)) = F.Cells(i, j).Value
        Next j
Next i
End Sub

ça marche vraiment trop bien

c'est génial merci beaucoup !

Est ce que tu crois que c'est également possible d'avoir un code si je sors la feuille RENTREE du classeur et que je la mets dans un autre classeur qui se nomme " FORMULAIRE" ?

Et donc le bouton avec la macro serait dans la feuille RENTREE et ça transférerait les données au classeur avec les autres feuilles ?

Ou c'est pas possible ?

( Comme le fichier formulaire en pièce jointe )

7formulaire.xlsx (14.32 Ko)
Rechercher des sujets similaires à "transfert donnees conditions differentes feuilles"