pb userform

zumye

XLDnaute Occasionnel
bonjour le forum

j'ai un soucis de memoire a cause d'une userform
quand cette userform s'ouvre je colle dans celle ci des informations autocad,
dans le vba je met ensuite unload... pour decharger, donc la premiere fois tout marche bien et quand je reessai une deuxieme fois je ne peux plus rien coller dans l'userform et j'ai un message qui fini par me dire qu'il y a plus de mémoire
quelq'un a t il une idée?

merci
 
C

Compte Supprimé 979

Guest
Re : pb userform

Bonjour Zumye,

Cela ce produit souvent quand on utilise des variables objet et que l'on oublie de les vider.

Set MonObjet = ...
...
Set MonObjet = Nothing

Il faudrait que tu nous mettes le code que tu utilises :confused:

A+
 

zumye

XLDnaute Occasionnel
Re : pb userform

bonjour bruno

dans mon userform il ya :

Private Sub lg_Change()
ActiveSheet.Range("ga1000") = lg.Value
Unload longueur
End Sub


et mon vba a part est:
Sub lg()
Application.ScreenUpdating = False
If Range("AV3") <> "Sib" Then Exit Sub
On Error GoTo fini
longueur.Show

If ActiveSheet.Range("ga1000") = "" Then GoTo non

Dim textega1 As String, lignesTab, tmpStr As String, i As Integer, curCell As Range

textega1 = ActiveSheet.Range("ga1000").Value
Set curCell = ActiveSheet.Range("ga1001")

lignesTab = Split(textega1, Chr(10))
For i = LBound(lignesTab) To UBound(lignesTab)
If InStr(lignesTab(i), "Longueur actuelle: ") Then
tmpStr = Right(lignesTab(i), Len(lignesTab(i)) - Len("Longueur actuelle: "))
If InStr(tmpStr, ",") Then tmpStr = Mid(tmpStr, 1, InStr(tmpStr, ",") - 1)
curCell.Value = tmpStr
Set curCell = curCell.Offset(1, 0)

End If
Next i
Unload longueur

ActiveSheet.Range("ga1000") = ""
'lg.Value = ""


'ActiveSheet.Range("ga10000").Select
' ActiveSheet.Range(Selection, Selection.End(xlUp)).Select
' derniere = ActiveCell.Row

lgs = 19
For ligne = 1001 To 20000
If ActiveSheet.Range("ga" & ligne) = "" Then Exit For
Range("aj" & lgs) = ActiveSheet.Range("ga" & ligne)


For rep = 1 To 120
If Range("h" & lgs + rep) <> "" And Range("h" & lgs + rep).Rows.Hidden = False Then
lgs = lgs + rep
Exit For
End If
Next rep

Next ligne
non:
GoTo saut
fini:
MsgBox "ERREUR"
saut:
ActiveSheet.Range("ga1000:ga20000") = ""
ActiveSheet.Range("ga10000:ga12000") = ""
ActiveWindow.ScrollColumn = 1
ActiveWindow.ScrollRow = 1
ActiveSheet.Range("i4").Select

End Sub


merci
 
C

Compte Supprimé 979

Guest
Re : pb userform

Re,

Je comprends mieux le "lg.value" ;)

PS : petit conseil en passant, penses à mettre un sufixe devant le nom de tes controles (TextBox = Tb, ComboBox = Cb, etc ...)

Pour Lg ce serait : TbLg

Sinon pour le code, tu peux essayer
Code:
Sub lg()
  Dim textega1 As String, lignesTab, tmpStr As String, i As Integer, curCell As Range
  
  Application.ScreenUpdating = False
  
  If Range("AV3") <> "Sib" Then Exit Sub
  On Error GoTo fini
  
  longueur.Show
  If ActiveSheet.Range("ga1000") = "" Then GoTo non
  textega1 = ActiveSheet.Range("ga1000").Value
  Set curCell = ActiveSheet.Range("ga1001")
  lignesTab = Split(textega1, Chr(10))
  For i = LBound(lignesTab) To UBound(lignesTab)
    If InStr(lignesTab(i), "Longueur actuelle: ") Then
      tmpStr = Right(lignesTab(i), Len(lignesTab(i)) - Len("Longueur actuelle: "))
      If InStr(tmpStr, ",") Then tmpStr = Mid(tmpStr, 1, InStr(tmpStr, ",") - 1)
      curCell.Value = tmpStr
      Set curCell = curCell.Offset(1, 0)
    End If
  Next i
  'Unload longueur = DEJA FAIT
  ActiveSheet.Range("ga1000") = ""
  'lg.Value = ""
  'ActiveSheet.Range("ga10000").Select
  ' ActiveSheet.Range(Selection, Selection.End(xlUp)).Select
  '  derniere = ActiveCell.Row
  lgs = 19
  For ligne = 1001 To 20000
    If ActiveSheet.Range("ga" & ligne) = "" Then Exit For
    Range("aj" & lgs) = ActiveSheet.Range("ga" & ligne)
    For rep = 1 To 120
      If Range("h" & lgs + rep) <> "" And Range("h" & lgs + rep).Rows.Hidden = False Then
        lgs = lgs + rep
        Exit For
      End If
    Next rep
  Next ligne
non:
  GoTo saut
  
fini:
  MsgBox "ERREUR"
  
