cs_dominic67
Messages postés6Date d'inscriptionjeudi 17 février 2005StatutMembreDernière intervention19 juin 2005
-
24 avril 2005 à 13:42
valtrase
Messages postés937Date d'inscriptionlundi 19 janvier 2004StatutMembreDernière intervention 9 mai 2022
-
24 avril 2005 à 19:26
Bonjour
Je suis novice en Visual Basic, je cherche une fonction ou une macro me permettant de teste un groupe de cellules qui sont renseignées au fur et a mesure. Et qui lorsque celle ci sont remplies, on passe automatiquement à la ligne du dessous tout en sauvegardant le fichier, un peu comme une base de données.
cs_dominic67
Messages postés6Date d'inscriptionjeudi 17 février 2005StatutMembreDernière intervention19 juin 2005 24 avril 2005 à 17:38
Bonjour
J'utilise justement Userform et textbox ( dont la valeur est mise dans une cellule ). La page excel est justement verouillée afin de ne pas efface les differentes infos. Le programme est concu pour une utilisation professionnelle et il y a justement des personnes qui ne maitrisent pas trop l'informatique.
Merci pour votre aide
jpleroisse
Messages postés1788Date d'inscriptionmardi 7 novembre 2000StatutMembreDernière intervention11 mars 200627 24 avril 2005 à 18:14
Voici un exemple de code.
Dans cet exemple j'ai placé sur un Userform un CommandButton et 2 TextBox
txtNom et txtPrénom dont les données seront placées dans la feuil1.
Private Sub CommandButton1_Click()
Dim LigneSuivante As Long
'S'assure que la Feuil1 est sélectionnée
'Enlève la protection de la feuil1
Sheets("Feuil1").Activate
ActiveSheet.Unprotect
'détermine la ligne suivante vide
LigneSuivante = Application.WorksheetFunction.CountA(Range("A:A")) + 1
'Transfert le contenu de txtnom et txtPrénom
Cells(LigneSuivante, 1) = txtNom
Cells(LigneSuivante, 2) = txtPrénom
'vide les contrôles pour la prochaine entrée
txtNom = ""
txtPrénom = ""
txtNom.SetFocus
'Remet la protection de la feuil1
ActiveSheet.Protect
End Sub
Pour sauvegarder, soit tu sauvegarde en quittant le classeur normalement ou tu quittes à partir du UserForm. dans ce cas tu crées un Bouton "Quitter" et tu places dans le code.
soit Application.Quit ou
Private Sub cmdQuitter_Click()
Dim Classeur As WorkBook
For Each Classeur In WorkBooks
If Classeur.Name <> ThisWorkBook.Name Then
Classeur.Close saveChanges:=True
End If
Next Classeur
Classeur.Close SaveChanges:=True
End sub
valtrase
Messages postés937Date d'inscriptionlundi 19 janvier 2004StatutMembreDernière intervention 9 mai 20223 24 avril 2005 à 19:17
Tiens ce code a tester (J'ai écrit mais pas encore testé)
AddBase te permet de rajouter des valeurs à une clé un peu à la manière de setsetting
les autres fonctions vérifient l'existance de la feuille et au cas ou la crée.
tout ceci est à mettre dans un module me tenir au courant si ça bogue !!!!
Pour l'appel tu fais
addbase "IciLeNomDeTaClé" , TextBox1,"MaFeuilleDeDonnées"
Sub AddBase(Clé As String, Value As String, Optional sht As String = "xlBase")
Dim Col As Long, Row As Long
If Not (FeuilleExiste(sht)) Then CreateSheet (sht)
With Sheets(sht).Rows(1)
Col = .Find(What:=Clé, LookIn:=xlValue, lookat:=xlWhole, XlSearchDirection:=xlNext, _
MatchCase:=False, XlSearchOrder:=xlByColumns).Column
If Col = 0 Then
Col = .Find(What:="*", LookIn:=xlValue, lookat:=xlWhole, XlSearchDirection:=xlPrevious, _
MatchCase:=False, XlSearchOrder:=xlByColumns).Column
Col = Col + 1
End If
End With
With Sheets(sht).Columns(Col)
Row = .Find(What:=Value, LookIn:=xlValue, XlSearchDirection:=xlNext, XlSearchOrder:=xlByRows).Row
If Row = 0 Then
Row = .Find(What:="*", LookIn:=xlValue, XlSearchDirection:=xlPrevious, XlSearchOrder:=xlByRows).Row
Row = Row + 1
End If
End With
With Sheets(sht)
.Cells(Row, Col).Value = Clé
End With
End Sub
' Vérifie l'existance d'une feuille
Function FeuilleExiste(Nom$) As Boolean
On Error Resume Next
FeuilleExiste = Sheets(Nom).Name <> ""
Err.Clear
End Function
'CreateSheet te permet de créer un feuille soit avec ton nom soit avec un nom prédéfini dans ce cas elle est cachée
Function CreateSheet(Optional rName As String = "xlOptions") As Boolean
Dim rSheet As String
If FeuilleExiste(rName) Then Exit Function
rSheet = ActiveSheet.Name
On Error GoTo CreateSheet_Err
Worksheets.Add after:=Worksheets(Sheets.Count)
With ActiveSheet
.Name = rName If rName "xlOptions" Or rName "xlIni" Or rName = "xlBase" Then
.Range("A1").AddComment "ATTENTION CETTE FEUILLE NE DOIS PAS ETRE EFFACE !!!!!!"
.Visible = xlSheetVeryHidden
End If
End With
CreateSheet = True
Sheets(rSheet).Select
Exit Function
CreateSheet_Err:
MsgBox Err.Description, vbCritical, "Erreur de l'application"
CreateSheet = False
valtrase
Messages postés937Date d'inscriptionlundi 19 janvier 2004StatutMembreDernière intervention 9 mai 20223 24 avril 2005 à 19:26
oups ai vu deux probs
With Sheets(sht).Columns(Col)
Row = .Find(What:=Value, LookIn:=xlValue, XlSearchDirection:=xlNext, XlSearchOrder:=xlByRows).Row
If Row = 0 Then 'Pas trouvé donc on cherche ligne vide
Row = .Find(What:="*", LookIn:=xlValue, XlSearchDirection:=xlPrevious, XlSearchOrder:=xlByRows).Row
Row = Row + 1
ElseIf Row > 0 then Exit Sub 'si trouvé on sort
End If
End With
With Sheets(sht)
.Cells(Row, Col).Value = Value
End With
End Sub