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 !
La modération vous a écrit: Pour la bonne tenue de ce forum, veillez à respecter la syntaxe des balises (première lettre en majuscule puis le reste en minuscules, le tout entre crochets). [Calc] et non [CALC]. Nous l'avons fait pour vous.
Bonjour à tous.
Mon expérience en matière de macro et de langage basic date de ce matin. Je suis dans les tutos depuis mais je rame sévère et ne suis pas sur de bien tout comprendre.
Je cherche à copier plusieurs fois une feuille à partir d'une liste. C'est à dire créer automatiquement de nouvelles feuilles identiques à celle intitulée Évaluation. Une pour chaque nom et ces feuilles portant ce nom comme titre ( et si possible reporté dans la cellule B35 ).
Il y a bien le post de seabs et de la réponse de alhazred :
Sub CopierEvaluation()
Dim monDoc as Object, mesFeuilles as Object, maFeuille as Object
Dim NomFeuilleDest as String, row%
monDoc = thisComponent
mesFeuilles = monDoc.Sheets
maFeuille = mesFeuilles.getByName("Liste")
row = 0
Do
row = row + 1
'Récupère le nom du nouvel onglet
NomFeuilleDest = maFeuille.GetCellRangeByName("A"&row).string
If NomFeuilleDest = "" Then Exit Do 'arrêt sur cellule vide
'test sur l'existence de ce nouvel onglet
If mesFeuilles.hasByName(NomFeuilleDest) Then
if msgbox("La feuille " & NomFeuilleDest & " figure déjà dans le classeur " & chr(13) & "Voulez-vous la supprimer" , 36) = 6 then
mesFeuilles.removeByName(NomFeuilleDest)
else
msgbox "suppression annulée"
End if
Else
' Copie de la feuille Évaluation vers nouvelle feuille
mesFeuilles.copyByName("Évaluation",NomFeuilleDest,mesFeuilles.Count)
' On écrit le nom dans la cellule B35 de la nouvelle feuille
mesFeuilles.getByName(NomFeuilleDest).getCellRangeByName("B35").setString(NomFeuilleDest)
End If
Loop
End Sub
EDIT : Je viens de m'apercevoir que dans ta feuille d'évaluation les noms et prénoms sont séparés (B35 et B36).
pour remplir les deux cellules, il faut "éclater" les noms dans la liste comme ceci par exemple :
Dim NomPrenom(1)
NomPrenom = Split(NomFeuilleDest," ")
' On écrit le nom dans la cellule B35 de la nouvelle feuille
mesFeuilles.getByName(NomFeuilleDest).getCellRangeByName("B35").setString(NomPrenom(0))
' On écrit le prénom dans la cellule B36 de la nouvelle feuille
mesFeuilles.getByName(NomFeuilleDest).getCellRangeByName("B36").setString(NomPrenom(1))
Ami calmant, J.P
LibreOffice 7.6.2.1 et OpenOffice 4.1.15 sous windows 11
LibreOffice 24.2.0 et OpenOffice 4.1.15 sous Ubuntu 20.04
Merci pour la réponse ultra-rapide et ultra efficace.
Il me reste pas mal de chemin à parcourir avant d'écrire mes premières macros. Ça a l'air simple quand tu l'expliques mais je ne comprends pas encore comment ça marche. Pas grave, je continue les tutos et les exercices pour y arriver.
EDIT : Je viens de m'apercevoir que dans ta feuille d'évaluation les noms et prénoms sont séparés (B35 et B36)
Effectivement je n'ai pas pensé à ça. C'est un détail mais ça sera plus propre.
Je n'ai pas réussi à l'intégrer dans la première macro. Après diverses tentatives variées j'ai toujours le retour : erreur de syntaxe BASIC.
Sinon pas de soucis, ça marche impeccable. Seul petit souci étrange les références de la colonne A ont glissé de feuille.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.