IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

APIs Google Discussion :

Déplacer une ligne selon condition [Google Sheets]


Sujet :

APIs Google

  1. #1
    Membre à l'essai
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Avril 2019
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Avril 2019
    Messages : 43
    Points : 12
    Points
    12
    Par défaut Déplacer une ligne selon condition
    Bonjour,

    Passer de Calc à Sheets

    Dans Calc je possède une macro qui me permet de copier des lignes d'un tableau dans une autre feuille en fonction la valeur d'une cellule et là pour remettre tout ça sur sheets j'avoue je suis complètement perdu et de plus le temps me manque pour tout reprendre de zéro alors si une âme charitable serait disposée à me filer un coup de main afin de traduire cette macro VBA en JS je lui en serait pus que reconnaissant. Je pense qu'avec une aide sur cette macro me permettrait de faire un grand pas en avant pour pouvoir en créer d'autres et me débrouiller.

    je mets la macro en copie dans le message et merci d'avance aux pros du Js
    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    Sub Tri1
     
     
    Dim oDoc as Object, fBase as Object, fSel1 as Object, fSel2 as Object
    Dim maZone as Object, oFilterDesc as Object, maCellule as Object
    Dim oFields(0) As New com.sun.star.sheet.TableFilterField
    Dim CellVides as Variant, y as Long
    	oDoc = thisComponent
    	fBase = oDoc.Sheets.getByName("Tri O_U Today")
    	fSel1 = oDoc.Sheets.getByName("Selection Over Today")
    	fSel2 = oDoc.Sheets.getByName("Selection Under Today")
    	maZone = fBase.getCellRangeByName("A1:A1000")
    	CellVides = maZone.queryEmptyCells.RangeAddresses
    	y = CellVides(UBound(CellVides)).StartRow
    	maZone = fBase.getCellRangeByName("A1:AJ" & y)
    	oFilterDesc = maZone.createFilterDescriptor(True)
    	With oFields(0)
    		.Field = 31
    		.IsNumeric = True
    		.NumericValue = 1.6
    		.Operator = com.sun.star.sheet.FilterOperator.GREATER_EQUAL
    	End With
    	With oFilterDesc
    		.CopyOutputData = True
    		.ContainsHeader = False
    		.Orientation = com.sun.star.table.TableOrientation.COLUMNS
    		maCellule = fSel1.getCellRangeByName("A1")
    		.OutputPosition = maCellule.CellAddress
    		.FilterFields = oFields()
    	End With
    	maZone.filter(oFilterDesc)
    	oFilterDesc = maZone.createFilterDescriptor(True)
    	With oFields(0)
    		.Field = 31
    		.IsNumeric = True
    		.NumericValue = 0.2
    		.Operator = com.sun.star.sheet.FilterOperator.LESS
    	End With
    	With oFilterDesc
    		.CopyOutputData = True
    		.ContainsHeader = False
    		.Orientation = com.sun.star.table.TableOrientation.COLUMNS
    		maCellule = fSel2.getCellRangeByName("A1")
    		.OutputPosition = maCellule.CellAddress
    		.FilterFields = oFields()
    	End With
    	maZone.filter(oFilterDesc)
    End Sub

  2. #2
    Membre à l'essai
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Avril 2019
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Avril 2019
    Messages : 43
    Points : 12
    Points
    12
    Par défaut Fonction Sheets
    Bonjour,

    Apparemment ma demande est un peu trop complexe ou pas intéressante vu le manque de réponse ce que je peux parfaitement comprendre...
    Alors pour avancer sur ce sujet :
    Qui pourrait aider un débutant comme moi à faire une fonction ??

    Concrètement j'aimerais:

    - Dans un tableau déplacer les lignes pour lesquelles dans une des colonnes la valeur est supérieur à 1.6 vers une autre feuille déjà créer
    - Dans ce même tableau déplacer les lignes pour lesquelles dans une des colonnes la valeur est inférieur à 0.3 vers une autre feuille déjà créer (différente de la première)

    Voilà ce qui me ferait faire un pas en avant, car avec une ébauche de macro je pourrais réussir à l'analyser la comprendre et l'adapter à mon classeur.

    Merci d'avance la communauté je compte sur votre solidarité

  3. #3
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 483
    Points : 13 685
    Points
    13 685
    Billets dans le blog
    1
    Par défaut
    Je pense qu'il n'y a surtout pas assez de participants sur cette partie de Dvpez pour espérer une sous-traitance de ton problème en moins de 24h. A fortiori un dimanche

    Tu veux que tes 2 feuilles sont une images de la première ? Tu sembles interchanger les mots 'copier' et 'déplacer', ce qui n'est pas la même chose, et qui sont encore différentes de mon idée.

    Je pense que ceci devrait t'aider : https://www.extendoffice.com/documen...her-sheet.html
    Ca donnerait ça : https://docs.google.com/spreadsheets...it?usp=sharing

  4. #4
    Membre à l'essai
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Avril 2019
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Avril 2019
    Messages : 43
    Points : 12
    Points
    12
    Par défaut Merci Merci Merci
    Parfait en fait je me compliquais la vie avec ma macro
    Un grand merci à toi !!! Ton aide m'est précieuse dans l'avancement de mon projet

    Crois-tu qu'il serait possible dans ce même principe de créer une feuille où toutes les données filtrées s'ajoutent les unes derrière les autres en mode archives de la sélection car c'est un fichier qui évolue chaque jour mais j'aimerais garder une trace de chaque lignes sélectionnées ?

  5. #5
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 483
    Points : 13 685
    Points
    13 685
    Billets dans le blog
    1
    Par défaut
    Des fois, il faut savoir faire simple

    Qu'appelles-tu "une ligne sélectionnée" ?

  6. #6
    Membre à l'essai
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Avril 2019
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Avril 2019
    Messages : 43
    Points : 12
    Points
    12
    Par défaut
    Des lignes copiées par le filtre qu’elles soient copiées aussi ds une feuille archive

  7. #7
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 483
    Points : 13 685
    Points
    13 685
    Billets dans le blog
    1
    Par défaut
    Et bien dans ta feuille Archive, tu fais un nouveau filtre qui regroupe les 2 conditions

    J'ai mis un exemple dans mon fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =filter(Tout!A:B,(Tout!B:B<0.3) +(Tout!B:B>1.5))

  8. #8
    Membre à l'essai
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Avril 2019
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Avril 2019
    Messages : 43
    Points : 12
    Points
    12
    Par défaut
    On ne s’est pas compris, en fait chaque jour les lignes copiées avec le filtre sont différentes et j’aimerais créer une feuille supplémentaire de celle où sont déjà copiées les lignes filtrées où serait automatiquement copier chaque lignes en mode archive .
    Merci d’avance pour tes lumières et merci pour tes réponses précédentes 😜
    Et si tu maitrises les macros sur sheets j’ai quelques questions dans ce même principes de copier coller automatique vers d’autres classeurs ...

  9. #9
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 483
    Points : 13 685
    Points
    13 685
    Billets dans le blog
    1
    Par défaut
    Si je résume, tu as une feuille A où tu as toutes tes lignes. Automatiquement, des filtres remplissent les pages B et C. De temps en temps, les données dans la page A (et donc dans les pages B et C) changent. Tu voudrais que les données des pages B et C soient archivées de manière définitive dans une page D, pour qu'elles soient toujours présentes mêmes si les données disparaissent de A (et donc de B et C) ?

    Comment les données sur la feuille A sont-elles mises à jour ?

  10. #10
    Membre à l'essai
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Avril 2019
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Avril 2019
    Messages : 43
    Points : 12
    Points
    12
    Par défaut
    Elles sont mises a jour avec un importhtlm. Et oui c’est exactement cela que je veux tu as tout a fait bien compris ma demande.
    Un grand merci a toi de prendre du temps pour m’aider à avancer

  11. #11
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 483
    Points : 13 685
    Points
    13 685
    Billets dans le blog
    1
    Par défaut
    C'est pas évident a priori...

    IMPORTHTML s'exécute quand le document s'ouvre et met à jour les données de la page.

    Tu pourrais essayer de copier les données dans la méthode onOpen(), qui s'exécute justement quand le document s'ouvre : https://developers.google.com/apps-s...ides/triggers/ A voir si ça s’exécute avant ou après IMPORTHTML.

    Je soulèverai 2 points de questionnement :
    • Si les données à l'URL cible change sans que le fichier Google Sheet ne s'ouvre entre temps, tu pourrais ne jamais voir les données dans ton document
    • Ma technique pourrait générer des doublons dans les archives si les données sont présentes à 2 (ou plus) ouvertures du document

  12. #12
    Membre à l'essai
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Avril 2019
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Avril 2019
    Messages : 43
    Points : 12
    Points
    12
    Par défaut
    Et par l'intermédiaire d’un bouton il n’y a pas une fonction qui pourrait s exécuter que lorsqu’on clique dessus ?

  13. #13
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 483
    Points : 13 685
    Points
    13 685
    Billets dans le blog
    1
    Par défaut
    Si tu es OK pour déclencher manuellement l'archivage, c'est facile.

    Le plus simple à mon avis est d'écrire une fonction Apps Script qui fait le boulot et ensuite:
    - de l'exposer via le menu des macros : https://developers.google.com/apps-s...in_apps_script
    - ou de créer un bouton dans ta feuille et exécuter cette fonction quand tu cliques dessus : http://googleappscripting.com/google...dsheet-button/

  14. #14
    Membre à l'essai
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Avril 2019
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Avril 2019
    Messages : 43
    Points : 12
    Points
    12
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    function copier(e) {
     
      var templateSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('OVER');
      var sourceRange = templateSheet.getRange('A2:E');
     
      var clientsSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Play OV');
     
      var numRows = sourceRange.getNumRows();
      var numColumns = sourceRange.getNumColumns();    
      var lastRow = clientsSheet.getLastRow();
      if (lastRow == 0) {
        lastRow = 1;
      }
     
      var destRange = clientsSheet.getRange(lastRow + 1, 1, numRows, numColumns);
     
      sourceRange.copyTo(destRange);
    }
    Pourrais-tu m'aider avec mon script s'il te plaît ?

  15. #15
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 483
    Points : 13 685
    Points
    13 685
    Billets dans le blog
    1
    Par défaut
    Oui mais ce serait plus simple que tu expliques en français ce que tu souhaites faire (par exemple, je ne connais pas les noms de tes feuilles, ni tes colonnes utiles)

  16. #16
    Membre à l'essai
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Avril 2019
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Avril 2019
    Messages : 43
    Points : 12
    Points
    12
    Par défaut
    Je veux que les colonnes de A2 à E de la feuille "OVER" soit copiées sur la feuille "Play Ov" et ceux à chaque fois que je cliques sur le bouton et que sur cette feuille Play OV les lignes s'ajoutent les unes à la suite des autres (en mode archive comme vu précédemment ensemble) et dans l'idéal que les lignes copiées gardent leur formatage et formules
    Encore un grand merci pour ton aide si précieuse
    Dis moi si tu as besoin de plus de renseignements

  17. #17
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 483
    Points : 13 685
    Points
    13 685
    Billets dans le blog
    1
    Par défaut
    Si tu veux archiver toute la feuille OVER, le code suivant fait l'affaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    function archive() {
      // Get sheets
      var spreadsheet = SpreadsheetApp.getActive();
      var sourceSheet = spreadsheet.getSheetByName('OVER');
      var destSheet = spreadsheet.getSheetByName('Play Ov');
     
      // Get data from OVER
      var source = sourceSheet.getDataRange();
     
      // Copy to the end of Paly Ov
      var startRow = destSheet.getLastRow() + 1;
      var dest = destSheet.getRange(startRow, 1, 1, 1);
     
      source.copyTo(dest);
    };
    Sinon, tu ne veux qu'une partie de la feuille OVER, utilises par exemple var source = sourceSheet.getRange('A2:E');C'est presque ce que tu avais fait

  18. #18
    Membre à l'essai
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Avril 2019
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Avril 2019
    Messages : 43
    Points : 12
    Points
    12
    Par défaut
    Je ne sais pas si on va finir par y arriver mais la copie fonctionne parfaitement le problème est qu'a chaque actualisation de l'importhtml les lignes copiées en archive sont modifiées automatiquement sans que je puissent gérer ça par le bouton.
    Je pense que comme les formules du filtres restent intégrées aux cellules celles ci continuent de se mettre à jour avec l'actualisation de l'importhtml ce qui empêche concrètement de constituer des archives.
    Si pour résoudre le problème tu avais besoin que je te partage le fichier cela peut toujours se faire mais en privé seulement

  19. #19
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 483
    Points : 13 685
    Points
    13 685
    Billets dans le blog
    1
    Par défaut
    Regarde ce que tu as dans les archives (genre en A1) mais tu dois retrouver ton IMPORTHTML en fait. On copie les ranges donc les formules avec, pas simplement les valeurs.

    Tente un source.copyTo(dest, SpreadsheetApp.CopyPasteType.PASTE_VALUES, false); pour voir.

  20. #20
    Membre à l'essai
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Avril 2019
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Avril 2019
    Messages : 43
    Points : 12
    Points
    12
    Par défaut
    Non ça ne change rien et oui en effet le filtre appliqué reste opérationnel après la copie le problème vient de la je pense

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Couper coller une ligne selon condition
    Par NEC14 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 03/05/2019, 08h50
  2. [Google Sheets] Déplacer une ligne selon liste déroulante
    Par la meduse dans le forum APIs Google
    Réponses: 0
    Dernier message: 31/08/2017, 16h29
  3. [XL-2003] Copier une colonne en ligne selon condition
    Par ballix22 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 06/03/2013, 14h30
  4. [XL-2003] Insérer une ligne selon une condition
    Par MiXinG dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 02/07/2009, 17h20
  5. Colorer une ligne selon condition
    Par NEC14 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 03/10/2008, 08h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo