Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 18/09/2024, à 17:09

claudius723

Message erreur sur variable en zBasic

Bonjour, après avoir réinstallé Ubuntu, j'ai un message d'erreur dans ma macro (en zBasic), "Erreur d'exécution BASIC '12' Variable non définie. Informations supplémentaire : oPlageCopie; Avant la réinstallation, tout fonctionnait parfaitement, est ce que je dois revenir à une version précédente ?

Sub EnregistrerSaisieAdherents
GlobalScope.BasicLibraries.loadLibrary("zBasic")
   zFeuille.Active= "Interface"
   oPlageCopie = "A4:S4"
   oTableDepart= zPlage.VersTable(oPlageCopie)
   oTableArrive = zTable.SansLigneVide(oTableDepart)
   oPlageColle = "A2:S124"
   nLigne = zPlage.LigneVide("Adherents-2025", oPlageColle)
   zTable.Ecrit("Adherents-2025", "A" & nLigne, oTableArrive)
Call TriAdherents

Cordialement
Claudius723

Hors ligne

#2 Le 27/09/2024, à 07:56

claudius723

Re : Message erreur sur variable en zBasic

Bonjour, je reviens vers vous pour trouver quelqu'un qui connaît zBasic et me dépanner, ou me faire une macro de remplacement en Basic, je suis le trésorier d'une association et toute ma gestion des adhérents fonctionne sous calc avec des macros en zBasic sauf depuis quelques temps, celle qui enregistre les adhérents ne veut plus fonctionner.
Je joints la récalcitrante en question

Sub EnregistrerSaisieAdherents
GlobalScope.BasicLibraries.loadLibrary("zBasic")
Dim sFeuille as variant    
Dim sPlage as variant
     sFeuille = "Copies"
     sPlage = "A4:S4"
     oTableDepart = zPlage.VersTable(sPlage, sFeuille)
     oTableArrive = zTable.SansLigneVide(oTableDepart)
     oPlageColle = "A2:S124"
     nLigne = zPlage.LigneVide( "FAdherents2025" , oPlageColle)
     zTable.Ecrit( "FAdherents2025", "A"  & nLigne, oTableArrive)
End sub

Cordialement
Claudius723

Hors ligne

#3 Le 27/09/2024, à 09:45

Rafbor

Re : Message erreur sur variable en zBasic

Bonjour,
tu pourrais partager un fichier de test (avec des données anonymes) ?
et expliquer ce que doit faire la macro,  je ne connais pas le zBasic.


Xubuntu 22.04 - Mes projets sur Github

En ligne

#4 Le 27/09/2024, à 14:22

claudius723

Re : Message erreur sur variable en zBasic

Je vais essayer de joindre un fichier.
La macro que je voudrais est simple, mais moi en Basic , je n'y connais rien !!
Depuis le menu "Saisie Adhérents", à l'aide de la feuille "Données", je remplie "Interface" et je demande de copier ces données dans la feuille"Adherents à la première ligne vide trouvée. Après je fais un tri, en zBasic qui fonctionne.
Modèle de macro en zBasic :

Sub EnregistrerSaisieAdherents
GlobalScope.BasicLibraries.loadLibrary("zBasic")
     sFeuille = "Interface"
     sPlage = "A4:D4"
     oTableDepart = zPlage.VersTable(sPlage, sFeuille)
     oTableArrive = zTable.SansLigneVide(oTableDepart)
     oPlageColle = "A2:D4"
     nLigne = zPlage.LigneVide( "Adherents" , oPlageColle)
     zTable.Ecrit( "Adherents", "A"  & nLigne, oTableArrive)
End sub 

Question, comment fait on pour joindre un fichier ?


Cordialement
Claudius723

Hors ligne

#5 Le 27/09/2024, à 15:39

Rafbor

Re : Message erreur sur variable en zBasic

Utilise un site de partage de fichiers comme filemail (choisir: envoyer en tant que lien)


Xubuntu 22.04 - Mes projets sur Github

