Reporter automatiquement une ligne sur une autre feuille

Deanerys - 29 janv. 2024 à 14:33
 Deanerys - 7 févr. 2024 à 11:00

Bonjour,

Dernière requête du moment svp.

Est-il possible sur Excel de reporter une ligne entière sur une ou plusieurs autres feuilles automatiquement.

Par exemple Si une ligne comporte la Cellule A1="x" et la Cellule B1=2 reporter la ligne entière sur les trois prochaines feuilles uniquement ou Si une ligne comporte la Cellule A1="y" et la Cellule B1=3 reporter la ligne entière sur les six prochaines feuilles uniquement.

Merci :)


Windows / Firefox 122.0

A voir également:

13 réponses

Le Pingou Messages postés 12225 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 décembre 2024 1 454
29 janv. 2024 à 15:29

Bonjour.

Est-ce qu'il s'agit toujours de la première ligne ...oui/non

Est-ce que si vous changez les valeurs A1 et B1 il faut ajouter une ligne supplémentaire sur les autres feuilles ,,,Oui/Non !


1

Alors non pas tjs de la première ligne pour l'autre question je ne sais pas en fait ce que je voudrais faire c'est reporter les paiements en plusieurs fois pour suivre les échéances. Par exemple si une personne paye en 3 fois je l'inscris en janvier donc premier paiement et les deux autres paiements reporter sa ligne sur les feuilles février et mars. Donc en Avril il ne faut plus qu'elle apparaisse. Idem pour les paiements en 6 fois.

1
Le Pingou Messages postés 12225 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 décembre 2024 1 454
Modifié le 29 janv. 2024 à 16:14

Bonjour,

Le plus simple est de réaliser un exemple manuellement, 2 ou 3 cas, sur un classeur et vous le mettez sur Accueil de Cjoint.com  et poster le lien.

Je pense qu'il va falloir une macro (VBA)!


1

Dsl pour l'attente je peaufinais le fichier, j'ai fait une copie j'ai mis toutes les formules que je souhaitais et les mises en formes uniquement sur l'onglet Nov 23 je copierai plus tard sur les autres onglets. Du coup est-il possible par exemple si sur l'onglet Nov 23 la ligne 22 (c'est la première qui a un paiement en plusieurs fois) la cellule J22 est noté "CASH 6X" et I22 est noté "1" reporter la ligne entière avec les mêmes mises en forme et formules 5 fois sur les 5 prochains onglets soit une fois en Dec 23, une fois en Janv 24, Fev 24, Mars 24, Avril 24 en revanche il faut que la cellule I22 se modifie à chaque fois Si en Nov 23 c'est noté 1 mettre dans l'onglet Dec 23 en I15 mettre 2 (Je précise, il faut que la ligne se recopie au début à chaque fois, c'est à dire qu'on doit voir apparaître les paiements en plusieurs fois en premier dans le tableau donc si j'écris dans une ligne et qu'au dernier moment dans l'onglet précédent je mets à jour un paiement que j'aurais oublié, ajouter une ligne au dessus de la ligne pour que les paiements en plusieurs fois soient regroupés ensemble) en Janv 24 en I15 mettre 3 ainsi de suite. Idem pour les paiements en trois fois, il faut que ça soit reporté 2 fois, se sont lignes marqués "CASH X3" en cellule I donc par exemple si le premier paiement est en décembre, le deuxième sera janvier et le dernier en février.

Voilà je ne sais pas si j'ai bien expliqué et si ce n'est pas trop dur à mettre en place. J'ajoute que ce fichier est un fichier partagé avec mes collègues et que ceci n'est qu'une copie, du coup si vous arrivez à m'aider comment dois-je recopier la macro je ne sais pas où c'est je n'ai jamais fait.

Je vous remercie infiniment :)

Voici le lien

https://www.cjoint.com/c/NAEtuf2NmJM

Voici les captures d'écran qui montre le vrai fichier car sur celui que je vous ai envoyé toutes couleurs ni sont pas bizarre en fait je viens de comprendre que le vrai tableau c'est sur google sheet, j'ai tout copié sur excel mais le rendu n'est pas le même : https://www.cjoint.com/c/NAEtxU3KfVM et https://www.cjoint.com/c/NAEtzhzcohM

0
Le Pingou Messages postés 12225 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 décembre 2024 1 454
31 janv. 2024 à 16:49

Bonjour ;

Merci pour le fichier.

Je pense qu’il est nécessaire d’utilise le VBA (macro) pour réaliser votre demande.

