problème VBA

mikepers

XLDnaute Occasionnel
Bonsoir le forum.
Je bloque sur un problème de code ( mon niveau est assez moyen, je suis sous 2003 ).
Le sujet: une base de donnée
le problème:
1/une feuille unique qui contient la base de donnée
2/cette base de donnée est renseignée par un seul USF
3/plusieurs autres feuilles de travail.
Mais...
il y a plusieurs feuilles dans le workbook, chacune représentant un module de travail à part.Ormis différentes données, chaque feuille possède un bouton ouvrant l'USF unique ( toutes les feuilles partagent la même base de donnée ).
dans l'USF, un bouton avec le code suivant:


Application.ScreenUpdating = False
Sheets("base").Select
Dim x As Integer
x = Range("A65536").End(xlUp).Row + 1
Range("A" & x) = TextBox10.Value 'insert titre
Range("H" & x) = Format(UserForm1.ComboBox2.Value, "dd-mmm-yyyy") 'insert date
Range("D" & x) = TextBox5.Value 'insert durée
Range("I" & x) = ComboBox3.Value 'insert distrib
Range("J" & x) = TextBox6.Value 'insert notes
Range("K" & x) = TextBox2.Value 'insert stock

Range("E" & x) = CheckBox2.Value 'insert case a cocher VO
Range("F" & x) = CheckBox3.Value 'insert case a cocher TEASE
Range("G" & x) = CheckBox4.Value 'insert case a cocher TEASE VO
If TextBox10.Value = "" Then
MsgBox "Vous devez saisir au moins un titre !"

End If
Sheets("base").Select
Range("A2:M101").Select
Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Range("A2").Select
unload Userform1
userform1.show
application.screenupdating=true
end sub