En ligne

#6 Le 27/09/2024, à 16:48

claudius723

Re : Message erreur sur variable en zBasic

https://fromsmash.com/NfGBDytc.H-ct
Je ne sais pas si cela va marcher !


Cordialement
Claudius723

Hors ligne

#7 Le 27/09/2024, à 17:26

Rafbor

Re : Message erreur sur variable en zBasic

J'ai récupéré le fichier.
C'est pas très bien conçu, la clé de recherche dans la 1ère feuille ne devrait pas être une chaîne comme "Mme BRUNETTE  Annick" mais plutôt un Id.
Le formulaire "Saisie" ne permet pas de créer un nouvel adhérent, mais seulement de le récupérer à partir de la feuille "Donnees".
J’imagine que tu t'en sers pour créer la liste des nouveaux adhérents de la saison.

Si je comprends bien, dans la feuille "Saisie" tu choisis à partir de la liste déroulante un des adhérents présents dans la feuille "Donnees" et ça le copie dans la feuille "Interface". Puis tu cliques le bouton "Saisie adherents" et ça copie les données de l'adhérent depuis la feuille "Interface" dans la feuille "Adherents" à la 1ère ligne vide et ça trie le tableau.

Je ne comprends pas l'utilité de la feuille "Interface" et il n'y a pas de contrôle sur un adhérent déjà existant. On peut faire la copie sans passer par la feuille "Interface".
Je vais essayer de faire une macro.


Xubuntu 22.04 - Mes projets sur Github

En ligne

#8 Le 27/09/2024, à 18:58

claudius723

Re : Message erreur sur variable en zBasic

Tu as parfaitement compris, en fait je récupère l'adhérent de l'année passée, s'il continue à cotiser. Je peux aussi saisir un nouvel adhérent par un autre formulaire. C'est vrai que si on peut se passer de l'interface, ce sera formidable, car tu imagine bien que ce n'est pas la seule manipulation que j'ai à faire. Bon courage.


Cordialement
Claudius723

Hors ligne

#9 Le 27/09/2024, à 21:23

Rafbor

Re : Message erreur sur variable en zBasic

Voilà les macros. Plus besoin de la feuille "Interface".
Rien n'est ajouté si l'adhérent existe déjà. Le tableau est trié à la fin.

Dans Module1, efface tout puis copie ceci:

REM  *****  BASIC  *****
option Explicit

Sub EnregistrerSaisieAdherents
	dim oSheetS, oSheetD, oCell as Object
	dim nRowS, nColS, nRowD, nColD as Long
	Dim sNomPrenom As string
	
	'source
	oSheetS = ThisComponent.CurrentController.ActiveSheet
	nRowS = 4		' ligne 5
	nColS = 5		'colonne F
	'destination
	oSheetD = ThisComponent.Sheets.getByName("Adherents")
	nRowD = 1		'ligne 2
	nColD = 0		'colonne A
	
	'cherche si adhérent existe déjà
	While oSheetD.GetCellByPosition(nColD, nRowD).String <> ""
		If oSheetD.GetCellByPosition(nColD, nRowD).String = oSheetS.GetCellByPosition(nColS, nRowS).String Then
			Msgbox "Adhérent existe déjà"
			exit sub
		endif
		nRowD = nRowD + 1
	Wend
	
	'cherche ligne vide
	nRowD = 1		'ligne 2
	While oSheetD.GetCellByPosition(nColD, nRowD).String <> ""
		nRowD = nRowD + 1
	Wend
	'recopie Nom prénom
	oSheetD.GetCellByPosition(nColD, nRowD).String = oSheetS.GetCellByPosition(nColS, nRowS).String
	'recopie Adresse
	oSheetD.GetCellByPosition(nColD + 1, nRowD).String = oSheetS.GetCellByPosition(nColS, nRowS + 2).String
	'recopie Code postal
	oSheetD.GetCellByPosition(nColD + 2, nRowD).String = oSheetS.GetCellByPosition(nColS, nRowS + 4).String
	'recopie Statut
	oSheetD.GetCellByPosition(nColD + 3, nRowD).String = oSheetS.GetCellByPosition(nColS, nRowS + 6).String
	'fin
	Msgbox "Adhérent ajouté"	
	
	'tri
	Tri(nRowD + 1)
