Remplir une feuille Excel à partir d'une autre

Salut tout le monde,

je débute en vba et j'aimerai avoir une idée sur le comment procéder dans ce cas, je vous explique, j'ai un classeur comportant deux feuilles, je voudrais remplir l'une à partir de l'autre, en suivant certains conditions, comment y parvenir?

cela pourrait se faire automatiquement, ou bien je donne à l'utilisateur accés à un bouton?

Je suis vraiment perdue, je ne sais plus par ou commencer. merci pour votre aide.

Au plaisir de vous lire.

Je 'up' pour plus d'informations,

voici mon fichier excel, il contient deux feuilles, la première renseigne sur le programme des maintenances, et la deuxième feuille doit se remplir de '1' selon la première, en fait, on remplis le 1 autant de fois qu'on aura de nombre d'heures de maintenance;

je sais pas si je parviens à me faire comprendre

merci pour votre réponse

81script.xlsx (9.85 Ko)

une explication : je veux que quand le script me récupère le nombre 36 par exp (intervalle entre date courante et date de début pour la ligne de prod 1 ) depuis la première feuille (programme de maintenance), il m'écrira sur la feuille (résultats) 1 en A36, 5 fois (nombre de maintenance).

j'ai vraiment besoin de votre aide! merci d'avance!

Bonjour,

A tester

168script.xlsm (17.68 Ko)

A+

C'est exactement ce que je cherchais à faire, merci bcp !!

Ta satisfaction me comble

Attention toutefois à respecter scrupuleusement l'orthographe du nom des lignes de prod dans les deux feuilles pour éviter les échecs de la recherche (pas d'espace en fin de texte par exemple).

A+

Bonsoir Frangy;

je reviens vers toi, parce que j'ai voulu réutiliser la macro dans un autre fichier, et ça n'a pas marcher, Pourrais tu me commenter ton code s'il te plait? il y'a des parties que je n'ai pas bien compris. notamment ces phrases:

.Range("B2:B" & .Range("B" & Rows.Count).End(xlUp).Row)

.Range(WsC.Cells(1, 1), WsC.Cells(1, Columns.Count).End(xlToLeft)).Find(Cel, , xlValues, xlWhole)

Je te remercie énormément pour ton aide,

.Range("B" & Rows.Count).End(xlUp)

représente la dernière cellule renseignée de la colonne B de la feuille "Programme de maintenance".

Il s'agit "littéralement" de la première cellule renseignée que l'on trouve lorsqu'on remonte la colonne B (B4 dans l'exemple).

.Range("B" & Rows.Count).End(xlUp).Row est la ligne correspondante (ligne 4 dans l'exemple).

.Range("B2:B" & .Range("B" & Rows.Count).End(xlUp).Row)

représente donc la plage des noms de production (B2:B4 dans l'exemple).

WsC.Cells(1, Columns.Count).End(xlToLeft)

représente la dernière cellule renseignée de la ligne 1 de la feuille "Resultats".

Il s'agit "littéralement" de la première cellule renseignée que l'on trouve lorsqu'on remonte la ligne 1 (J1 dans l'exemple).

.Range(WsC.Cells(1, 1), WsC.Cells(1, Columns.Count).End(xlToLeft))

représente donc la plage des noms de production (A1:J1 dans l'exemple).

.Range(WsC.Cells(1, 1), WsC.Cells(1, Columns.Count).End(xlToLeft)).Find(Cel, , xlValues, xlWhole)

est l'instruction qui réalise la recherche (find) du nom de production (Cel) dans la plage A1:J1.

A+

Je vous remercie encore Frangy,

vous êtes un ange

Bonjour Frangy, Bonjour le forum,

le script que vous m'avez envoyé marche nickel, sauf que j'aurais par la suite 50 colonnes de production, du coup j'aimerais faire l'indexation juste sur l'ID,

j'ai changé cette ligne 'For Each Cel In .Range("B2:B" & .Range("B" & Rows.Count).End(xlUp).Row)'

par 'For Each Cel In .Range("A2:A" & .Range("B" & Rows.Count).End(xlUp).Row)' et qu'il me parcoure juste les 3 colonnes ( id, intervalle, et nbre d'heures) pour ne pas être obligé de renseigner les autres colonnes, sachant que les colonnes ne vont pas respectés la notation 'Ligne de prod 1'

Je me sens tellement bornée d'esprit, je ne comprends vraiment pas comment procéder, si vous pouvez me donner un bout de pouce je serais ravie; désolée encore de vous déranger.

Bonjour,

Si tu changes de valeur à rechercher, il faut que tu adaptes le code sur 2 points :

1) il faut trouver la relation entre la valeur cherchée (Id) et les en-têtes de colonnes de la feuille "Resultats".

Dans le code proposé, le texte "Ligne de production 1" est obtenu avec un format personnalisé.

En réalité, la valeur de la cellule est 1 (valeur qui apparait dans la barre de formule lorsque A1 est sélectionnée).

Ainsi, on peut avoir une relation directe entre l'Id ligne de production et le nom de la ligne de production.

2) il faut adapter le décalage des valeurs à renseigner par rapport à l'Id:

L'intervalle entre date courante et date de début de maintenance est obtenu avec Cel.Offset(0, 4).

Le nombre d'heure de maintenance est obtenu avec Cel.Offset(0, 5).

A+

31script-2.xlsm (21.56 Ko)

Parfait, je comprends mieux maintenant,

Il me reste un dernier truc, quand j'ajoute plus que 10 lignes sur la feuille 1 (Programme de maintenance), le script ne s’exécute

malheureusement pas. ou bien je devrais ajouter la colonne au préalable sur la feuille 2 par exp ' Lign de prod 11'?

Merci encore pour ta réponse.

Si tu traites plus de 10 lignes, cela signifie :

  • soit que le nombre de lignes de production est supérieur à 10, auquel cas il faut l'ajouter à la feuille "Résultats"
  • soit que l'Id a déjà été traité, auquel cas tu écrases le précédent.

Dans les deux cas, l'exemple que tu as fourni n'est plus conforme à la réalité.

Alors, devine !

A+

frangy a écrit :

Si tu traites plus de 10 lignes, cela signifie :

  • soit que le nombre de lignes de production est supérieur à 10, auquel cas il faut l'ajouter à la feuille "Résultats"
  • soit que l'Id a déjà été traité, auquel cas tu écrases le précédent.

Dans les deux cas, l'exemple que tu as fourni n'est plus conforme à la réalité.

Alors, devine !

A+

Très exact,

Merci énormément !

Re Bonsoir Frangy,

une dernière? question s'il te plait, est-t-il possible d'indexer les colonnes (A,B,C....) en numéro (1,2,3) suivant l'id?

car me facilitera les taches par la suite. aussi qu'on je ne respecte pas la notation 'Lign de prod1' ça ne marche pas

je suis désolée de profiter de ta gentillesse.

Comme je te l'ai expliqué précédemment, les en-têtes de colonnes de la feuille "Resultats" sont déjà indexes en numéro (1,2,3) suivant l'Id.

Le texte "Ligne de production x" est obtenu avec le format personnalisé "Ligne de prod "0.

Tu peux visualiser ce format en sélectionnant la cellule A1 puis clic droit > Format de cellule.

Maintenant, si tu regardes la valeur qui apparait dans la barre de formule, tu verras que la valeur de la cellule est 1.

On a donc la valeur de l'Id et l'affichage du nom de la ligne de production.

Si tu veux l'affichage de l'Id, il suffit de modifier le format (Standard par exemple).

A+

Rechercher des sujets similaires à "remplir feuille partir"