Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.
Modérateur :Vilains modOOs
Règles du forum Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
J'ai créé un fichier grâce à votre aide il y a un peu plus d'1 an. Après plus d'une année d'utilisation, j'aimerais apporter 2 modifications (je vais ouvrir 2 sujets) et j'ai donc encore besoin de vous.
J'aimerais modifier la macro pour que celle-ci fonctionne même quand les lignes ne sont pas contigues. Car certains de mes collègues font dans l'originalité en laissant des lignes vides
REM ***** BASIC *****
Option Explicit
Sub Main
Dim oSheets As Object
Dim oSource As Object
Dim oCible As Object
Dim codesS As Object
Dim codesC As Object
Dim codeS As Object
Dim codeC As Object
Dim apurement As String
Dim x As Long
oSheets = Thiscomponent.Sheets
oSource = oSheets.GetByName("Traitement par lots")
oCible = oSheets.GetByName("Suivi")
codesS = oSource.Columns.GetByName("A").queryContentCells(1).Data
codesC = oCible.Columns.GetByName("A").queryContentCells(1).Data
apurement = oSource.GetCellRangeByName("H5").String
For Each codeC in codesC
For Each codeS in codesS
if codeS(0) = codeC(0) then
'Sans effacer les informations déjà dans les cellules
'if oCible.GetCellByPosition(10,2+x).String = "" Then
oCible.GetCellByPosition(10,2+x).SetString(apurement)
'end if
end if
next codeS
x = x+1
next codeC
msgBox "Traitement par lots terminé (apurement)"
End Sub
D'avance merci pour votre aide
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par Toto99 le 05 nov. 2023 21:11, modifié 1 fois.
LibreOffice 6.4 (sans possibilité de mise à jour) / Windows 10
Toto99 a écrit : ↑04 nov. 2023 13:12
certains de mes collègues font dans l'originalité en laissant des lignes vides
Il y aurait-il un inconvénient à ce que le code en question, au lieu de jongler avec les cellules vides, se charge plus simplement de les supprimer avant d'effectuer le traitement. Le second avantage serait d'avoir un fichier toujours "propre" après traitement, le premier étant la simplicité du traitement. On pourrait même s'assurer, lors du remplissage de la colonne A, au moment de l’insertion automatique de la date, que nous sommes bien positionnés sur la première ligne vide ?
Pourquoi utiliser queryContentCells dans ce cas ?
Déterminez la plage de cellules pour prendre toutes les lignes.
Faites un test quand il y a plus de trois lignes vides afin de sortir de la boucle.
Malheureusement zeguedon quand 20 personnes travaillent sur le même fichier, il y a presque 20 comportements de saisies différents. Certains laissent des lignes vides qui sont comblées par d'autres mais aussi certains complètent toutes les informations sans le remplissage de la colonne A (qu'ils font à postériori). Bref c'est l'enfer, et la solution ne me parait pas adaptée à mon usage.
Pour répondre à Dolev, je ne sais pas car ce n'est pas moi qui ai programmé ce code. Je ne sais pas le lire ou le modifier. J'arrive à comprendre vaguement une macro pour pouvoir l'adapter à un autre fichier mais c'est tout.
LibreOffice 6.4 (sans possibilité de mise à jour) / Windows 10
Toto99 a écrit : ↑05 nov. 2023 15:30
quand 20 personnes travaillent sur le même fichier, [...] et la solution ne me parait pas adaptée à mon usage.
Effectivement, un tableur n'est certainement pas destiné à faire de l'accés concurrentiel.
Si tu cherches à faire du contrôle de saisie, il faut passer par des formulaires.
Et plutôt que Calc, utiliser le module Base adapté à cet usage(*).