End sub

Sub Tri(nRowD As long)
	Dim oSheet
	Dim oRange
	Dim oSortFields(0) as new com.sun.star.util.SortField
	Dim oSortDesc(0) as new com.sun.star.beans.PropertyValue
	oSheet = ThisComponent.Sheets.getByName("Adherents")
	REM Plage à trier
	oRange = oSheet.getCellRangeByName("A2:D"& nRowD)
	REM Tri par la colonne 
	oSortFields(0).Field = 0 ' 1ère colonne de la plage
	oSortFields(0).SortAscending = True
	REM Description du tri
	oSortDesc(0).Name = "SortFields"
	oSortDesc(0).Value = oSortFields()  
	REM Effectuer le tri
	oRange.Sort(oSortDesc())
End Sub

Xubuntu 22.04 - Mes projets sur Github

En ligne

#10 Le 28/09/2024, à 08:56

claudius723

Re : Message erreur sur variable en zBasic

Bonjour Rabfor, ton travail est magnifique, il faut maintenant que j'adapte ces macros à mon application, j'ai 3 formulaires de saisie dans le même genre, avec plusieurs lignes et 2 colonnes, et un formulaire pour un nouvel adherent.

SaisieAdherents2025, 19 cellules sur 2 colonnes
SaisieCarnets (Tombola) , 14 cellules, sur 2 colonnes
SaisieLots (Tombola), 16 cellules, 2 colonnes
SaisieNouvelAdherent, 21 cellules, 2 colonnes

Je dois effacer les données à la fin de l'enregistrement, pour une nouvelle saisie, après le tri.
Je peux aussi compléter s'il manque des données, souvent des n° de Tél.
Où j'interviens pour ces adaptations ?
Je joins une copie du formulaire "SaisieAdherents2025"
https://fromsmash.com/HMkG.Bz5sf-ct


Cordialement
Claudius723

Hors ligne

#11 Le 28/09/2024, à 11:29

Rafbor

Re : Message erreur sur variable en zBasic

Il faut adapter le début de la macro pour renseigner la source et la destination, avec les bonnes lignes et colonnes (regarde les commentaires)
Et ensuite, je comprends pas bien, il manque le fichier SAV-2025 et la macro d'enregistrement est absente... tu récupères les adhérents existants sur la feuille 2024 de ce fichier, et tu mets à jour dans quoi ?
Pas de saisie de nouveaux adhérents via ce formulaire ?


Xubuntu 22.04 - Mes projets sur Github

En ligne

#12 Le 28/09/2024, à 18:39

claudius723

Re : Message erreur sur variable en zBasic

Comme je ne pourrais jamais expliquer comment j'ai construit cette usine à gaz, je préfère t'envoyer le fichier complet, (sans données) comme cela tu auras une idée de ce que je souhaite faire.
Tu vas sûrement trouver des anomalies, et u vas me le dire pour que je corrige, si cela te convient.
Je te souhaite une bonne soirée, ainsi qu'une bonne lecture.

https://fromsmash.com/FhsQANq3Bp-ct


Cordialement
Claudius723

Hors ligne

#13 Le 29/09/2024, à 09:14

Rafbor

Re : Message erreur sur variable en zBasic

Bon Claudius, comme tu l'as dit, c'est une usine à gaz...
Je vais pas y passer trop de temps alors je vais juste te mettre au point la macro pour la "Saisie Adhérent 2025", dès que j'ai un moment.

A mon avis, vu que zBasic fonctionnait avant ta réinstallation d'Ubuntu, tu devrais demander de l'aide dans le forum OpenOffice/LibreOffice, ils t'ont déjà aidé par le passé, et il y a là-bas le créateur de l'extension zBasic, il pourront te guider pour le faire fonctionner à nouveau.