Note : je constate que les colonnes de (Nov 23) ne correspondent pas avec les feuilles de  Jan, Fev, etc. Ceci depuis la colonne [ I ]. De ce fait lors d’une copie de ligne il y aura un décalage des données qui ne correspondront pas aux titres des colonnes.

Question : A qu’elle moment il faut que la ligne soit recopier (lors de qu’elle entrée de donnée …par exemple lors de la validation en colonne J :J [Offre]

Merci du retour.


1

Déjà, merci de vous intéresser à ma demande un peu complexe. Oui j'ai pas fini de copier toutes les colonnes, je viens de le faire. Alors je ne suis pas sûr d'avoir bien tout compris pour l'autre question, veuillez m'excuser de mon manque de compréhension ;)

Toutefois je répondrais ceci : lorsqu'une ligne doit être recopiée, il faut qu'elle possède (je vais donner les valeurs réelles) en F="Closé" en I=1 ou 2 ou 3 ou 4 ou 5 ou 6 et aussi surtout en J marqué "Cash X6" ou "Cash X3"

Mais attention finalement se ne sont que les lignes comprenant en I = 2 ou 3 ou 4 ou 5 ou 6 qui sont réellement déplacées parce que la ligne comprenant la Cellule I=1 est concernée mais pas déplacée, tout part d'elle. Du coup lorsque les conditions sont réunies c'est à dire par exemple en F="Closé" en I=1 et en J= "Cash X6" alors cette ligne doit être recopiée 5 fois, soit une fois par mois sur les 5 autres mois suivants.

Mais attention autre condition, il faut que les cellules F et I changent de texte à chaque fois pour F="Done" et non plus "Closé" pour les 5 autres mois suivants, en revanche pour I ça se corse un peu car il faut que le chiffre corresponde au nombre de paiement à chaque fois. C'est à dire si c'est le deuxième paiement I affichera 2 si c'est le troisième paiement I affichera 3 ainsi de suite.

ChatGPT m'a fournis cette formule mais ça ne fonctionne pas, pouvez vous y jeter un oeil svp ? Merci pour tout :)

/** @OnlyCurrentDoc */functionRepartirPaiements() {

varfeuille = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Nov 23");

vardernierLigne = feuille.getLastRow();

for (vari = 15; i <= dernierLigne; i++) {

varcelluleF = feuille.getRange("F" + i).getValue();

varcelluleJ = feuille.getRange("J" + i).getValue();

varcelluleI = feuille.getRange("I" + i).getValue();

if (celluleF === "Closé" && celluleJ === "CASH X3" && celluleI === 1) {

varmois = feuille.getRange("I" + i).getValue();

if (mois < 5) {

varfeuilleSuivante = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(getMonthName(mois + 1) + "24");

if (!feuilleSuivante) {

SpreadsheetApp.getActiveSpreadsheet().insertSheet(getMonthName(mois + 1) + "24");

        }

varnouvelleLigne = 15;

feuille.getRange("A" + i + ":Z" + i).copyTo(feuilleSuivante.getRange("A" + nouvelleLigne + ":Z" + nouvelleLigne), { contentsOnly: true });

feuilleSuivante.getRange("F" + nouvelleLigne).setValue("Done");

feuilleSuivante.getRange("J" + nouvelleLigne).setValue("CASH X3");

feuilleSuivante.getRange("I" + nouvelleLigne).setValue(mois + 1);

feuille.getRange("C" + i).setValue("Done");

      }

    } elseif (celluleF === "Closé" && celluleJ === "CASH X6" && celluleI === 1) {

varmoisX6 = feuille.getRange("I" + i).getValue();

if (moisX6 < 5) {

varfeuilleSuivanteX6 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(getMonthName(moisX6 + 1) + "24");

if (!feuilleSuivanteX6) {

SpreadsheetApp.getActiveSpreadsheet().insertSheet(getMonthName(moisX6 + 1) + "24");

        }

varnouvelleLigneX6 = 15;

feuille.getRange("A" + i + ":Z" + i).copyTo(feuilleSuivanteX6.getRange("A" + nouvelleLigneX6 + ":Z" + nouvelleLigneX6), { contentsOnly: true });

feuilleSuivanteX6.getRange("F" + nouvelleLigneX6).setValue("Done");

feuilleSuivanteX6.getRange("J" + nouvelleLigneX6).setValue("CASH X6");

feuilleSuivanteX6.getRange("I" + nouvelleLigneX6).setValue(moisX6 + 1);

feuille.getRange("C" + i).setValue("Done");

      }

    }

  }

}