on remarque que pour insérer les données, je suis obligé à un moment donné de sélectionner la feuille "base".
lors du retour "application.screenupdating=true", je me retrouve donc avec la feuille "base" affichée. comment faire pour que :
peut importe la feuille sur l'aquelle on se trouve, l'USF renseigne la base de donnée lorsqu'on l'appelle, et reviens ensuite sur la feuille de travail en cours...
Pouvez vous me donner une piste??? ( avec "with" peut être, mais je n'arrive pas à formuler...)
un grand merci par avance.
 

dixit

XLDnaute Impliqué
Re : problème VBA

bonsoir,
il doit être possible de remplir une feuille même non sélectionnée en utilisant
le nom de la feuille et les coordonnées de cellule ; exemple
worksheets("nomfeuille" ou n°).cells(1,1)="xxxx"
bye
 

ninbihan

XLDnaute Impliqué
Re : problème VBA

Bonsoir Mikeperse, bonsoir ccpapy, re le forum
edit: bonsoir dixit
A essayer avec un with:


mikepers à dit:
Application.ScreenUpdating = False
with Sheets("base")
Dim x As Integer
x = .Range("A65536").End(xlUp).Row + 1
.Range("A" & x) = TextBox10.Value 'insert titre
.Range("H" & x) = Format(UserForm1.ComboBox2.Value, "dd-mmm-yyyy") 'insert date
.Range("D" & x) = TextBox5.Value 'insert durée
.Range("I" & x) = ComboBox3.Value 'insert distrib
.Range("J" & x) = TextBox6.Value 'insert notes
.Range("K" & x) = TextBox2.Value 'insert stock

.Range("E" & x) = CheckBox2.Value 'insert case a cocher VO
.Range("F" & x) = CheckBox3.Value 'insert case a cocher TEASE
.Range("G" & x) = CheckBox4.Value 'insert case a cocher TEASE VO
If TextBox10.Value = "" Then
MsgBox "Vous devez saisir au moins un titre !"

End If

.Range("A2:M101").Select
Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom

unload Userform1
userform1.show
application.screenupdating=true
end with
end sub

Dis nous,

Bonne soirée,

Ninb
 

ninbihan

XLDnaute Impliqué
Re : problème VBA

Re à tous,

Il y'a encore un select qui pollue la macro lors du tri, je l'avais pas vu celui là,
je ne sais pas si tu as testé mikepers mais je pense que çà bug,
essaie ainsi le tri:
.Range("A2:M101").Sort Key1:=.Range
 

mikepers

XLDnaute Occasionnel
Re : problème VBA

salut ninbihan, ton raisonnement semble juste ( désolé pour le retard, je suis au boulot c'est un peu compliqué ).
Effectivement il restait une sélection sur le tri qui pollue le code.
Là dans l'immédiat je pateauge sur ta formulation de tri.
Je reviens dans 10 minutes, je vais virer le tri, juste pour voir si le code fonctionne...
Un très grand merci à vous tous, à tout de suite
 

mikepers

XLDnaute Occasionnel
Re : problème VBA

très fort ninbihan !!!
le truc semble fonctionner, c'est très interressant tout ça, ( j'ai encore appris ce soir ), on peu envisager la gestion d'une base en contournant les soucis de sélection de feuille !!!- ce qui en plus doit alléger la mémoire de travail d'excel...IL faudrais que j'essaie même sans les "Application.ScreenUpdating" d'ailleur, c'est peut être ok.
SINON POUR MON:

.Range("A2:M101").Select
Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom

j'ai pas très bien saisi ton contournement. Tu mettrais quoi???

Bien à vous, ce forum est une bénédiction...
 

mikepers

XLDnaute Occasionnel
Re : problème VBA

ca marche !!
pour ceux qui ont suivis, voici donc le code final de ninbihan :
______________________________________________________
Private Sub CommandButton3_Click()
'entrée dans la base
Application.ScreenUpdating = False
With Sheets("base")
Dim x As Integer
x = .Range("A65536").End(xlUp).Row + 1
.Range("A" & x) = TextBox10.Value 'insert titre
.Range("H" & x) = Format(UserForm1.ComboBox2.Value, "dd-mmm-yyyy") 'insert date
.Range("D" & x) = TextBox5.Value 'insert durée
.Range("I" & x) = ComboBox3.Value 'insert distrib
.Range("J" & x) = TextBox6.Value 'insert notes
.Range("K" & x) = TextBox2.Value 'insert stock

.Range("E" & x) = CheckBox2.Value 'insert case a cocher VO
.Range("F" & x) = CheckBox3.Value 'insert case a cocher TEASE
.Range("G" & x) = CheckBox4.Value 'insert case a cocher TEASE VO
If TextBox10.Value = "" Then
MsgBox "Vous devez saisir au moins un titre !"


End If
.Range("A2:M101").Sort Key1:=.Range("A2"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom

Unload UserForm1
UserForm1.Show
Application.ScreenUpdating = True
End With

End Sub
______________________________________________________
un très grand merci. Bravo !
 

mikepers

XLDnaute Occasionnel
Re : problème VBA

AAAARRRRG.....
Me voilà re-coincé plus loin sur un bouton destiné à retirer des données avec:

Private Sub CommandButton5_Click()
' Retrait du stock

If MsgBox("Sortir le FA du Stock ?", _
vbYesNo + vbQuestion, "Confirmation") = vbYes Then
End If
Application.ScreenUpdating = False

With Sheets("base")
Dim config As Integer
Dim réponse As Integer
Dim L, i As Integer
L = Sheets("base").Range("A32767").End(xlUp).Row
For i = 2 To L
If Sheets("base").Range("B" & i) = UserForm1.ComboBox1.Value Then
Sheets("base").Range("A" & i).Select
ActiveCell.ClearContents

ActiveCell.Offset(0, 3).ClearContents
'date
ActiveCell.Offset(0, 7).ClearContents
'vide
ActiveCell.Offset(0, 8).ClearContents
'vide
ActiveCell.Offset(0, 9).ClearContents
ActiveCell.Offset(0, 10).ClearContents
'cases à cocher
ActiveCell.Offset(0, 4).Value = False
ActiveCell.Offset(0, 5).Value = False
ActiveCell.Offset(0, 6).Value = False

End If
Next
Sheets("base").Select
Range("A2:M101").Select
Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Range("B14").Select


Unload UserForm1
Load UserForm1
UserForm1.Show

Application.ScreenUpdating = True
End Sub
____________________
ca n'en finira donc jamais....
 

mikepers

XLDnaute Occasionnel
Re : problème VBA

pour le fun, inspiré de ninbihan , j'ai trouvé:
_________________________________________________
Private Sub CommandButton5_Click()
' Retrait du stock

If MsgBox("Sortir le FA du Stock ?", _
vbYesNo + vbQuestion, "Confirmation") = vbYes Then
End If
Application.ScreenUpdating = False

With Sheets("base")
Dim config As Integer
Dim réponse As Integer
Dim L, i As Integer
L = Sheets("base").Range("A32767").End(xlUp).Row
For i = 2 To L
If Sheets("base").Range("B" & i) = UserForm1.ComboBox1.Value Then
.Range("A" & i).ClearContents
.Range("D" & i).ClearContents
.Range("H" & i).ClearContents
.Range("I" & i).ClearContents
.Range("J" & i).ClearContents
.Range("K" & i).ClearContents
'cases à cocher
.Range("E" & i).ClearContents
.Range("F" & i).ClearContents
.Range("G" & i).ClearContents
.Range("A2:M101").Sort Key1:=.Range("A2"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom

End If

Next
End With




Unload UserForm1
Load UserForm1
UserForm1.Show

Application.ScreenUpdating = True
End Sub
_______________________________________
 

Discussions similaires

Réponses
1
Affichages
160

Statistiques des forums

Discussions
312 107
Messages
2 085 358
Membres
102 874
dernier inscrit
Petro2611