Xubuntu 22.04 - Mes projets sur Github

En ligne

#14 Le 29/09/2024, à 09:38

claudius723

Re : Message erreur sur variable en zBasic

Je te remercie d'y consacrer un peu de ton temps, avec la macro Saisie Adhérents je me débrouillerais, pour adapter le reste. Je ne suis plus admis dans le forum OpenOffice, il parait que je posais trop de questions !!
En fait, je ne veux pas être trop désagréable, mais ils ne sont pas très coopératifs, c'est un avis personnel !!


Cordialement
Claudius723

Hors ligne

#15 Le 30/09/2024, à 16:12

Dude

Re : Message erreur sur variable en zBasic

claudius723 a écrit :

Je ne suis plus admis dans le forum OpenOffice, il parait que je posais trop de questions !!

Tu as vu ça où que tu n'étais plus admis ?
C'est surtout que tu postes et que tu ne donnes aucune suite quand on te fait des réponses :
https://forum.openoffice.org/fr/forum/v … hp?t=68934

Hors ligne

#16 Le 30/09/2024, à 18:40

claudius723

Re : Message erreur sur variable en zBasic

Bonjour, c'est sans aucun doute vrai, je viens encore un fois d'essayer de me connecter, mais je n'ai plus de mot de passe , perdu lors d'une réinstallation d'Ubuntu. Alors rien! !, j'ai contacté un administrateur, comme il est conseillé.


Cordialement
Claudius723

Hors ligne

#17 Le 30/09/2024, à 20:28

Rafbor

Re : Message erreur sur variable en zBasic

Claudius, voici les 2 macros pour la saisie des adhérents 2025, c'est plus compréhensible, tu devrais pouvoir les adapter facilement ailleurs

Sub EnregistrerSaisieAdherents
	dim oSheetS, oSheetD, oCell as Object
	dim nRowD as Long
	Dim sRowD As string
	
    'source
    oSheetS = ThisComponent.CurrentController.ActiveSheet
  	
  	'destination  
    oSheetD = ThisComponent.Sheets.getByName("Adherents2025")		
	nRowD = 1			'ligne 2

	'cherche si adhérent existe déjà
	While oSheetD.GetCellByPosition(0, nRowD).String <> ""
		If oSheetD.GetCellByPosition(0, nRowD).String = oSheetS.getCellRangeByName("C5").String Then
			Msgbox "Adhérent existe déjà"
			exit sub
		endif
		nRowD = nRowD + 1
	Wend
	
	'cherche ligne vide
	nRowD = 1		'ligne 2
	While oSheetD.GetCellByPosition(0, nRowD).String <> ""
		nRowD = nRowD + 1
	Wend
	sRowD = CStr(nRowD + 1)	'transforme le n° de ligne en chaine, en incrémentant car pour la ligne 1, l'index est 0
	'recopie Nom prénom
	oSheetD.getCellRangeByName("A" & sRowD).String = oSheetS.getCellRangeByName("C5").String
	'recopie Adresse
	oSheetD.getCellRangeByName("B" & sRowD).String = oSheetS.getCellRangeByName("C7").String
	'recopie Code postal
	oSheetD.getCellRangeByName("C" & sRowD).String = oSheetS.getCellRangeByName("C9").String
	'recopie Statut
	oSheetD.getCellRangeByName("D" & sRowD).String = oSheetS.getCellRangeByName("C11").String
    'recopie E-mail
	oSheetD.getCellRangeByName("E" & sRowD).String = oSheetS.getCellRangeByName("C13").String
    'recopie Tél.fixe
    oSheetD.getCellRangeByName("F" & sRowD).String = oSheetS.getCellRangeByName("C15").String
    'recopie Tél.port
    oSheetD.getCellRangeByName("G" & sRowD).String = oSheetS.getCellRangeByName("C17").String
    'recopie Fonction
    oSheetD.getCellRangeByName("H" & sRowD).String = oSheetS.getCellRangeByName("C19").String
    'recopie Section
    oSheetD.getCellRangeByName("I" & sRowD).String = oSheetS.getCellRangeByName("C21").String
    'recopie Date naissance
    oSheetD.getCellRangeByName("R" & sRowD).String = oSheetS.getCellRangeByName("C23").String
    'recopie Age
    oSheetD.getCellRangeByName("S" & sRowD).String = oSheetS.getCellRangeByName("C25").String
    'recopie Cotisation
    oSheetD.getCellRangeByName("J" & sRowD).String = oSheetS.getCellRangeByName("O5").String
    'recopie Nombre carnets
    oSheetD.getCellRangeByName("K" & sRowD).String = oSheetS.getCellRangeByName("O9").String
    'recopie Dons
    oSheetD.getCellRangeByName("L" & sRowD).String = oSheetS.getCellRangeByName("O11").String
    'recopie Revue
    oSheetD.getCellRangeByName("M" & sRowD).String = oSheetS.getCellRangeByName("O14").String    
    'recopie Total Tombola
    oSheetD.getCellRangeByName("N" & sRowD).String = oSheetS.getCellRangeByName("O17").String
    'recopie Total général
    oSheetD.getCellRangeByName("O" & sRowD).String = oSheetS.getCellRangeByName("O20").String
    'recopie Réglement
    oSheetD.getCellRangeByName("P" & sRowD).String = oSheetS.getCellRangeByName("O23").String
    'recopie Date cotisation
    oSheetD.getCellRangeByName("Q" & sRowD).String = oSheetS.getCellRangeByName("O26").String
	'tri
	Tri("Adherents2025", "A2:S"& sRowD)
	Msgbox "Adhérent ajouté"