functiongetMonthName(month) {

varmonths = [

"Janv",

"Fev",

"Mars",

"Avr",

"Mai",

"Juin",

"Juil",

"Aout",

"Sept",

"Oct",

"Nov",

"Dec",

"Oct 23",

"Nov 23",

"Dec 23"

  ];

returnmonths[month - 1];

}

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Le Pingou Messages postés 12225 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 décembre 2024 1 454
Modifié le 1 févr. 2024 à 16:51

Bonjour,

Je n'ai pas pris en compte votre message précédent et de plus le code ChatGPT  c'est du n'importe quoi...!

Voici ma proposition. J’ai adapté les colonnes car elles n’étaient pas égales. Les feuilles sont nommées avec le mois y compris l’année.

 En plus j’ai ajouté une colonne W:W] pour contrôle si les copies de ligne sont réalisées (ne pas modifier car utiliser par la macro… !)

J’ai réalisé pour le cas de la ligne 22 de la feuille Nov 23.

A vous de réaliser les autres cas, La macro se déclenche lorsque vous entrez/validez la valeur de la cellule de la colonne [Offre]

La suite se fera selon vos commentaires.

Bonne découverte : https://www.cjoint.com/c/NBbpYsYJkMZ

1

Merci beaucoup mais les macros ont été bloquées je ne sais pas comment les activer svp

0
Le Pingou Messages postés 12225 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 décembre 2024 1 454
1 févr. 2024 à 18:40

Bonjour,

Simplement enregistrer le classeur puis le fermer et le rouvrir et ensuite accepter les macros (petit message qui s'affiche)


1
Le Pingou Messages postés 12225 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 décembre 2024 1 454
2 févr. 2024 à 08:52

Bonjour,

J’ai pensé qu’il serait bien de préciser sur les feuilles le début des report d’acompte et celui des écritures du mois.

Voici ma proposition : https://www.cjoint.com/c/NBch0cOiioZ


1

Merci beaucoup a priori ça à l'air de fonctionner et ce que vous avez fait est une très bonne idée je vous remercie. Puis-je svp vous demander de remettre en colonne I la valeur du paiement comme vous avez fait l'autre fois, c'est à dire que lorsque la ligne est recopiée, I doit changer de valeur mais aussi la cellule F. Si c'est la ligne 22 du mois de Nov 23 qui doit être recopiée car c'est un paiement en trois par exemple ça sera écrit : F="Closé" en I=1 et les mois suivants ça change, en Dec : 23 F="Done" en I=2 et le dernier paiement sera en Janv 24 : en Dec 23 F="Done" en I=3 idem pour les paiements en 6 fois I = 2 puis 3 puis 4 puis 5 dans ces mois respectifs. Merci beaucoup pour votre aide. J'adore Excel ça me passionne ! Avec votre collaboration c'est super motivant merci beaucoup.

0
Le Pingou Messages postés 12225 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 décembre 2024 1 454
Modifié le 2 févr. 2024 à 17:12

Bonjour,

Pour le closé changé sur [Done] se n'est pas faisable car vous avez une liste déroulante en colonne F:F est la valeur Done n'y figure pas.

Pour l'incrémentation En colonne I:I c'est OK je vais le contrôler.

Note: finalement je vais ajouter la valeur [Done] dans votre liste.


1

Ha oui super merci beaucoup, hâte :) hiiii vous êtes un génie !

0
Le Pingou Messages postés 12225 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 décembre 2024 1 454
2 févr. 2024 à 21:53

Bonjour,

Voici la proposition avec les corrections, En plus j’ai ajouté une feuille ´Mes listes] où vous avez les données pour les 3 listes déroulantes et de cette manière si vous avez une correction/ajout …de valeurs il vous suffit de modifier dans ces lites et ainsi se sera valable pour toutes les feuilles (pas de modifications sur chacune des feuilles).

J’ai testé sur les lignes 25 et 31. Je vous propose que vous le fassiez sur les autres cas.

Merci du retour qui me permettra de finaliser le tout

Le fichier :https://www.cjoint.com/c/NBcu1flVOAZ


1

Bonjour,

Magnifique ça fonctionne, merci beaucoup. Que dois je faire maintenant sachant que ça c'est une copie et que mon vrai fichier se trouve sur google sheets ? Merci.

0
Le Pingou Messages postés 12225 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 décembre 2024 1 454
Modifié le 5 févr. 2024 à 11:33

Bonjour,

Eh bien là c'est super que vous mentionnez maintenant que vous êtes avec [Google sheets] et je pense que les macros  Excel ne sont pas compatibles.