saut:
  [B][COLOR=blue]Set curCell = Nothing
[/COLOR][/B]  ActiveSheet.Range("ga1000:ga20000") = ""
  ActiveSheet.Range("ga10000:ga12000") = ""
  ActiveWindow.ScrollColumn = 1
  ActiveWindow.ScrollRow = 1
  ActiveSheet.Range("i4").Select
End Sub

J'ai juste ajouté le vidage de la variable Objet ;)

A+
 

zumye

XLDnaute Occasionnel
Re : pb userform

bonjour le forum
mon userform apparait quand j'appui sur un bouton de barre d'outil que j'ai crée que j'ai crée : Set btn21 = .Controls.Add(msoControlButton)
With btn21
.Caption = "INSERER LONGUEURS"
.FaceId = 50
.OnAction = "programme2.xls!LG"
.BeginGroup = True

End With

donc quand j'appui sur ce bouton mon ma sub lg() se met en route:

Sub lg()
Dim textega1 As String, lignesTab, tmpStr As String, i As Integer, curCell As Range

Application.ScreenUpdating = False

If Range("AV3") <> "Sib" Then Exit Sub
On Error GoTo fini

longueur.Show
If ActiveSheet.Range("ga1000") = "" Then GoTo non
textega1 = ActiveSheet.Range("ga1000").Value
Set curCell = ActiveSheet.Range("ga1001")
lignesTab = Split(textega1, Chr(10))
For i = LBound(lignesTab) To UBound(lignesTab)
If InStr(lignesTab(i), "Longueur actuelle: ") Then
tmpStr = Right(lignesTab(i), Len(lignesTab(i)) - Len("Longueur actuelle: "))
If InStr(tmpStr, ",") Then tmpStr = Mid(tmpStr, 1, InStr(tmpStr, ",") - 1)
curCell.Value = tmpStr
Set curCell = curCell.Offset(1, 0)
End If
Next i
'Unload longueur = DEJA FAIT
ActiveSheet.Range("ga1000") = ""
'lg.Value = ""
'ActiveSheet.Range("ga10000").Select
' ActiveSheet.Range(Selection, Selection.End(xlUp)).Select
' derniere = ActiveCell.Row
lgs = 19
For ligne = 1001 To 20000
If ActiveSheet.Range("ga" & ligne) = "" Then Exit For
Range("aj" & lgs) = ActiveSheet.Range("ga" & ligne)
For rep = 1 To 120
If Range("h" & lgs + rep) <> "" And Range("h" & lgs + rep).Rows.Hidden = False Then
lgs = lgs + rep
Exit For
End If
Next rep
Next ligne
non:
GoTo saut

fini:
MsgBox "ERREUR"

saut:
Set curCell = Nothing
ActiveSheet.Range("ga1000:ga20000") = ""
ActiveSheet.Range("ga10000:ga12000") = ""
ActiveWindow.ScrollColumn = 1
ActiveWindow.ScrollRow = 1
ActiveSheet.Range("i4").Select

End Sub


dans l'execution de la sub lg on appelle l'userfor longeur.show

mon user s'affiche et je colle ctrl+v mes resultats:
Sélectionnez un objet ou [DIfférence/Pourcentage/TOtal/DYnamique]:
Longueur actuelle: 3.69, angle décrit: 72
Sélectionnez un objet ou [DIfférence/Pourcentage/TOtal/DYnamique]:
Longueur actuelle: 2.22, angle décrit: 33
Sélectionnez un objet ou [DIfférence/Pourcentage/TOtal/DYnamique]:
Longueur actuelle: 2.92, angle décrit: 73
Sélectionnez un objet ou [DIfférence/Pourcentage/TOtal/DYnamique]:
Longueur actuelle: 3.00, angle décrit: 79
Sélectionnez un objet ou [DIfférence/Pourcentage/TOtal/DYnamique]:
Longueur actuelle: 2.70, angle décrit: 78
Sélectionnez un objet ou [DIfférence/Pourcentage/TOtal/DYnamique]:
Longueur actuelle: 1.62, angle décrit: 62
Sélectionnez un objet ou [DIfférence/Pourcentage/TOtal/DYnamique]:
Longueur actuelle: 6.02, angle décrit: 84
Sélectionnez un objet ou [DIfférence/Pourcentage/TOtal/DYnamique]:
Longueur actuelle: 2.44, angle décrit: 53
Sélectionnez un objet ou [DIfférence/Pourcentage/TOtal/DYnamique]:
Longueur actuelle: 2.22, angle décrit: 33

ensuite le fait d'avoir coller créer un changement detecter par la private sub qui suit et lance
Private Sub lg_Change()
ActiveSheet.Range("ga1000") = TBlg.Value
'longueur.TBlg.Value=""
Unload longueur
End Sub


donc tout marche bien entre 1 et4 essais ensuite plus possible de coller, memoire pleine, j'ai essai 'longueur.TBlg.Value="" donc ca efface aussitot se que j'ai coller mais ensuite c'est le presse papier qui est plein. quand je dis memoir pleine je peux meme plus copier un mot du vba( affiche memoir pleine).

merci s'il y a une solution
 

Discussions similaires

Statistiques des forums

Discussions
312 327
Messages
2 087 314
Membres
103 513
dernier inscrit
adel.01.01.80.19