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

OpenOffice & LibreOffice Discussion :

Copie de la valeur de chaque cellule d'une colonne


Sujet :

OpenOffice & LibreOffice

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Militaire
    Inscrit en
    Mars 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Militaire

    Informations forums :
    Inscription : Mars 2013
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Copie de la valeur de chaque cellule d'une colonne
    Bonjour,

    Je souhaite copier une colonne vers une autre colonne. Mon soucis c'est que les cellules sources contiennent une formule et je souhaite que ce soit le résultat de cette formule qui soit renvoyer.

    et je souhaite que ma macro renvoie la valeur de la cellule et non son contenu.

    En fouillant sur ce même forum j'ai obtenu deux macros :

    1) première macro :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub copie_colonne_click
     
      Dim feuilleSource As Object 'Désigne la feuille source
      Dim feuilleDestination As Object 'Désigne la feuille destination
      Dim valeur As String
     
              monDocument = thisComponent
              feuilleSource = monDocument.sheets.getByName("Chef") ' definit la feuille source
              feuilleDestination = monDocument.sheets.getByName("vehicule1") ' définit la feuille de destination
     
              valeur = feuilleSource.getCellRangeByName("f201").Value
              feuilleDestination.getCellRangeByName("b205").Value = valeur
     
    End Sub
    Cette macro copie la valeur de la cellule et non son contenu donc ma copie se passe correctement mais pour une cellule et j'en ai 300 a traiter ...

    2) seconde macro (trouvez telle quelle sur ce même forum)
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    Sub CopierZone()
     Dim monDocument As Object
     'Pour désigner les feuilles
     Dim mesFeuilles As Object
     'Pour désigner la feuille source
     Dim feuilleSource As Object
     'Pour désigner la feuille destination
     Dim feuilleDestination As Object
     'Pour désigner les cellules sources
     Dim celluleSource As Object
     'Pour désigner la cellule destination
     Dim zoneDestination As Object
     'Pour désigner la feuille active
     Dim FeuilleActive As Object
     
     monDocument = thisComponent
     mesFeuilles = monDocument.Sheets
     'Feuille source qui contient les connées à copier
     feuilleSource = mesFeuilles.getByName("Chef")
     'Zone des cellules à copier
     celluleSource = feuilleSource.getCellRangeByName("F6:F306")
     
     'Désignation de la feuille destination si on veut la désigner
     feuilleDestination = mesFeuilles.getByName("vehicule1")
     'CHOISIR CI DESSUS OU CI DESSOUS EN FONCTION
     'Ou bien je désigne la feuille active à l'écan comme étant la feuille destination
     'feuilleDestination = monDocument.getCurrentController().getActiveSheet() 'Je récupére le nom de la feuille active
     
     'Je désigne la cellule où la copie va commencer
     zoneDestination = feuilleDestination.getCellRangeByName("B10")
     'Là je procéde à la copie
     feuilleDestination.copyRange(zoneDestination.CellAddress, celluleSource.RangeAddress)
    End Sub
    Celle la focntionne pour toute la colonne mais copie le contenu tel quel donc ma formule et non son résultat ... :/

    Je connais la solution sur le principe mais étant débutant en macro je n'arrive pas à mettre en application celle ci.

    Pour la première macro, il faudrait mettre l'égalité en boucle en mettant la référence i dans le nom de la cellule (type : feuille1.a(i).value = feuille2.b(i-4).value) mais rien de ce que j'essaie ne fonctionne

    Pour la seconde, il suffirait de rajouter un .value quelque part mais pareil ça ne fonctionne pas.

    Si possible, j'aimerais une réponse pour chacune des macros, ça me permettrait d'apprendre mais déjà juste une qui fonctionne ça serai super

    Merci d'avance pour le temps que vous allez me consacrer.

  2. #2
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 429
    Points : 58 222
    Points
    58 222
    Billets dans le blog
    11
    Par défaut
    Salut,

    Pour la première pas de problème, voici le code :
    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
    Sub copie_colonne_click
     
      Dim feuilleSource As Object 'Désigne la feuille source
      Dim feuilleDestination As Object 'Désigne la feuille destination
      Dim valeur As String
     
              monDocument = thisComponent
              feuilleSource = monDocument.sheets.getByName("Chef") ' definit la feuille source
              feuilleDestination = monDocument.sheets.getByName("vehicule1") ' définit la feuille de destination
     
              for i = 6 to 306
              	valeur = feuilleSource.getCellRangeByName("F" & i).Value
              	if valeur <> 0 then feuilleDestination.getCellRangeByName("B" & i+4).Value = valeur
    	  next
    End Sub
    Par contre pour la seconde, je ne vois pas, par contre elle devrait ressembler à cela :
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    sub zoom61()
     
    	document   = ThisComponent.Sheets
    	dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
     
    	Feuille = document.getByName("Chef")
    	ThisComponent.CurrentController.ActiveSheet = Feuille
    	document1   = ThisComponent.CurrentController.Frame
    	dim CollageSpecial1(0) as new com.sun.star.beans.PropertyValue
    	CollageSpecial1(0).Name = "ToPoint"
    	CollageSpecial1(0).Value = "$F$6:$F$306"
    	dispatcher.executeDispatch(document1, ".uno:GoToCell", "", 0, CollageSpecial1())
    	dispatcher.executeDispatch(document1, ".uno:Copy", "", 0, Array())
     
    	Feuille = document.getByName("vehicule1")
    	ThisComponent.CurrentController.ActiveSheet = Feuille
    	document1   = ThisComponent.CurrentController.Frame
    	dim CollageSpecial2(0) as new com.sun.star.beans.PropertyValue
    	CollageSpecial2(0).Name = "ToPoint"
    	CollageSpecial2(0).Value = "$B$10"
    	dispatcher.executeDispatch(document1, ".uno:GoToCell", "", 0, CollageSpecial2())
     
    	dim CollageSpecial3(5) as new com.sun.star.beans.PropertyValue
    	CollageSpecial3(0).Name = "Flags"
    	CollageSpecial3(0).Value = "V"
    	CollageSpecial3(1).Name = "FormulaCommand"
    	CollageSpecial3(1).Value = 0
    	CollageSpecial3(2).Name = "SkipEmptyCells"
    	CollageSpecial3(2).Value = false
    	CollageSpecial3(3).Name = "Transpose"
    	CollageSpecial3(3).Value = false
    	CollageSpecial3(4).Name = "AsLink"
    	CollageSpecial3(4).Value = false
    	CollageSpecial3(5).Name = "MoveMode"
    	CollageSpecial3(5).Value = 4
    	Dispatcher.executeDispatch(document1, ".uno:InsertContents", "", 0, CollageSpecial3())
     
    end sub
    @+.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Militaire
    Inscrit en
    Mars 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Militaire

    Informations forums :
    Inscription : Mars 2013
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci beaucoup,

    La première étant plus simple, je l'ai comprise de suite, je travail encore sur la seconde :/

    Mais du coup j'ai une question sur la première : a la place de la condition différent de 0, je voudrais une condition si la case contient quelque chose (dans mon cas 0 est valeur mais les cases vides existe). J'ai fouillé un peu sur le forum et j'ai trouve ça :

    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
    19
    20
    21
    22
    23
    Sub CompteCellule
      Dim Feuille As Object, PlageCellules As Object
      Dim Plages As Object, oEnum As Object, Cellule As Object
      Dim celluleNonVide As Long
     
      'Définit une feuille nommée "Feuille1" dans le classeur
      Feuille = ThisComponent.Sheets.getByName("Chef") 
      'Définit la plage de cellules
      PlageCellules = Feuille.getCellRangeByName("A6:F306")
     
      Plages = ThisComponent.createInstance("com.sun.star.sheet.SheetCellRanges") 
      Plages.insertByName("", PlageCellules)
      oEnum = Plages.Cells.CreateEnumeration 
     
      'Boucle sur la plage
      While oEnum.hasMoreElements 
        'Nota:
        'Ne renvoie rien si la cellule est vide
        Cellule = oEnum.NextElement 
        celluleNonVide = celluleNonVide + 1
      Wend 
      print celluleNonVide & " cellule sont remplies."
    End Sub
    Mais j'arrive pas a remplacé la condition dans la macro :/

  4. #4
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 429
    Points : 58 222
    Points
    58 222
    Billets dans le blog
    11
    Par défaut
    Cela ressemblera à quelque chose comme cela :
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    Sub CompteCellule
    	Dim Feuille As Object, PlageCellules As Object
    	Dim Plages As Object, oEnum As Object, Cellule As Object
    	Dim celluleNonVide As Long
     
    	'Définit une feuille nommée "Feuille1" dans le classeur
    	Feuille = ThisComponent.Sheets.getByName("Chef") 
    	'Définit la plage de cellules
    	PlageCellules = Feuille.getCellRangeByName("F6:F306")
     
    	Plages = ThisComponent.createInstance("com.sun.star.sheet.SheetCellRanges") 
    	Plages.insertByName("", PlageCellules)
    	oEnum = Plages.Cells.CreateEnumeration 
     
    	monDocument = thisComponent	
    	feuilleDestination = monDocument.sheets.getByName("vehicule1") 
     
    	'Boucle sur la plage
    	While oEnum.hasMoreElements 
    		'Nota:
    		'Ne renvoie rien si la cellule est vide
    		Cellule = oEnum.NextElement 
    		Position = Cellule.CellAddress.Row
    		celluleNonVide = celluleNonVide + 1
    		valeur = Cellule.Value
    		feuilleDestination.getCellRangeByName("B" & Position+4).Value = valeur
    	Wend 
    	print celluleNonVide & " cellule sont remplies."
    End Sub
    @+.

Discussions similaires

  1. [XL-2010] supprimer des lignes en fonction de la valeur de la cellule d'une colonne
    Par psylo24 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 28/11/2012, 13h09
  2. [MySQL] Récupérer la valeur de chaque case d'une colonne
    Par Hugo_O dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 02/05/2012, 13h35
  3. Réponses: 0
    Dernier message: 06/06/2011, 13h31
  4. Couleur pour chaque cellule d'une colonne
    Par lo_schil dans le forum Composants
    Réponses: 3
    Dernier message: 03/06/2010, 11h48
  5. Réponses: 1
    Dernier message: 04/08/2007, 18h07

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