Remplir un onglet en fonction d'un autre

Bonjour à tous,

J'ai un fichier excel avec 2 onglets, j'aimerai que pour chaque ligne du premier, il y ai un "bloc" de 74 lignes qui se créent dans le second onglet, et que les données de ce bloc dépendent de la donnée saisie dans la case B2 de mon premier onglet

Le but final étant de pouvoir faire un export csv sans avoir des lignes à vides (sinon dans le fichier csv j'aurais " ;;;;;;;;")

Je vous ai mis en pj un exemple fait à la main, où j'ai mis 2 lignes dans le premier onglet, donc 148 dans le deuxième onglet, vous pouvez voir que dans le deuxième onglet les données en colonne E dépendent de la colonne B du premier onglet

Si vous pouvez m'aider à trouver une solution ça serait top ! Les seules macro que j'ai fait ont été faites avec l'enregistreur donc niveau VBA je part de 0 ..

Bonjour Kentuk, bonjour le forum,

Dans l'ongelt STM :

Pourquoi la colonne B est-elle vide ?

Pourquoi pas de numéro 54 pour les deux Valeurs ?

Pourquoi la formule n'est pas sur toutes des lignes ?

Pourquoi la formule est inversée : si O => vide. Si vide=>O ?

Quand tu proposes un exemple, essaie au moins d'être cohérent !?...

Essaie comme ça :

Sub Macro1()
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)
Dim LD As Long 'déclare la variable LD (Ligne de Départ)

Set OS = Worksheets("A remplir") 'définit l'onglet OS
Set OD = Worksheets("STM") 'définit l'onglet OD
TV = OS.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
OD.Cells.ClearContents 'efface le contenu de l'onglet OD
For I = 2 To UBound(TV, 1) 'boucle 1 : sur toutes les lignes du tableau des valeurs TV (en partant de la seconde)
    'définit la ligne de départ LD (0 si A1 de l'onglet OD est vide, sinon la dernière éditée de la colonne A de l'onglet OD)
    LD = IIf(OD.Range("A1").Value = "", 0, OD.Cells(Application.Rows.Count, "A").End(xlUp).Row)
    For J = 1 To 74 'boucle 2 sur toutes les valeurs de 1 à 74
        OD.Cells(LD + J, "A").Value = TV(I, 1) 'envoie dans la cellule ligne LD + J, colonne A la donnée TV(I,1)
        OD.Cells(LD + J, "B") = J 'envoie dans la cellule ligne LD + J colonne, B la valeur de J
        OD.Cells(LD + J, "C") = TV(I, 2) 'envoie dans la cellule ligne LD + J, colonne C la donnée TV(I,2) (O si O, rien si rien)
        OD.Cells(LD + J, "D") = 1 'envoie dans la cellule ligne LD + J, colonne D la valeur 1 (?)
    Next J 'prochaine valeur de la boucle 2
Next I 'prochaine ligne de la boucle 1
End Sub

Bonjour Kentuk, bonjour le forum,

Dans l'ongelt STM :

Pourquoi la colonne B est-elle vide ?

Pourquoi pas de numéro 54 pour les deux Valeurs ?

Pourquoi la formule n'est pas sur toutes des lignes ?

Pourquoi la formule est inversée : si O => vide. Si vide=>O ?

Quand tu proposes un exemple, essaie au moins d'être cohérent !?...

Essaie comme ça :

Sub Macro1()
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)
Dim LD As Long 'déclare la variable LD (Ligne de Départ)

Set OS = Worksheets("A remplir") 'définit l'onglet OS
Set OD = Worksheets("STM") 'définit l'onglet OD
TV = OS.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
OD.Cells.ClearContents 'efface le contenu de l'onglet OD
For I = 2 To UBound(TV, 1) 'boucle 1 : sur toutes les lignes du tableau des valeurs TV (en partant de la seconde)
    'définit la ligne de départ LD (0 si A1 de l'onglet OD est vide, sinon la dernière éditée de la colonne A de l'onglet OD)
    LD = IIf(OD.Range("A1").Value = "", 0, OD.Cells(Application.Rows.Count, "A").End(xlUp).Row)
    For J = 1 To 74 'boucle 2 sur toutes les valeurs de 1 à 74
        OD.Cells(LD + J, "A").Value = TV(I, 1) 'envoie dans la cellule ligne LD + J, colonne A la donnée TV(I,1)
        OD.Cells(LD + J, "B") = J 'envoie dans la cellule ligne LD + J colonne, B la valeur de J
        OD.Cells(LD + J, "C") = TV(I, 2) 'envoie dans la cellule ligne LD + J, colonne C la donnée TV(I,2) (O si O, rien si rien)
        OD.Cells(LD + J, "D") = 1 'envoie dans la cellule ligne LD + J, colonne D la valeur 1 (?)
    Next J 'prochaine valeur de la boucle 2
Next I 'prochaine ligne de la boucle 1
End Sub

ça fait plaisir d'être bien accueilli hein

Donc :

1) La colonne B est vide car c'est un champ non utilisé pour l'intégration du fichier csv final EDIT : Il faut quand même conserver les colonnes vides, le soft accueillant le fichier attend les données dans un ordre précis, supprimer une colonne vide décalerait tout

2) Parce que le dossier 54 n'existe pas dans le soft qui va recevoir le csv, je l'ai donc enlevé pour ne pas avoir d'erreur à l'intégration

3) La formule ne concerne que certains dossiers, ceux où la formule est présente, les autres ont la colonne E forcément à vide, mais doivent apparaître quand même, avec la colonne F à 1

4) Parce que si la cellule B du premier onglet est à "O" alors cela signifie que le champ de la colonne E du second onglet doit obligatoirement être à vide

Quand tu comprends pas quelque chose tu peux aussi demander gentiment et poliment, c'est plus agréable pour tout le monde

Merci d'avoir pris le temps de faire ton bout de code, il ne renvoi pas le résultat attendu mais c'est très proche de ce qu'il me faut, je vais essayer de l'adapter comme je peux

Re,

Désolé pour l'accueil un peu rugueux mais si tu prenais le temps de t'expliquer clairement nous n'aurions pas besoin de te reprendre. Ça vaut pour tes prochains posts...

C'est quand même couillon d'être obliger de piquer un peu pour bouger les gens.

Rechercher des sujets similaires à "remplir onglet fonction"