Est-il possible de voir le fichier sur google sheets?


1

Je l'ai dit plus haut dans un message avec la formule de l'ia. Le fichier est partagé avec d'autres, j'ai fait une copie le voici :

https://docs.google.com/spreadsheets/d/1R_149tzqK3RdsnDnRVfdIsGaZ17rePGfoRftZiVOS7U/edit?usp=sharing

0
Le Pingou Messages postés 12225 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 décembre 2024 1 454
5 févr. 2024 à 16:17

Bonjour,

Merci, cependant il m'est impossible de convertir les macros VBA Excel vers le Google Apps Script et le langage de programmation JavaScript.

Désolé.


1

D'accord, pas de soucis merci quand même.

Est-ce vous pouvez me transmettre la macro svp peut-être que que quelqu'un saurait convertir. En tout cas merci pour votre travail.

0
Le Pingou Messages postés 12225 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 décembre 2024 1 454
Modifié le 5 févr. 2024 à 18:49

Bonjour,

Les 2 macros se trouvent dans le classeur que je vous ai transmis.

Touche Alt+F11 et sur module de la feuille NOV 23 et l'autre sur module  lepingou


1

Merci je dois il y a plein de petites fenêtres avec des codes je dois tout recopier ?

Est-ce ça la macro en entier svp ?

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 10 And Target.Row > 14 Then
    x = "": nsh = "": nuli = ""
    If Target = "CASH divisé X6" And Target.Offset(0, -1) = 1 Or Target = "CASH divisé X3" And Target.Offset(0, -1) Then
        If Range("W" & Target.Row) = "Oui" Then Exit Sub 'Si déjà recopier sortir
        x = CInt(Right(Target, 1)) - 1
        nsh = ActiveSheet.Name
        nuli = Target.Row
        copierXfois x, nsh, nuli
    End If
End If
End Sub

0
Le Pingou Messages postés 12225 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 décembre 2024 1 454
6 févr. 2024 à 16:41

Bonjour,

Oui c'est correct, il manque la macro unique: Voici les deux code:

' A mettre sur le module de chaque Feuil2(Nov 23), Feuil3(Dec 23)....etc.

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 10 And Target.Row > 14 Then
    x = "": nsh = "": nuli = ""
    If Target = "CASH divisé X6" And Target.Offset(0, -1) = 1 Or Target = "CASH divisé X3" And Target.Offset(0, -1) Then
        If Range("W" & Target.Row) = "Oui" Then Exit Sub 'Si déjà recopier sortir
        x = CInt(Right(Target, 1)) - 1
        nsh = ActiveSheet.Name
        nuli = Target.Row
        copierXfois x, nsh, nuli
    End If
End If
End Sub

'A mettre dans un module (exemple Module 1 Dans mon exemple je l'ai nommée : lepingou)..  

Sub copierXfois(a, b, c)
x = a: nsh = b: nuli = c: maplage = d
'maplage = Range("A" & nuli & ":W" & nuli)
Sheets(nsh).Range("W" & nuli) = "Oui"
abm = Array("Jan", "Fev", "Mars", "Avril", "Mai", "Juin", "Juil", "Aout", "Sept", "Oct", "Nov", "Dec")
m = Left(nsh, Len(nsh) - 3)
num = Right(nsh, 2)
refD = DateSerial(num, 11, 1)
'mois = [a13]
'd = ActiveSheet.Name

po = Application.Match(m, abm, 0)
Application.ScreenUpdating = False
Application.EnableEvents = False
For aj = 1 To x
    num = Month(WorksheetFunction.EDate(refD, aj))
    nua = Year(WorksheetFunction.EDate(refD, aj))
    mon = abm(num - 1)
    nua2 = Right(nua, 2)
    nosh = mon & " " & nua2
'***************
    Range("A" & nuli & ":W" & nuli).Select
    Range("W" & nuli).Activate
    Selection.Copy
    Sheets(nosh).Select
    Range("A16").Select
    Selection.Insert Shift:=xlDown
    Range("F16") = "Done"
    Range("I16") = aj + 1
    Range("W16") = "Oui"
    Sheets(nsh).Select
Next
Application.CutCopyMode = False
Application.ScreenUpdating = True
Application.EnableEvents = True
MsgBox "la ligne est copiée sur les " & x & " suivants.Dernier: " & nosh
Range("A14").Select
End Sub

Bonne suite.


1

Merci infiniment je vais voir si quelqu'un serait convertir votre code. J'insiste beaucoup, je me répète mais car c'est énorme ce que vous avez fait pour moi merci :)

0