End sub

Sub Tri(sNomFeuille As string, sPlage As string)
	Dim oSheet
	Dim oRange
	Dim oSortFields(0) as new com.sun.star.util.SortField
	Dim oSortDesc(0) as new com.sun.star.beans.PropertyValue
	oSheet = ThisComponent.Sheets.getByName(sNomFeuille)
	REM Plage à trier
	oRange = oSheet.getCellRangeByName(sPlage)
	REM Tri par la colonne 
	oSortFields(0).Field = 0 ' 1ère colonne de la plage
	oSortFields(0).SortAscending = True
	REM Description du tri
	oSortDesc(0).Name = "SortFields"
	oSortDesc(0).Value = oSortFields()  
	REM Effectuer le tri
	oRange.Sort(oSortDesc())
End Sub

Dernière modification par Rafbor (Le 01/10/2024, à 07:47)


Xubuntu 22.04 - Mes projets sur Github

En ligne

#18 Le 01/10/2024, à 11:29

claudius723

Re : Message erreur sur variable en zBasic

Merci pour la macro, je l'ai adaptée à mes formulaires et ça marche super. J'ai encore 2 requêtes à te soumettre, te serait il possible de me faire un filtre sur "Adherents2025", pour récupérer les adhérents qui ont souscrits à la tombola, par exemple sur la colonne 11 et récupérer les données partielles dans la feuille "LiaisonTombola" ?
Autre question, récupérer le résultat "ChercheOccurences" dans la cellule Q16 de la feuille "SaisieLots", après un clic sur le bouton "N° gagnant", de la même feuille.
Je te remercie d'avance, et te souhaite une bonne journée.


Cordialement
Claudius723

Hors ligne

#19 Le 01/10/2024, à 20:26

Rafbor

Re : Message erreur sur variable en zBasic

Je comprends pas bien ce qu'il faut faire. Je te laisse faire pour le filtre.
Je veux bien regarder pour la macro "ChercheOccurences" que je t'ai écrite dans l'autre sujet, mais rien ne correspond à ce que tu avais expliqué...


Xubuntu 22.04 - Mes projets sur Github

En ligne