Ecrire sur une feuille en se basant sur les données d'une autre feuille

Nenetta

XLDnaute Nouveau
Bonjour le forum,

j'ai un classeur qui contient deux feuilles, la deuxième se remplit à partir des données de la première,
avec de l'aide on a réussit, à faire un script qui remplit la deuxième feuille: par exemple j'ai pour la ligne de production 1, un intervalle de 36 qui dure 5 heures; du coup sur la feuille 2 ('resultats'), le script devrait remplir de '1' la colonne de 'ligne de production' depuis la 36ème position, 5 fois.


Le script marche nickel, mais le problème c'est que j'aurais par la suite un total de 50 lignes de production, c'est à dire 50 colonnes sur la feuille 2, et je voudrais utiliser une boucle sur l'id uniquement pas sur toute la ligne.
j'ignore si je suis parvenue à me faire comprendre,:confused:

voici le script actuel.

merci pour vos réponses.
 

Pièces jointes

  • script.xlsm
    17.7 KB · Affichages: 32

Modeste

XLDnaute Barbatruc
Re : Ecrire sur une feuille en se basant sur les données d'une autre feuille

Bonjour Nenetta,

j'ignore si je suis parvenue à me faire comprendre
Je ne peux répondre qu'en mon nom propre: je suis arrivé à comprendre ce que le code fait actuellement et m'auto-décerne donc une médaille :eek: par contre je ne comprends pas du tout
j'aurais par la suite un total de 50 lignes de production, c'est à dire 50 colonnes sur la feuille 2, et je voudrais utiliser une boucle sur l'id uniquement pas sur toute la ligne
Tu as déjà 10 colonnes en feuille 2 ... Qu'il y en ait 50 ne devrait pas poser de problème :confused:
Précise aussi, si tu veux bien ton histoire de boucle sur l'id: je ne vois pas où il y aurait une "boucle sur toute la ligne"?
 

Nenetta

XLDnaute Nouveau
Re : Ecrire sur une feuille en se basant sur les données d'une autre feuille

Re bonjour Modeste,

je te remercie tout d'abord pour ta réponse, effectivement, il y'a pas de problème avec ce script :) c'était une erreur de ma part;
Au fait je veux qu'il me parcourt juste les cellules des colonnes l'id','intervalle' et 'nombre d'heure', pour que je ne reste pas obligée de renseigner les autres.. parce que dès qu'une cellule est vide il ne s’exécute pas, j'ignore si c'est faisable :confused:


Merci encore une fois.
 

Modeste

XLDnaute Barbatruc
Re : Ecrire sur une feuille en se basant sur les données d'une autre feuille

Re-bonjour aussi :)

Au stade actuel, c'est la colonne B qui permet de déterminer le nombre de lignes à "traiter". Comme le nom sert aussi à repérer quelle colonne doit être complétée en feuille "Résultats", c'est en somme assez logique que ce soit cette colonne qui soit utilisée, non?
Si tu encodes une id en colonne A, une intervalle en colonne E et un nombre d'heures en colonne F, mais qu'il n'y a pas de nom en colonne B, la série de '1' ne pourra pas s'inscrire dans la seconde feuille :confused: ... ou alors je n'ai pas compris ta question?

Pourrais-tu donner un exemple des différents cas de figures que tu voudrais gérer (quelles colonnes seraient complétées et lesquelles resteraient vides)?
 

Nenetta

XLDnaute Nouveau
Re : Ecrire sur une feuille en se basant sur les données d'une autre feuille

Re salut

Je vous comprends mieux, je voulais passer par l'id en pensant que ça serait plus efficace en indexation, désolée je suis toute nouvelle en VBA, sinon pour les colonnes comme date début et heure exacte, je voudrais que je serai pas contrainte à les renseigner.

une question toute bête si je déplace la colonne A cote à cote avec les colonnes que je devrais renseigner
ça va simplifier le code?

P.S: malheureusement, le script ne marche pas comme ça doit être, pas pour une '11' eme ligne pourtant le code me parait juste,
 

Modeste

XLDnaute Barbatruc
Re : Ecrire sur une feuille en se basant sur les données d'une autre feuille

