Sélectionner une cellule en fonction du nom d'une page
Bonjour à tous.
J'ai un dilemme que je n'arrive pas à résoudre. Je fini mon application GMAO et j'ai un souci de recopie de cellule dans un tableau.
J'ai un tableau source qui se nomme "Référents sites". Dans ce tableau j'ai 14 colonnes avec en A: Client, B:adresse, C: type d'installation... Jusqu'à N. J'ai ensuite des feuilles que je crée avec un tableau de bord intégrer à chaque feuille que je nomme "Nouveau client". Un code VBA me permet de copier un nouvelle feuille "Nouveau client", de la renommer en fonction du nom du client. Aucune feuille "Nouveau client" ne peut prendre un nom autre que ceux de la liste A: Client. Le souci que je rencontre est lorsque que je crée une nouvelle feuille client que je nomme par exemple "BNP", je souhaite que cinq valeurs dans 5 cellules puissent remonter vers le tableau référent automatiquement dés qu'elles changent de valeur. C'est a dire, dans ma feuille "BNP", ma cellule G17 qui est mon total d'heure effectuer en maintenance sur le site doit remonter dans le tableau dans la colonne M de la ligne correspondante au client. Je peux le faire manuellement mais tout se crée automatiquement dans mon application a part ce problème que je n'arrive pas à résoudre.
Private Sub Total_des_heures_client()
Sheets("Référents sites").Range(ActiveSheet.Range(B2)).Value.Offset(0, 13) = ActiveSheet.Range("G17").Value
End Sub
Je pensais que ce code me permettrait de renvoyer la valeur de la cellule "G17" dans le tableau de la feuille "Référents sites" sur la bonne ligne et dans la bonne colonne. Dans ce code, je voudrais que dans la feuille "référents sites", dans la cellule du même nom que ma feuille active dont le nom se trouve en B2, il se décale de 13 colonne et il remplace la valeur par celle de la cellule "G17" de ma feuille active. Ca fait 5 jours que je cherche une solution et que rien ne fonctionne. Ce code me permettrai qu'a chaque fois que je crée une nouvelle feuille client, les cellules de la colonne M de ma feuille référents sites soient renseigner automatiquement.
Merci de votre attention.
Cordialement
Bonsoir
Peut être ceci ?
Sheets("Référents sites").Range("B2").Offset(0, 13) = ActiveSheet.Range("G17").Value
Cordialement
Bonjour,
Sans fichier, je suis pas sur de tout comprendre. rien que çà : "dans la cellule du même nom que ma feuille active dont le nom se trouve en B2"
Traduction svp ??? tu as donnés un nom à toutes tes cellules de destination dans la feuille "Référents sites" ?
et ce nom ce retrouve dans la feuille active en B2 ?
Ou alors en B2 c'est le titre d'une des colonnes de ton onglet "Référents sites" ?
Bonjour Dan.
J'ai essayé ce code mais si je mets Range ("B2") a la place de .Range(ActiveSheet.Range(B2)).Value il ira me sélectionner la cellule B2 de la feuille "Référents sites". Donc ce code ne marche pas non plus malheureusement.
Cordialement
- Messages
- 3'581
- Excel
- 2013, 2019, 365
- Inscrit
- 11/04/2020
- Emploi
- Formateur bureautique, dvpt fichiers
Bonjour DJIL, Dan, Xmenpl,
Petite question :
Est-ce toi qui a fait le reste du code de ton application ?
Bonjour Xmenpl.
Le classeur est assez important en poid (14Mo). Je ne sais pas si je peux l'exporter. Je vais essayer d'être plus précis:
En B2 de chaque ActiveSheet, je récupère le nom de la feuille qui me sert également d'entête de feuille afin que les techniciens puissent savoir qu'il sont sur la feuille du bon client.
Private Sub Total_des_heures_client()
Sheets("Référents sites").Range(ActiveSheet.Range(B2)).Value.Offset(0, 13) = ActiveSheet.Range("G17").Value
End Sub
Sheets("référents sites") = Ma feuille source dans laquelle je souhaite faire remonter des infos
.Range(ActiveSheet.Range(B2)).Value = Je souhaite avec ce bout de code que le programme me sélectionne Range( feuille sur laquelle je suis.Range(Qui comporte le nom de ma feuille qui est égal au nom du client) et qu'il prenne cette valeur ).
.Value.Offset(0, 13) = Une fois que le code a retrouvé en colonne A dans la feuille "Référents sites" la même valeur que .Range(ActiveSheet.Range(B2)).Value, le code décale le range de 13 colonnes de la même ligne pour se retrouver en colonne M.
= ActiveSheet.Range("G17").Value = Le code prend la valeur de la feuille sur laquelle je suis en cellule "G17" pour la mettre dans la cellule de la colonne M correspondant au client souhaité.
Pour faire plus simple, disons que j'ai une feuille qui s'appelle "ALDES", mon code sera :
Private Sub Total_des_heures_client()
Sheets("Référents sites").Sheets("ALDES").Range(B2).Value.Offset(0, 13) = Sheets("ALDES").Range("G17").Value
End Sub
Ainsi, le code va sur la feuille référents sites, il prend la valeur B2 de la feuille "ALDES" (qui est ni plus ni moins que le nom du client), il retrouve le nom "ALDES" dans la colonne A de la feuille "Référents site", il se décale de 13 colonnes et écrit la valeur qui se trouve dans la feuille "ALDES" dans la cellule G17. Ainsi je peux écrire mon total d'heures effectuées pour ce client dans le tableau général.
Cordialement.
Bonjour Joyeuxnoel.
Oui j'ai fait tout le reste, il ne me manque plus que la remonter des heures de chaque feuille client vers le tableau de synthèse dans la feuille "référents sites" et il sera opérationnel.
Cordialement
- Messages
- 3'581
- Excel
- 2013, 2019, 365
- Inscrit
- 11/04/2020
- Emploi
- Formateur bureautique, dvpt fichiers
Re,
Etrange, j'aurais pourtant presque pu jurer que si tu as vraiment passé 5 jours dessus, c'est que VBA ne te parlait pas du tout.
Je ne comprends malheureusement pas grand chose aux explications, je laisse Dan et Xmenpl te guider ;)
@ JoyeuxNoel,
J'utilise Excel depuis des années mais j'ai commencé à apprendre le VBA il y à 4 mois. Je n'apprends que ce dont j'ai besoin car je ne compte pas en faire mon métier
Bien à vous.
- Messages
- 3'581
- Excel
- 2013, 2019, 365
- Inscrit
- 11/04/2020
- Emploi
- Formateur bureautique, dvpt fichiers
Re,
.Value.Offset(0, 13) = Une fois que le code a retrouvé en colonne A dans la feuille "Référents sites" la même valeur que .Range(ActiveSheet.Range(B2)).Value, le code décale le range de 13 colonnes de la même ligne pour se retrouver en colonne M.
Je ne vois pas à quel moment il est question de la colonne A et comment il peut le savoir.
De ce que j'ai cru comprendre, tu auras besoin de lui donner 2 indications différentes pour arriver à tes fins.
Mais encore une fois, pas certain que tout soit très clair.
Bonjour
Oups désolé je n'avais pas suivi le fil
Pour faire plus simple, disons que j'ai une feuille qui s'appelle "ALDES", mon code sera :
Private Sub Total_des_heures_client()
Sheets("Référents sites").Sheets("ALDES").Range(B2).Value.Offset(0, 13) = Sheets("ALDES").Range("G17").Value
End Sub
Ainsi, le code va sur la feuille référents sites, il prend la valeur B2 de la feuille "ALDES" (qui est ni plus ni moins que le nom du client), il retrouve le nom "ALDES" dans la colonne A de la feuille "Référents site", il se décale de 13 colonnes et écrit la valeur qui se trouve dans la feuille "ALDES" dans la cellule G17. Ainsi je peux écrire mon total d'heures effectuées pour ce client dans le tableau général.
Le premier souci c'est que vous repostez déjà le code avec des erreurs. Range(B2), cela va bloquer à coup sûr --> C'est Range("B2"). Il faut les guillemets.
En fonction de vos dernières explications, essayez ceci :
Private Sub Total_des_heures_client()
Dim ligne As Integer
On Error Resume Next
With Sheets("Référents sites")
ligne = .Range("A:A").Find(Sheets("ALDES").Range("B2").Value, LookIn:=xlValues, lookat:=xlWhole).Row
If Err.Number = 0 Then .Range("M" & ligne).Value = Sheets("ALDES").Range("G17").Value
End With
End Sub
Le code va aller mettre la valeur de G17 de la feuille Aldes dans la colonne M de la feuille Référents sites
Cordialement
Bonjour a tous. La solution à été trouvée par un collègue qui l'utilise dans un de ses tableaux.
=SIERREUR(INDIRECT("'"&A6&"'!G17");"")
J'avais découvert la fonction indirect il y a peu de temps mais ne la maitrisant pas suffisamment je l'avais écarté. Du coup c'est formule est rentrée dans chaque cellule de ma colonne M de mon tableau "Référents sites" et compare les noms de chaque feuille avec la cellule en référence (ici A6). Lorsque il a trouvé que le nom de la Feuil8("ALDES") est égale à la valeur de la cellule A6 (ALDES) de mon tableau "référents sites" , il récupère la valeur de la cellule "G17" de la feuille "ALDES" et la recopie dans la case M6 ou a été rentré la formule.
C'était tellement simple... Passer 5 jours à chercher quelque chose dans des termes tordus
Merci à tous d'avoir pris le temps de vous pencher sur mon problème.
Cordialement.