Bonjour à tous
je ne suis pas expert loin de là en VBA mais j’aime bien l’outil
j’ai écrit un bout de code avec différents morceaux de macro pour avoir une numérotation auto de mes pièces
je mémorise le compteur dans une cellule d’un fichier Excel que je copie, que j’incrémente et que je colle dans le presse-papier
techniquement cela fonctionne
mais le temps d’exécution est plutôt long, car j’ouvre le fichier Excel, j’écris, je sauve et je le referme
je me posais la question s’il n’y avait pas possibilité de stocker la valeur de mon compteur ailleurs pour que ce soit plus rapide
en cherchant sur le net, j’ai vu que l’on pouvait stocker des infos dans un fichier ini mais le code ne fonctionne pas avec Solidworks
avez-vous des idées pour stoker la valeur de mon compteur (4 caractères 1234)
je me posais la question s’il n’y avait pas moyen de stocker ce compteur dans le fichier macro .swp directement
qu’en pensez vous
merci
JC.
Pour info le compteur Smartproperties de Visiativ utulise le xml.
Voici un exemple pour stocké les option d’un userform (checkbox)
Pour cela dans référence cocher Microsoft XML, v3,0 (version suivant office)
Code du main:
sPathXML = Environ("USERPROFILE") & "\.SaveMacroSldworks\"
sPathNameXML = sPathXML & nomfichierXML
Debug.Print sPathXML & nomfichierXML
'On vérifie si le dossier de sauvegarde existe sinon création de ce dossier
If Dir(sPathXML, vbDirectory + vbHidden) = "" Then
Debug.Print "Création du dossier: " & sPathXML
MkDir sPathXML
End If
FichierXml = sPathXML & nomfichierXML
Debug.Print "Fichier xml:" & FichierXml
Pour le créer depuis la macro la fonction:
Sub CreationCompleteXML() 'Création du fichier xml de sauvegardes des paramètres du menu options
Dim oXML As Object
Dim oNode As Object
Dim root As Object
Dim elem As Object
Dim rel As Object
Set oXML = New MSXML2.DOMDocument
Set oNode = oXML.createProcessingInstruction("xml", "version=""1.0"" encoding=""ISO-8859-1""")
oXML.appendChild oNode
With oXML.appendChild(oXML.createElement("OPTIONS"))
.appendChild oXML.createTextNode(vbCrLf)
.appendChild oXML.createTextNode(vbTab)
With .appendChild(oXML.createElement("CheckBoxLectureSeule"))
.Text = IIf(UserformOptionsMacro.CheckBoxLectureSeule.Value = 0, "False", "True")
End With
.appendChild oXML.createTextNode(vbCrLf)
.appendChild oXML.createTextNode(vbCrLf)
.appendChild oXML.createTextNode(vbTab)
With .appendChild(oXML.createElement("CheckBoxCacherPièce"))
.Text = IIf(UserformOptionsMacro.CheckBoxCacherPièce.Value = 0, "False", "True")
End With
.appendChild oXML.createTextNode(vbCrLf)
.appendChild oXML.createTextNode(vbTab)
With .appendChild(oXML.createElement("CheckBoxCacherPlan"))
.Text = IIf(UserformOptionsMacro.CheckBoxCacherPlan.Value = 0, "False", "True")
End With
.appendChild oXML.createTextNode(vbCrLf)
.appendChild oXML.createTextNode(vbTab)
With .appendChild(oXML.createElement("CheckBoxDesignation"))
.Text = IIf(UserformOptionsMacro.CheckBoxDesignation.Value = 0, "False", "True")
End With
.appendChild oXML.createTextNode(vbCrLf)
.appendChild oXML.createTextNode(vbTab)
With .appendChild(oXML.createElement("CheckBoxCouleur"))
.Text = IIf(UserformOptionsMacro.CheckBoxCouleur.Value = 0, "False", "True")
End With
.appendChild oXML.createTextNode(vbCrLf)
.appendChild oXML.createTextNode(vbTab)
With .appendChild(oXML.createElement("CheckBoxRevision"))
.Text = IIf(UserformOptionsMacro.CheckBoxRevision.Value = 0, "False", "True")
End With
.appendChild oXML.createTextNode(vbCrLf)
End With
oXML.Save FichierXml
End Sub
Mon userform pour récupérer les options stockés dans le fichier xml
'Initialisation du formulaire
Private Sub UserForm_Initialize()
'position du userform par rapport à la fenêtre (1= centré/fenêtre 2= centré écran, 3=angle en haut à gauche)
'Me.StartUpPosition = 0
Me.StartUpPosition = 2 - CenterScreen
'UserformOptionsMacro.Left = Activewindow.Left + Activewindow.Width / 2 - UserformOptionsMacro.Width / 2
'initialisation du userform
CommandButtonExec.SetFocus
'On parcours le fichier xml pour récupérer les valeures sauvegardées.
Debug.Print "Fichier xml:" & FichierXml
If Dir(FichierXml) = "" Then
Debug.Print "Pas de fichier xml trouvé -> les valeures par défaut seront sélectionnées"
CheckBoxLectureSeule = True
CheckBoxCouleur = True
CheckBoxDesignation = True
CheckBoxCacherPlan = True
CheckBoxCacherPièce = True
CheckBoxRevision = False
Else
Debug.Print "Fichier xml trouvé -> les valeures sauvegardées seront sélectionnées"
Dim oXML As MSXML2.DOMDocument
Dim oNode As MSXML2.IXMLDOMNode
Set oXML = New MSXML2.DOMDocument
oXML.async = False
oXML.Load FichierXml
For Each oNode In oXML.documentElement.childNodes
For Each osubnode In oNode.childNodes
Debug.Print " - " & oNode.baseName, "=" & osubnode.Text
If oNode.baseName = "CheckBoxLectureSeule" Then CheckBoxLectureSeule = osubnode.Text
If oNode.baseName = "CheckBoxCouleur" Then CheckBoxCouleur = osubnode.Text
If oNode.baseName = "CheckBoxDesignation" Then CheckBoxDesignation = osubnode.Text
If oNode.baseName = "CheckBoxCacherPlan" Then CheckBoxCacherPlan = osubnode.Text
If oNode.baseName = "CheckBoxCacherPièce" Then CheckBoxCacherPièce = osubnode.Text
If oNode.baseName = "CheckBoxRevision" Then CheckBoxRevision = osubnode.Text
Next
Next
End If
End Sub
Code à adapter à ton besoin,
Au niveau rapidité on ne s’aperçoit pas de l’écriture / lecture.
Super merci, je vais me pencher dessus, je vous tiens informé
JC
Bonjour, et bienvenue.
Ton but est de pouvoir retrouver l’état de ton compteur après avoir par exemple éteint l’ordi et reprendre 3 jours plus tard ? Ou simplement le temps d’une session ? Ou autre ?
Selon le besoin, il me semble qu’un objet Collection déclaré doit être dé-déclaré après utilisation sinon il reste en mémoire, alors je me dis que peut-être que la collection conserve également ses valeurs. Je n’ai jamais fait le test.
Ou bien encore partager un compteur à plusieurs? (fichier xml sur réseau)
Bonsoir, oui, je souhaite partager le compteur et oui, il faut que cela reste en mémoire après extinction de l’ordi
pour ma culture, qu’est-ce qu’un objet collection ?
merci
Pour l’objet collection :
Mais une fois SW éteint pour moi la collection disparait et l’objet collection serait différent sur chaque poste.
Le plus approprié à ton besoin me semble le Xml comme Visiativ pour leur compteur de pièce que l’on utilisait à 15-20 poste sans jamais avoir eu de soucis.
Maintenant on est passé sur la version SQL pour pouvoir obtenir un numéro même en télétravail.
Pour info, le site à partir duquel j’avais extrait le code pour le fichier Xml:
J’avais ensuite adapté le code prévu pour office grâce à ce forum et un spécialiste en vba.