Modeste à dit:
c'est la colonne B qui permet de déterminer le nombre de lignes à "traiter"
Tu dois donc veiller à ce que cette colonne-là soit complétée! ... et aussi -évidemment- à ce que des colonnes existent en feuille 2, qui portent le même nom que ceux en colonne B de la feuille 1
(au cas où tu aurais un doute, j'ai testé!)

Oops: je répondais seulement à ton message #5 ... pas encore lu le #6
 
Dernière édition:

Modeste

XLDnaute Barbatruc
Re : Ecrire sur une feuille en se basant sur les données d'une autre feuille

Tant mieux si tu as compris l'erreur (en voilà une que tu ne referas sans doute jamais ... ou tu penseras rapidement à vérifier si le souci ne vient pas de là).

Si tu repasses par ici il y a une petite boucle, au centre de ta procédure qui écrit les '1' en fonction du nombre d'heures renseignées en feuille 1:
VB:
For i = 1 To Cel.Offset(0, 4)
    WsC.Cells(Ligne, C.Column) = 1
    Ligne = Ligne + 1
Next i
Ces 4 lignes pourraient être remplacées par celle-ci:
VB:
WsC.Cells(Ligne, C.Column).Resize(Cel.Offset(0, 4)) = 1
L'idée ici n'est pas tellement d'écrire moins de lignes de code, mais de permettre à la macro de s'exécuter (un peu) plus rapidement: au lieu d'écrire les '1' l'un après l'autre, elle les écrit en une fois dans le nombre de cellules concernées.

Une question à se poser aussi est: n'y aura-t-il jamais de doublons en colonne B de la feuille "maintenance" ... et si ça risque d'être le cas, que doit faire la macro (surtout si les valeurs d'intervalle et nombre d'heures sont différentes!)?
 
Dernière modification par un modérateur:

Nenetta

XLDnaute Nouveau
Re : Ecrire sur une feuille en se basant sur les données d'une autre feuille

Tant mieux si tu as compris l'erreur (en voilà une que tu ne referas sans doute jamais ... ou tu penseras rapidement à vérifier si le souci ne vient pas de là).

Si tu repasses par ici il y a une petite boucle, au centre de ta procédure qui écrit les '1' en fonction du nombre d'heures renseignées en feuille 1:
VB:
For i = 1 To Cel.Offset(0, 4)
    WsC.Cells(Ligne, C.Column) = 1
    Ligne = Ligne + 1
Next i
Ces 4 lignes pourraient être remplacées par celle-ci:
VB:
WsC.Cells(Ligne, C.Column).Resize(Cel.Offset(0, 4)) = 1
L'idée ici n'est pas tellement d'écrire moins de lignes de code, mais de permettre à la macro de s'exécuter (un peu) plus rapidement: au lieu d'écrire les '1' l'un après l'autre, elle les écrit en une fois dans le nombre de cellules concernées.

Une question à se poser aussi est: n'y aura-t-il jamais de doublons en colonne B de la feuille "maintenance" ... et si ça risque d'être le cas, que doit faire la macro (surtout si les valeurs d'intervalle et nombre d'heures sont différentes!)?

Re bonsoir Modeste,

Merci pour cette amélioration de code (je teste ce soir et je te dirais quoi)...
pour ta question, non je n'aurais pas de doublons en colonne B,
par contre le script ne marche toujours pas pour plus de 10 lignes, et je ne sais pas d'ou vient le problème,
et d'une autre part, j'aimerais savoir si l'indexation initiale des colonnes (A,B,C,..) pourrait être indexer en (1,2,3 ..) suivant l'id? :confused: pas très sure que c'est possible!
je voudrais désigner chaque colonne par un nombre.

Au plaisir de te lire :)
 

Modeste

XLDnaute Barbatruc
Re : Ecrire sur une feuille en se basant sur les données d'une autre feuille

Bonsoir Nenetta,

On sait tous que c'est difficile, mais il faut que tu prennes du temps pour expliquer ce que tu veux: c'est clair dans ta tête (sans doute :)), mais nous, on ne voit pas jusque là!

Quand je lis
je voudrais désigner chaque colonne par un nombre
J'ai envie de répondre Fichier (sous les versions récentes) > Options > Formules > Style de référence L1C1
... Mais est-ce bien ce que tu veux?? (La modification de cette option affecte l'ensemble des classeurs)

Par contre, lorsque je lis:
j'aimerais savoir si l'indexation initiale des colonnes (A,B,C,..) pourrait être indexer en (1,2,3 ..) suivant l'id?
... je t'assure que j'en suis le premier navré, mais je ne comprends pas!?
Si d'aventure quelqu'un passe par ici et peut éclairer ma lanterne, qu'il/elle n'hésite pas!
De ton côté, Nenetta, n'hésite pas non plus à illustrer ce à quoi tu penses dans un bout de fichier (si c'est possible!)

À toutes fins utiles, je joins une copie de ton fichier (avec la petite modif apportée au code ... mais qui ne change rien au fait que ça fonctionne ou non!), 20 lignes de prod en colonne B, les mêmes noms en ligne 1 de la feuille "résultat", des valeurs en colonnes E et F (et rien dans les colonnes id, date début et heure exacte). Vérifie que la feuille 2 est bien vide, clique sur le bouton ... et retourne voir le résultat :confused:


Hum (comme aurait dit Jocelyn) ... avant que tout le monde ne s'en aperçoive, j'ajoute discrètement le fichier annoncé hier soir et je repars sur la pointe des pieds ! :eek:
 

Pièces jointes

  • Intervalles et durées (Nenetta).xlsm
    21 KB · Affichages: 24
Dernière édition:

Nenetta

XLDnaute Nouveau
Re : Ecrire sur une feuille en se basant sur les données d'une autre feuille

Bonjour Modeste,

je suis désolée de mon manque de précision, sachant que ce n’était pas clair non plus dans ma tète :(, maintenant je comprends mieux,

sinon, super le script marche nickel sauf un petit souci, si l'intervalle vaut 0 ou 1, rien ne se passe, il ne remplis rien dans la feuille 2,

j'ai mis, mais ça ne marche pas.

If Cel.Offset(0, 3) > 1 And Cel.Offset(0, 4) > 1 Then
Ligne = Cel.Offset(0, 3) + 2
WsC.Cells(Ligne, C.Column).Resize(Cel.Offset(0, 4)) = 1
 
Dernière édition:

Modeste

XLDnaute Barbatruc
Re : Ecrire sur une feuille en se basant sur les données d'une autre feuille

Bonjour Nenetta, le forum,

Tu vas croire que je le fais exprès, mais dans mon dernier fichier, si je mets des '1' ou des '0' dans les colonnes E et F, rien n'apparaît dans les colonnes correspondantes en feuille "résultat" :confused: ton '+2' va provoquer l'écriture du premier '1' dans la colonne concernée de la feuille "résultat" 2 lignes plus bas qu'auparavant


Maintenant, attention: dans ton code, il n'y a pas de "remise à blanc" de la feuille résultat. Si tu exécutes la macro plusieurs fois de suite, en modifiant les intervalles et durées, les résultats se "superposent". Est-il possible que ce soit ce qui s'est passé?
Pour ma part, j'efface le contenu de la feuille résultat, chaque fois que je veux tester la macro (mais on peut prévoir cette "remise à blanc" au début de la macro ... si tu es certaine que ça ne créera pas un autre problème)

Edit: en relisant ton dernier message, j'ai un doute: tu dis que rien ne s'inscrit si l'intervalle est à 0 ou à 1. Tu veux dire rien du tout, nulle part ... ou rien dans la colonne de la ligne de prod!? Si c'est la 2e hypothèse, c'est assez normal, puisque tu as un test
Code:
If Cel.Offset(0, 3) > 1 And Cel.Offset(0, 4) > 1 Then
qui dit précisément qu'il ne faut exécuter la suite de la procédure que si l'intervalle et le nbre d'heures sont tous les deux supérieurs à 0
 
Dernière édition:

Nenetta

XLDnaute Nouveau
Re : Ecrire sur une feuille en se basant sur les données d'une autre feuille

Bonjour Nenetta, le forum,

Tu vas croire que je le fais exprès, mais dans mon dernier fichier, si je mets des '1' ou des '0' dans les colonnes E et F, rien n'apparaît dans les colonnes correspondantes en feuille "résultat" :confused: ton '+2' va provoquer l'écriture du premier '1' dans la colonne concernée de la feuille "résultat" 2 lignes plus bas qu'auparavant


Maintenant, attention: dans ton code, il n'y a pas de "remise à blanc" de la feuille résultat. Si tu exécutes la macro plusieurs fois de suite, en modifiant les intervalles et durées, les résultats se "superposent". Est-il possible que ce soit ce qui s'est passé?
Pour ma part, j'efface le contenu de la feuille résultat, chaque fois que je veux tester la macro (mais on peut prévoir cette "remise à blanc" au début de la macro ... si tu es certaine que ça ne créera pas un autre problème)

Edit: en relisant ton dernier message, j'ai un doute: tu dis que rien ne s'inscrit si l'intervalle est à 0 ou à 1. Tu veux dire rien du tout, nulle part ... ou rien dans la colonne de la ligne de prod!? Si c'est la 2e hypothèse, c'est assez normal, puisque tu as un test
Code:
If Cel.Offset(0, 3) > 1 And Cel.Offset(0, 4) > 1 Then
qui dit précisément qu'il ne faut exécuter la suite de la procédure que si l'intervalle et le nbre d'heures sont tous les deux supérieurs à 0

Je te remercie énormément pour ta patience, j'ai changé la condition sur Cel.Offset(0,3),Cel.Offset(0,4) et ça a marché, j'avoue que je ne suis pas encore à l'aise avec l'offset,
sinon pour la remise à zéro, je crée un autre bouton? j'ignore comment procéder :confused:

Edit: une petite question, comment tu as fais pour les entêtes de la feuille 2 c'est une option sur excel?

désolée de profiter de ta gentillesse.
 
Dernière édition:

Modeste

XLDnaute Barbatruc
Re : Ecrire sur une feuille en se basant sur les données d'une autre feuille

ReCréer un autre bouton ou pas, ça dépend de ce que tu veux faire!?

Si tu veux effacer le contenu de la feuille "résultats" à chaque exécution de la macro actuelle, tu peux ajouter, juste avant le "With Worksheets("Programme de maintenance")", la ligne suivante:
Code:
WsC.Cells(2, 1).Resize(WsC.UsedRange.Rows.Count, WsC.UsedRange.Columns.Count).ClearContents

Pour info, j'ai testé la même chose par formules (voir la pièce jointe). Les formules sont recopiées jusqu'en ligne 100.

Je serai occupé l'apprès-midi et ne repasserai donc qu'en soirée (mais toutes les suggestions sont les bienvenues)
 

Pièces jointes

  • Intervalles et durées par formules (Nenetta).xlsm
    57.9 KB · Affichages: 28

Discussions similaires

Statistiques des forums

Discussions
312 393
Messages
2 087 961
Membres
103 686
dernier inscrit
maykrem