Se positionner sur la dernière ligne vide pour nouvelle saisie - Forum VB / VBA

A voir également:Se positionner sur la dernière ligne vide pour nouvelle saisieDernière ligne vide vba - Conseils pratiques - Visual Basic Problème avec macro trouver la dernière ligne vide ✓ - Forum - VB / VBA VBA_Suppression de la dernière ligne vide ✓ - Forum - Excel VBA recherche derniere ligne vide ✓ - Forum - VB / VBA Est-il possible de connaitre la dernière ligne vide d'une plage ✓ - Forum - VB / VBA

Bonsoir ;
je suis débutant dans VBA, je réalise de petits formulaires pour m'aider dans mes travaux de saisie multiple.
le code ci-dessous enregistre dans chaque tableau de la feuille les données que j'entre en fonction du choix de la feuille spécifiée.
le problème c'est que :
1- Pour le premier enregistrement j'arrive pas à me positionner sur la dernière ligne, celle juste après les en-têtes.
le message renvoyé est celui-ci : "ERREUR D'EXECUTION '438' : PROPRIETE OU METHODE NON GEREE PAR CET OBJET" ou encore le ERREUR D'EXECUTION '9'.
Tout s'arrête par la suite
2- Je souhaite forcer la majuscule dans les champs "texte1, texte2, texte3"
3- Enfin je désire interdire tout enregistrement tant que tous les champs ne sont pas renseignés.
Merci de m'aider.

code vba

'Procédure permettant de fermer le formulaire

Private Sub btnfermer_Click()
Unload Me
End Sub

'Procédure permettant l'initialisation du formulaire

Private Sub UserForm_Initialize()
Dim Feuille As Worksheet

'Nous parcourons toutes feuilles du classeur
For Each Feuille In Worksheets
Select Case Feuille.CodeName 'CodeName est le nom de code de la feuille
'On retire de la combobox les feuilles à ne pas afficher
Case "Feuil2", "Feuil3"
'Et on prend le reste des feuilles
Case Else
'On charge les noms dans la liste déroulante
Me.cboChoixClasse.AddItem Feuille.Name
End Select
Next Feuille
End Sub

'Procédure permettant de réinitialiser le formulaire

Private Sub btnEffacer_Click()

cboChoixClasse = ""
texte1 = ""
texte2 = ""
texte3 = ""
texte4 = ""
texte5 = ""
texte6 = ""
End Sub

'Procédure permettant d'ajouter un nouvel enregistrement
'à la fin du tableau

Private Sub btnAjout_Click()
Dim nbControle As Integer
Dim Nouvelleligne As Range
Dim MaFeuille As String

'Procédure permettant d'obliger le remplissage de tous les champs
'On teste la saisie de tous les champs dans le formulaire

If Len(texte1) = 0 Then
lblMessage = "Veuillez saisir le Nom de l'élève"
Me.texte1.SetFocus
ElseIf Len(texte2) = 0 Then
lblMessage = "Veuillez saisir le Prénom de l'élève"
Me.texte2.SetFocus
ElseIf Len(texte3) = 0 Then
lblMessage = "Veuillez saisir la Date de Naissance de l'élève"
Me.texte3.SetFocus
ElseIf Len(texte4) = 0 Then
lblMessage = "Veuillez saisir le Lieu de Naissance de l'élève"
Me.texte4.SetFocus
ElseIf Len(texte5) = 0 Then
lblMessage = "Veuillez saisir le Matricule de l'élève"
Me.texte5.SetFocus
ElseIf Len(texte6) = 0 Then
lblMessage = "Veuillez Selectionner le Sexe de l'élève"
Me.texte6.SetFocus
ElseIf Len(cboChoixClasse) = 0 Then
lblMessage = "Veuillez Selectionner le Niveau d'étude de l'élève"
Me.cboChoixClasse.SetFocus
Else
End If

'On recupère le nom de la feuille de la liste déroulante
MaFeuille = cboChoixClasse.Value

'On teste qu'il y'a bien le nom d'une feuille de selectionnée
If Me.cboChoixClasse.Value = "" Then

MsgBox "Veillez selectionner la classe dans laquelle sera enregistré(e) l'élève" & " ", vbOKOnly + vbInformation, "VALIDATION"
Exit Sub
End If

'On recupère le nombre de contrôle dans le userform
nbControle = 6

'On se positionne sur la dernière ligne vide de la table de données
Set Nouvelleligne = Sheets(MaFeuille).Cells(Rows.Cont, 1).End(xlUp).Offset(1, 0)
For X = 1 To nbControle
Nouvelleligne = Me.Controls("texte" & X).Value
Set Nouvelleligne = Nouvelleligne.Offset(0, 1)
Next X

'On réinitialise les champs du formulaire à vide
For X = 1 To nbControle
Me.Controls("texte" & X).Value = ""
Next X

cboChoixClasse.Value = ""

'On affiche un message confirmant la nouvelle saisie dans la table
MsgBox "Le (la) nouvel(le) élève a bien été ajouté sur la feuille :" & MaFeuille, vbOKOnly + vbInformation, "VALIDATION"
End Sub

Forum

A voir également:Se positionner sur la dernière ligne vide pour nouvelle saisieDernière ligne vide vba - Conseils pratiques - Visual Basic Problème avec macro trouver la dernière ligne vide ✓ - Forum - VB / VBA VBA_Suppression de la dernière ligne vide ✓ - Forum - Excel VBA recherche derniere ligne vide ✓ - Forum - VB / VBA Est-il possible de connaitre la dernière ligne vide d'une plage ✓ - Forum - VB / VBA

Web: www.shapebootstrap.net

1 réponse

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

Bonjour,
'premiere cellule vide colonne A With Sheets(MaFeuille)         Nouvelleligne = .Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row         If Nouvelleligne = 1 Then             Nouvelleligne = Nouvelleligne + 1         End If         'écriture sur ligne         For X = 1 To 6             .Cells(Nouvelleligne, X) = Me.Controls("texte" & X).Value             Me.Controls("texte" & X).Value = ""         Next X End With

Dire « Merci » 4

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez CommentCaMarche

CCM 56153 internautes nous ont dit merci ce mois-ci

Reply
réponses:
  • auteur

  • auteur

    Re,

    Mis RAZ Textbox dans la meme boucle

  • auteur

    Merci déjà pour la contribution, toutefois, l'exécution du code renvoi un message d'erreur ainsi affiché :
    Erreur d'exécution '91': variable objet ou variable de bloc with non définie.

  • auteur

    Re,

    Sur quelle ligne, chez moi pas de probleme avec le code que j'ai ecrit

  • auteur

    C'est La ligne 3 qui renvoi cette erreur.
    PS : J'utilise la version 2019 de office.

  • auteur

    Re,

    Remplacez Rows.Count par Rows.Cont, c'est la seule difference avec votre code

  • auteur

    C'est fait, mais le problème persiste !

  • auteur

    Bonjour,

    Modifiez la déclaration de NouvelleLigne en Long

    Si vous avez ete capable d'écrire ce code, le debugage devrait etre "facile"!!!

  • auteur

    Pour l'écriture, je le fais sur la base des tutos. Je découvre au fur et à mesure.
    J'ai juste quelques petites notions éparpillées en programmation en général.
    Pour la proposition, je ne suis pas sûr de saisir grand chose.
    Très cordialement !

  • auteur

    Bonjour,

    Dim Nouvelleligne As Long

    Par contre je ne suis pas convaincu du
    Rows.cont
    Car
     Rows.count 
    a toujours été de mise

  • auteur

    Merci beaucoup, tout va bien, ça marche.
    Pouvez-vous m'aider à présent pour forcer uniquement la saisie des chiffres pour le textbox "date de naissance" dans un format "dd/mm/yyyy"
    Ou encore permettre selection date à partir d'un calendrier qui apparaît dès qu'on est dans ce textbox.
    Merci encore.

  • auteur

    Re,

    Calendrier:
    https://www.commentcamarche.net/faq/41159-vba-excel-toutes-versions-controle-calendrier-transposable
    Juste faire les modifs pour ouverture et ecriture dans votre TextBox

  • auteur

    Merci mon cher !
    Tellement c'est énorme que je me perd ! ????????????
    Si possible, juste forcer la saisie des chiffres pour le textbox "date de naissance" dans un format "dd/mm/yyyy" me suffira.
    Merci !

  • auteur

    D'accord, je m'y mets

  • auteur

    Re,

    Une facon de faire pour saisie date, les / se mettent en auto. Adaptez le nom le la textbox

    Private Sub Texttest_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)     Dim Valeur As Byte     Texttest.MaxLength = 10 'nb caracteres maxi dans textbox          If KeyCode = 13 Then Exit Sub       'enter     If KeyCode = 8 Or KeyCode = 46 Then UserForm1.Totaltxt: Exit Sub        'sup, efface     If KeyCode > 95 And KeyCode < 125 And KeyCode <> 111 Then       '0 a 9         of7 = 48     ElseIf KeyCode = 111 Then       '/ pave num         of7 = 64     ElseIf KeyCode = 191 Then       '/ pave shift+:         of7 = 144     End If     codeAs = Chr(KeyCode - of7)     'caracteres "/0123456789"     If InStr("0123456789", codeAs) = 0 Then       'Chiffre ou /         KeyCode = 0         'MsgBox "Vous avez saisi du texte par erreur. le caract?re saisi n'est pas valide, vous devez entrer un nombre !!!", vbCritical, "ERREUR de SAISIE"         If Len(Texttest) > 0 Then Texttest = Left(Texttest, Len(Texttest) - 1)  'efface le caractere     End If     Valeur = Len(Texttest)     If Valeur = 2 Or Valeur = 5 Then Texttest = Texttest & "/"     Texttest.SetFocus End Sub 'test si date valide, faut ajouter test si pas ex:1000 ou 2501 Private Sub Texttest_Exit(ByVal Cancel As MSForms.ReturnBoolean)     If Texttest.Text <> "" Then         If IsDate(Texttest.Text) Then             'Code a mettre si besoin         Else             MsgBox "Format Date non valide!"             Cancel = True         End If     End If End Sub 

  • auteur

    Grand coup de chapeau f894009 !!!
    Le code fonctionne.
    Toutefois y a un petit soucis à la ligne 6.
    En effet, après une erreur de saisie (mauvais chiffre introduit), lorsque j'utilise la touche clavier "retour arrière", le code renvoi ce message d'erreur : ERREUR D'EXÉCUTION '424', OBJET REQUIS.
    L'effacement par le bouton "effacé marche bien par contre.
    Lorsque je clic sur débogage, sur cette ligne 6, "UserForm1. Totaltxt" est surligné en jaune.
    Lorsque je renomme en mon Userform qui est frmsaisie, tout s'arrête dès que je veux à nouveau renseigner le textbox, "keycode" de la même est surligné en bleu.
    Mais quand le remplissage du formulaire est correct, il enregistre très bien.
    Comment y remédier à ce niveau ?
    Merci !

  • auteur

    Dans le but de perfectionner le code, est-il possible de "caler" le nombre de mois à 12 max et le nombre de jours à 31 max ?
    Également quelque chose qui pourrait éviter de saisir par exemple 31 /02 /2019.
    Si fastidieux, on peut laisser tomber.
    Merci !

  • auteur

    Désolé, j'avais oublié la deuxième partie du code, ça répond au cas du 31/02/2019.
    Mais on peu saisir 12/15/2019.

  • auteur

    Re.
    Pour erreur ligne 6, enlever userform.........Le code vient d'un fichier que j'ai fais et il faut quand même adapter un peu
    Pour le contrôle jour/mois, mois de 1a 12, je dois avoir ça .
    Je regarde la chose demain matin. 12/15/2019 en date anglaise ça colle vu que jour et mois sont inversés

  • auteur

    D'accord merci beaucoup, excellente fin de soirée !

  • auteur

    Bonjour,

    Retrouve pas mon code ctrl date, mais je le refais avec en plus test annee bissextile.
    Ai aussi retrouve un calendrier mois "complique" pour vous; Deux solutions, soit vous mettez votre fichier a dispo et je vous le modifie soit vous tentez de le faire vous meme

  • auteur

    D'accord merci, je vous envoie le code.

  • auteur

    voici le code en question.
    Là dedans, j'arrive pas aussi à obliger l'activation du bouton "Ajouter" EXCLUSIVEMENT après que tous les champs aient été rempli.


    'Procédure permettant de fermer le formulaire

    Private Sub btnfermer_Click()
    Unload Me
    End Sub

    'Procédure permettant d'activer la validation d'une nouvelle donnée

    Private Sub texte1_Change()
    If Texte1 <> "" Then
    btnAjout.Enabled = True
    Else
    btnAjout.Enabled = False
    End If
    End Sub

    'Procédure permettant de forcer le format de texte de la date de naissance

    Private Sub texte5_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)

    Dim Valeur As Byte
    Texte5.MaxLength = 10 'nb caracteres maxi dans textbox

    If KeyCode = 13 Then Exit Sub 'enter
    If KeyCode = 8 Or KeyCode = 46 Then UserForm1.Totaltxt: Exit Sub 'sup, efface
    If KeyCode > 95 And KeyCode < 125 And KeyCode <> 111 Then '0 a 9
    of7 = 48
    ElseIf KeyCode = 111 Then '/ pave num
    of7 = 64
    ElseIf KeyCode = 191 Then '/ pave shift+:
    of7 = 144
    End If
    codeAs = Chr(KeyCode - of7) 'caracteres "/0123456789"
    If InStr("0123456789", codeAs) = 0 Then 'Chiffre ou /
    KeyCode = 0
    'MsgBox "Vous avez saisi du texte par erreur. le caractère saisi n'est pas valide, vous devez entrer un nombre !!!", vbCritical, "ERREUR de SAISIE"
    If Len(Texte5) > 0 Then Texte5 = Left(Texte5, Len(Texte5) - 1) 'efface le caractere
    End If
    Valeur = Len(Texte5)
    If Valeur = 2 Or Valeur = 5 Then Texte5 = Texte5 & "/"
    Texte5.SetFocus
    End Sub

    'Test si date valide, faut ajouter test si pas ex:1000 ou 2501

    Private Sub Texte5_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If Texte5.Text <> "" Then
    If IsDate(Texte5.Text) Then

    'Code a mettre si besoin
    Else
    MsgBox "Format Date non valide!"
    Cancel = True
    End If
    End If
    End Sub

    'Procédure permettant l'initialisation du formulaire

    Private Sub UserForm_Initialize()
    Dim Feuille As Worksheet

    'Nous parcourons toutes feuilles du classeur
    For Each Feuille In Worksheets
    Select Case Feuille.CodeName 'CodeName est le nom de code de la feuille
    'On retire de la combobox les feuilles à ne pas afficher
    Case "Feuil2", "Feuil3"
    'Et on prend le reste des feuilles
    Case Else
    'On charge les noms dans la liste déroulante
    Me.cboChoixClasse.AddItem Feuille.Name
    End Select
    Next Feuille
    End Sub

    'Procédure permettant de réinitialiser le formulaire

    Private Sub btnEffacer_Click()

    cboChoixClasse = ""
    Texte1 = ""
    Texte2 = ""
    Texte3 = ""
    Texte4 = ""
    Texte5 = ""
    Texte6 = ""
    lblMessage = ""
    End Sub

    'Procédure permettant d'ajouter un nouvel enregistrement
    'à la fin du tableau

    Private Sub btnAjout_Click()
    Dim nbControle As Integer
    Dim NouvelleLigne As Range
    Dim MaFeuille As String


    'Procédure permettant d'obliger le remplissage de tous les champs
    'On teste la saisie de tous les champs dans le formulaire

    If Len(Texte1) = 0 Then
    lblMessage = "Veuillez saisir le Nom de l'élève"
    Me.Texte1.SetFocus
    ElseIf Len(Texte2) = 0 Then
    lblMessage = "Veuillez saisir le Prénom de l'élève"
    Me.Texte2.SetFocus
    ElseIf Len(Texte3) = 0 Then
    lblMessage = "Veuillez saisir le Matricule de l'élève"
    Me.Texte3.SetFocus
    ElseIf Len(Texte4) = 0 Then
    lblMessage = "Veuillez Selectionner le Sexe de l'élève"
    Me.Texte4.SetFocus
    ElseIf Len(Texte5) = 0 Then
    lblMessage = "Veuillez saisir la Date de Naissance de l'élève"
    Me.Texte5.SetFocus
    ElseIf Len(Texte6) = 0 Then
    lblMessage = "Veuillez saisir le Lieu de Naissance de l'élève"
    Me.Texte6.SetFocus
    ElseIf Len(cboChoixClasse) = 0 Then
    lblMessage = "Veuillez Selectionner le Niveau d'étude de l'élève"
    Me.cboChoixClasse.SetFocus
    Else
    End If

    'On recupère le nom de la feuille de la liste déroulante
    MaFeuille = cboChoixClasse.Value

    'On teste qu'il y'a bien le nom d'une feuille de selectionnée
    If Me.cboChoixClasse.Value = "" Then

    MsgBox "Veillez selectionner la classe dans laquelle sera enregistré(e) l'élève" & " ", vbOKOnly + vbInformation, "VALIDATION"
    Exit Sub
    End If

    'On recupère le nombre de contrôle dans le userform
    nbControle = 6

    'On se positionne sur la dernière ligne vide de la table de données
    Set NouvelleLigne = Sheets(MaFeuille).Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
    For X = 1 To nbControle
    NouvelleLigne = Me.Controls("texte" & X).Value
    Set NouvelleLigne = NouvelleLigne.Offset(0, 1)
    Next X


    'On réinitialise les champs du formulaire à vide
    For X = 1 To nbControle
    Me.Controls("texte" & X).Value = ""
    Next X

    cboChoixClasse.Value = ""

    'On affiche un message confirmant la nouvelle saisie dans la table
    MsgBox "Le (la) nouvel(le) élève a bien été ajouté sur la feuille :" & MaFeuille, vbOKOnly + vbInformation, "VALIDATION"
    End Sub

    'Procédure permettant de forcer tout le texte en majuscule texte1

    Private Sub texte1_AfterUpdate()
    Texte1.Text = UCase(Texte1.Text)

    End Sub

    'Procédure permettant de forcer tout le texte en majuscule texte2

    Private Sub texte2_AfterUpdate()
    Texte2.Text = UCase(Texte2.Text)
    End Sub

    'Procédure permettant de forcer tout le texte en majuscule texte3

    Private Sub texte3_AfterUpdate()
    Texte3.Text = UCase(Texte3.Text)
    End Sub


    Private Sub texte6_AfterUpdate()
    Texte6.Text = UCase(Texte6.Text)
    End Sub

  • auteur

    Re,

    Le fichier serait preferable, sans donnees confidentielles……..!!

  • auteur

    D'accord merci beaucoup !

  • auteur

    Re,

    Je vous demandai votre fichier, mais semblerait que vous ne le souhaitez pas.
    J'ai donc créer un fichier: https://mon-partage.fr/f/V7zhmFNU/

  • auteur

    J'ai pas trouvé comment le joindre ici ! Peut-être IB par mail alors !

  • auteur

    Re,

    Avec le fichier que je vous ai mis a dispo, passez l'userform dans votre VBA

    Pour info:
    Pour transmettre un fichier,
    Veillez a ce qu'il n'y ait PAS DE DONNEES CONFIDENTIELLES
    il faut passer par un site de pièce jointe tel que cjoint.com

    Allez sur ce site : http://cjoint.com
    Clic sur parcourir,
    Cherche ton fichier,
    clic sur ouvrir,
    Clic sur "Créer le lien cjoint",
    Copier le lien,
    Revenir ici le coller dans une réponse...

    ou
    'mon partage
    https://mon-partage.fr/

  • auteur

    C'est fait. Je vais essayer l'user form.
    MDP : Minko_218
    Aucune donnée confidentielle, c'est un outil de travail que je m'attele à mettre au point pour alléger ma tâche.
    Merci encore.

    https://www.cjoint.com/c/IFsp2YbLNt7

  • auteur

    Re,

    Je recupere le baigneur et vous arrange ca

    Suite:
    Vu que vous utilisez des Tableaux, j'ai quelques modif a faire afin d'ajouter une ligne au tableau pour que vous conserviez un tableau complet

  • auteur

    Grand merci à vous !
    Sur le format de date, l'année de naissance n'est toujours pas calé à 4 chiffres.
    On peut saisir, 24/08/045 ou 25/12/9.
    Merci !

  • auteur

    Re,
    Ben faudra cale car bonjour pour le contrôle…..

  • auteur

    Toujours dans l'amélioration !
    Nous avons généralement des cas d'élèves qui sont "nés vers" ça veut dire qu'ils n'auront pas de jour et mois de naissance.
    Pour prendre en compte ces cas, est-il possible d'intégrer une case à cocher "né vers" pour que le code accepte la date 00/00/2006 une fois que la case est cochée ?
    Ou alors toutes autres solutions.
    Merci !

    Également je voudrais savoir comment faire (si c'est possible de le faire ) pour exporter les données enregistrées pour une mise à jour des informations vers un autre utilisateur par exemple.

  • auteur

    Re,

    "né vers" Ok

    pour exporter les données Ben un classeur partage sur un PC en reseau!!

    A demain

  • auteur

    D'accord merci à demain !

  • auteur

    Un souci !!!
    J'ai ajouté une colonne (colonne N°) à gauche du tableau de la feuille excel. Le problème c'est que j'arrive pas à faire décaler la première cellule de saisie de donnée à colonne "B".
    J'ai essayé de modifier à "2" le chiffre de la 150ème ligne du code vba mais sans succès.

    150 - NouvelleLigne = .Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row

  • auteur

    Bonjour,

    NouvelleLigne = .Cells(Rows.Count, 2).End(xlUp).Offset(1, 0).Row 


    Faudra vous y retrouver ensuite car je modifie un autre fichier

  • auteur

    Bonjour,
    Toujours aucun décalage je comprends pas pourquoi. J'ai même essayé de créer une nouvelle feuille avec un nouveau tableau mais pas de décalage.

    Qu'à cela ne tienne, peut-on prévoir également une case à cocher pour les élèves qui n'auraient pas de prénoms ?
    Merci.

  • auteur

    Bonjour,

    Je suppose que vous parlez des feuilles Classes. J'ai insere une colonne en A et aucun probleme

    Modif effectuees sans case a cocher
    _date: saisie de 00/00 sans probleme (le / se met automatiquement comme une date normale)
    _Sans prenom: msgbox pour confimer ou pas le manque de prenom

    Le format date est xx/xx/xxxx, ceci est valable dans n'importe quel pays. L'annee peut etre ramenee a xx si tous vos "eleves" sont nes apres 1999

    Fichier: https://mon-partage.fr/f/Oke8oVN6/
    J'ai decale d'une colonne seulement pour feuille A2 ESCOM

  • auteur

    Merci beaucoup !
    Oui il s'agit bien des feuilles classes.

    Je récupère le travail fait et vous tiens informé.
    Merci encore !

  • auteur

    Bonjour,
    J'ai bien reçu et exploité le fichier que vous avez modifié et arrangé, ensuite j'ai dû ré-créer les feuilles "classes" à partir du modèle que vous avez créé. J'ai également activé le bouton "voir BDD" du formulaire.

    Cependant, les enregistrements ne fonctionnent que sur la feuille A2 ESCOM !!! Dès qu'il vaille enregistrer dans une autre feuille, ce message d'erreur apparaît : ERREUR D'EXÉCUTION '1004' LA MÉTHODE 'Range' de l'objet '_Global' a échoué...

    J'ai également étendu le tableau à la colonne 'A' pour la saisie des numéros d'ordre, colonne 'No'. Avec cette nouvelle colonne, je souhaite si cela est possible, incrementer automatiquement ces numéros au fur et à mesure des enregistrements.

    Enfin, avec les boutons créés sur la page sommaire, je souhaite pouvoir rechercher et charger dans un formulaire, les informations de l'élève lamda pour modification (bouton modifier un enregistrement) ou pour le supprimer (bouton supprimer un enregistrement).

    Merci pour votre précieux temps mis et la disponibilité.

    Le nouveau fichier est ici :
    https://mon-partage.fr/f/KwO0x2Qi/

  • auteur

    Bonjour,

    Rectification:
    Il y a une erreur est sur application on time de Splashscreen, pas sur ce que j'ai ecrit……..

    Erreur '1004': tout a fait normal Thierry, vous avez change le nom des tableau quand vous avez ajoute une colonne si vous n'avez que ce tableau, je regarde a modifier le code. Pour A2 ESCOM y en a deux!!

  • auteur

    D'accord merci beaucoup !!!

  • auteur

    Bonjour f894009
    Avez-vous pu explorer à nouveau le fichier pour les dernières retouches ?
    Cordialement !

  • auteur

    Bonjour,
    Je suis dessus……...

  • auteur

    D'accord merci beaucoup, je vais patienter le temps qu'il faudra !

  • auteur

    Re,

    je vais patienter le temps qu'il faudra !
    Ben oui, j'ai quelque soucis pour recuperer le nom du tableau d'une feuille…


    Suite:

    Fichier modifie pour ajout N° et remplissage en recherchant le nom du tableau

    https://mon-partage.fr/f/FZiIksxV/

  • auteur

    Bonjour
    J'ai essayé, les ajouts sont pris en compte sur les autres feuilles, l'incrémentation fonctionne effectivement sur la feuille A1 COM ; merci beaucoup pour ce sacré coup de pouce.
    Pour les autres feuilles, y'a t-il lieu de les supprimer et dupliquer la feuille A1COM Pour renommer ou vous continuez à chercher ?

  • auteur

    Bonjour,

    Pour les autres feuilles,
    Ben, y a rien a faire, ca marche comme sur A1 COM!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    Vois pas ce que vous voulez ??

  • auteur

    Rectificatif
    C'est comme vous dites, sans doute j'exécutais une ancienne version !
    Grand merci !

    Pour les boutons "supprimer et modifier" c'est possible de les programmer ?
    Sinon je me battrai en rentrant à chaque fois dans la BDD.
    MERCI ENCORE !

  • auteur

    Re,

    Pour les boutons "supprimer et modifier" c'est possible de les programmer ?

    Ok, je ne suis pas a ca prêt…...

  • auteur

    D'accord c'est bien noté, je vous prie de m'aider une énième fois là dessus dans la mesure du temps que vous voudrez bien m'accorder en plus.

  • auteur

    Re,

    Y a pas d'lezard.

    Pour le choix Sexe, je n'ai pas verrouille la saisie F/M . Regardez si vous vous sentez de le faire

  • auteur

    Oui c'est vrai, d'accord je vais m'y mettre !

  • auteur

    C'est fait, voici le code qui permet de forcer la sélection ou la saisie des seules lettres F/M

    Private sub Texte4_Change ()
    With Texte4
    .Style = fmStyleDropDownCombo
    .MatchRequired = True
    End With
    End Sub

  • auteur

    Bonjour,

    Eh ben volla…


    Voir BDD: je propose une autre Userform qui permetterait aussi Modif/Sup

    Pour la suppression de ligne, le Numero des autres lignes en dessous est a reactualiser car pose probleme si conserve (ce n'est pas une base access avec num auto)

  • auteur

    Bonjour !
    D'accord c'est sans problème, j'attends votre proposition !
    Merci !

  • auteur

    Bonjour,

    A quoi vous sert le N°, le martricule existe-il toujours et unique???

  • auteur

    Bonjour,
    Le matricule existe bel et bien, il est unique pour chaque élève.
    Par contre le No aide à avoir d'un simple coup, l'effectif de la classe.

  • auteur

    Re,

    Ok

  • auteur

    Bonjour,

    fichier modifie avec une userform qui fait tout (comme le recipient de cuisine)
    https://mon-partage.fr/f/fHcCVcI7/

    Vu qu'il ne serait pas normale de modifier les feuilles, il faudrait les proteger par mot de passe et modifier le code pour ecrire feuille protegee

  • auteur

    Waouh!
    Énorme comme boulot abattu.....(vraiment comme un récipient de cuisine ????????????)
    Infiniment merci !


    Lorsque je protège les feuilles du classeur, le programme n'a pas accès vu qu'elles sont verrouillées pour l'écriture.

    Je vais devoir faire mise en page des feuilles pour pouvoir imprimer.
    Verouiller "selection sexe"
    Afficher la liste de la classe en pdf plutôt que la BDD.... Etc...

    En passant, y'a t-il un moyen efficace permettant de sélectionner les feuilles d'un classeur pour lancer l'impression du groupe sélectionné ?

  • auteur

    Bonjour,

    J'ai vire votre mot de passe, vous le remettrez une fois que ce sera fini pour moi

    vraiment comme un récipient
    Oui, tout ce que vous demandez et demanderez, mais pour la cuisine faut voir. Par contre ca peut très bien faire la soupe

    Vba et protection feuille: y a un code pour

    impression PDF: peut se faire aussi a partir d'une userform avec une listbox a selection multiples

  • auteur

    D'accord merci beaucoup !

    Pouvez-vous insérer ces deux options supplémentaires ?

    Très cordialement !

  • auteur

    Re,
    Ok

  • auteur

    Merci encore !
    Passez une Agréable journée.

  • auteur

    Re,

    fichier modifie avec protection feuilles, deux Userform (Gestion Base et Gestion Impression)

    https://mon-partage.fr/f/SKPjLGd3/

    A vous de tester

    Normalement, pour eviter toutes atteintes a l'integrite de votre fichier, il y aurait quelques encore un peu de codage.
    Vous serez le seul a faire des modif VBA et/ou feuille?

  • auteur

    D'accord merci, je teste ça tout de suite.
    Oui je serai le seul à modifier pour éviter toute fraude que ce soit.
    Merci pour l'astuce.

  • auteur

    J'ai testé avec succès la dernière version,grand coup de chapeau à vous f894009.

    Quand on publie une liste, il est impossible de la publier à nouveau car message d'erreur apparaît. Mais quand celle-ci est supprimée, on peut aisément publier à nouveau.
    Pourriez vous ajouter une option telle que, s'il arrivait qu'on veuille publier une seconde fois un fichier déjà existant (cas d'une actualisation de la liste), qu'une boîte de dialogue invite l'utilisateur à décider s'il faut supprimer ou renommer le fichier existant (par exemple) ?

    Également, est-il possible de sélectionner la zone d'impression (car les pages où figurent les boutons tel "retour à l'accueil" par exemple ne devraient pas être imprimées) ?
    Le bas de la liste devant comporter les mentions "fait à _____le______“ “le principal". Merci,
    Très cordialement.

  • auteur

    Bonjour,

    message d'erreur apparaît.
    Lequel??

    supprimer ou renommer le fichier existant (par exemple) ?
    Remplacement automatique, rien a faire!

    ne devraient pas être imprimées
    Je regarde la chose, parametre imprimante a modifier ou sélection plage

    J'espere que vous allez vous mettre a apprendre le VBA car le fichier que je vous destine permet de voir pas mal de programmation (meme si pas de haute volée).
    Gisement de progrès, ce que je vois et ai deja fais, donc vous pourrez aussi:

    _mettre UF_Gestion_base en plein écran sans possibilité de déplacer l'UF, taille UF et objet proportionnelement a la resolution écran, cacher application Excel
    _ajouter possibilité de plein écran, réduire l'UF en bas de l'écran

    Y a tout un tas de plaisanteries de ce genre, juste pour rire.........

    Le bas de la liste
    Ben, mettez ca en dessous du tableau!!!!!!!!!!!!!!!!

    Je suppose(itoire) qu'il faut mettre la date, le a si fixe, mettez le ............

  • auteur

    Bonjour
    J'espere que vous allez vous mettre a apprendre le VBA

    Oui bien sûr, c'est tout à fait ça !
    Ce que vous avez déjà fais est une bonne mine d'or. Je m'améliore, je cherche..... Je découvre.

    _mettre UF_Gestion_base en plein

    Ça c'est sujet de recherche pour moi.
    Je m'intéressais d'abord au contenu pour s'assurer que le max d'ingrédients y est pour bosser sans stress le moment venu.

    Pour la date c'est oui !!!
    L'astuce que j'avais là dessus c'était de mettre directement dans la feuille Excel à l'endroit indiqué la fonction "aujourd'hui".

    Autre souci, les feuilles sont verrouillées, il faut MP pour les modifications et mise en page.

    J'aimerais bien découvrir d'autres petites plaisanteries ????????????????

  • auteur

    J'aimerais bien savoir également comment cacher l'application Excel pour travailler que le UF.

  • auteur

    Re,
    Juste comme ca, maintenant que vous avez peut-être fait la mise en page de vous x feuilles de classe, une seule feuille suffisait si vous aviez resonne base de donnees. Reflechissez a ce que je viens d'ecrire

    Je m'intéressais d'abord au contenu
    Tout a fait normal, il faut en premier que ca "marche" et apres un peu de broderie autour

    L'astuce que j'avais là dessus
    C'est votre fichier, vous faires ce que vous voulez a partir du moment que ca repond a l'objectif

    Autre souci,
    Facile, le MDP est dans le code , a vous de trouver


    Fichier avec retour d''impression et un bouton impression de la classe en cours dans UF gestion Base.
    La "fleche" retour sur feuille, je n'ai encore recgzrde
    https://mon-partage.fr/f/b9OfK93d/

  • auteur

    Re
    une seule feuille suffisait

    Là c'est à chercher vraiment pour ne pas avoir à toucher trop de feuilles ; je vais fouiller !

    Pour MDP, je cherche tout de suite.

  • auteur

    Re,

    Regardez le post precedent pour fichier modifie

  • auteur

    MDP trouvé avec succès !
    Mais je ne trouve pas encore comment s'y prendre pour avoir la mise en page générale à partir d'une seule feuille configurée.

  • auteur

    Bon jour,

    Cherchez, cherchez encore......

  • auteur

    Bonjour,

    OK, je continue.

  • auteur

    RE,
    Avez-vous recupere le dernier fichier que je vous ai mis a dispo??

  • auteur

    Oui je crois bien, c'est celui du 190705. Si je ne me trompe pas.

  • auteur

    Ré,
    Je viens de récupérer celui du 190706.

    Je vois le code de l'initialisation du UF la définition des largeur de colonnes de la LstB_Classe;

    Je vois également dans la sub Majour_Base_Achive, à partir de la ligne 338 avec la fonction Resize.

    De ces deux propositions, Si la réponse s'y trouve, à quel niveau faudra t-il intervenir pour résoudre le problème ?

    PS : Ma toute première programmation en VBA c'est sur ce UF, et plus encore quand vous avez accepté m'accompagner dans mes premiers.
    Je continue de découvrir.

  • auteur

    Re,

    De ces deux propositions, Si la réponse s'y trouve
    La reponse a quoi ????

  • auteur

    Retrouvez le code permettant d'avoir la mise en page générale à partir d'une seule feuille configurée.

  • auteur

    Re,
    Pas du tout….
    Que recherchez vous au juste??

  • auteur

    Re,
    Ceci,
    "Juste comme ca, maintenant que vous avez peut-être fait la mise en page de vous x feuilles de classe, une seule feuille suffisait si vous aviez resonne base de donnees. Reflechissez a ce que je viens d'ecrire"

  • auteur

    Re,
    Ce dont vous avez besoin n'est pas dans le code du fichier.

    Normalement deux feuilles et tableau de bord suffiraient, mais y a une possiblite en partant de vos x feuilles et une feuille modele

  • auteur

    Qu'à cela ne tienne,
    Avez-vous inséré code pour mode plein écran et masquage de l'application ?

  • auteur

    Ce dont vous avez besoin

    D'accord je comprends mieux maintenant !

  • auteur

    Bonjour,
    Plein écran et massage Excel, non

  • auteur

    Bonjour,
    D'accord merci. Puis-je attendre cet ajout ?
    Cordialement.

  • auteur

    Re,

    Peut-être, car il semblerait que vous ne soyez pas encore mûr pour la chose…...

  • auteur

    Re,
    Peut-être, car il semblerait

    Oui oui ça c'est vrai !
    Vous êtes celui qui me fait découvrir et à grande vitesse.
    J'avoue que dans l'apprentissage, je brûle les étapes, question d'arriver à un utilitaire pour le boulot du quotidien.
    Infiniment merci.

  • auteur

    Re,

    Cherchez comment coder pour n'avoir qu'une feuille modele et ,pour le moment, toutes vos feuilles classe pour l'impression(facile)

  • auteur

    Re,
    Cherchez comment coder
    Pour l'impression vous l'avez déjà fait il me semble (impression en pdf) !
    Pour la feuille modèle je fouille !

  • auteur

    Re,
    Code pour PDF, oui, dans le contexte actuel pas pour une feuille modele

  • auteur

    Ok je comprends. Je suis toujours. dans les recherches.

  • auteur

    Bonjour,
    Voici le code que j'ai pu trouver. J'ai créé une UF pour l'essayer.

    Private Sub Cbo_Liste_Classes_Change()
    Worksheets("BDD").Range("A1") = Cbo_Liste_Classes.Value
    End Sub

    Private Sub Cmd_Valider_Click()

    Worksheets("Modèle EDT CLASSE").Range("B3") = Cbo_Liste_Classes.Value

    Worksheets("Modèle EDT CLASSE").Copy After:=Sheets(Worksheets.Count)
    Set MySheet = ActiveSheet
    With MySheet
    .Name = Worksheets("BDD").Range("A1")
    End With

    End Sub


    J'ai également entré un code pour écrire la classe sélectionnée sur l'entête de la feuille créée.


    Pour l'impression en pdf, je pense que ça ne change pas par rapport à ce que vous avez écrit, du moment où les feuilles seront déjà créées pour être imprimées.

  • auteur

    Re,

    Si vous partez du principe que les feuilles sont déjà crees pour etre imprimees, ce que vous faites est inutile.

  • auteur

    Je ne comprends pas !
    Pouvez-vous être plus explicite ?
    Puisque de toute façon toutes les listes devront exister jusqu'en fin d'année scolaire....!!!

    Quelle est votre attente réelle ?
    Je ne suis qu'en phase d'apprentissage.

  • auteur

    Bonjour,

    Comme a priori vous avez fait la mise en page de toutes les feuilles, il n'est
    pas utile de faire du code avec une feuille model a remplir avec les données de feuille a imprimer.

    Si par hazard vous avez a refaire un fichier du meme genre, réfléchissez comment faire.

  • auteur

    Re,

    Bonjour
    Oui tout à fait, j'ai plus mis cette recherche dans le cadre d'un exercice dont le résultat devrait servir à l'avenir.

    Pour le fichier existant, j'ai dupliqué par "glisser-déposer, vraiment fastidieux ! Si j'avais su avant l'existence de ce code, ça devrait être super bénéfique.

    Merci !

  • auteur

    Bonjour,
    Je suis entrain de concevoir une UF pour édition manuelle d'emploi du temps (EDT).
    J'aimerais bien que vous jetez un œil sur cette UF pour voir si mon approche est bonne.
    La première difficulté rencontrée est :
    - Comment faire pour renseigner une combobox 2 en fonction de la combobox 1 ?
    Dans ma UF, une fois la classe sélectionnée dans la combo 1, les autres combo correspondant chacune à une période de cours, devraient charger les matières correspondantes pour ladite classes; comment s'y prendre ?

    https://mon-partage.fr/f/1VqKZgih/

    Très cordialement.

  • auteur

    Bonjour,

    Si autre sujet, ouvrez une autre demande.

    chacune à une période de cours,
    Et
    les matières correspondantes pour ladite classes

    Ben, avec ce qu'il y a dans votre BDD, pas vraiment possible de comprendre avec quoi remplir vos combobox

  • auteur

    Oui c'est une nouvelle demande !

    La BDD comporte les différents tableaux devant être exploités.

    Le tableau "classes" est pour la combobox 1.
    À partir de la sélection d'une classe dans la combobox 1, les combobox des différentes périodes de cours devront charger le tableau qui correspond aux matières de la classe choisie.

    Exemple : le tableau "classe" comporte les classes "A, B, C"
    La classe "A" a les matières "A1, A2, A3, A4...."
    La classe "B" a les matières "B1, B2, B3, B4......" ainsi de suite.
    Lorsque je selectionne la classe "B", c'est la liste des matières de cette classe qui doit être chargé dans les autres combobox soit les matières "B1, B2, B3, B4......"

  • auteur

    Re,

    C'est magnifique ce que vous écrivez mais dans la combobox de choix classe, y a pas A,B,C. Soyez un peu plus cohérant dans vos donnees…………………………………...

  • auteur

    Re,
    C'est magnifique ce que vous écrivez
    Oui tout à fait, je désolé. C'est pourquoi j'ai parlé d'exemple pour rendre plus explicite ma préoccupation, d'autant plus que le fichier était déjà envoyé.

    Voici le nouveau fichier.
    https://mon-partage.fr/f/6KZsjXFp/

    Merci bien !

  • auteur

    Bonjour,

    C'est pourquoi j'ai parlé d'exemple pour rendre plus explicite
    Oui, a condition de faire un exemple representatif…………………..

    Code pour remplir au moins la premiere combobox. Si vous aviez reflechi un tout petit peu, il vous serait beaucoup plus facile de mettre les autres combo a jour……………………………..

    Private Sub Cbo_Liste_Classes_Change()     'Worksheets("BDD").Range("A1") = Cbo_Liste_Classes.Value          Set plage = Range("T_Matiere_Classe_" & Cbo_Liste_Classes)     ComboBox6.List = Application.Transpose(plage) 'Lundi 07h30-08h20 End Sub  

  • auteur

    Re,

    Bonjour,
    Merci beaucoup, je l'essai tout de suite !

    Si vous aviez reflechi un tout petit peu

    Tout à fait, raison pour laquelle je demande de faire part de vos critiques par rapport à mon approche.

    Mettre les autres combobox à jour

    C'est très génial comme idée.
    Pouvez-vous m'indiquer comment le faire ?

    Je vais chercher entre temps.

    Merci encore, cordialement !

  • auteur

    Re

    Si vous aviez reflechi un tout petit peu


    J'ai trouvé comment rafraîchir toutes les combobox.

    Set plage =Range ("T_Matiere_Classe_" & Cbo_Liste_Classes)

    For n = 1 To 42
    Controls("combo" & n). List = Application. Transpose(plage)
    Next n
    End Sub

    Merci bien.

  • auteur

    Re,

    Z'etes sur car y a des trous dans les dizaines, trentaines, quarantaines et y des cinquantes

    Pour l'UF profs, c'est pire encore

  • auteur

    Re

    Z'etes sur car y a des trous

    Oui pour UF classe ça fonctionne bien jusqu'ici.

    J'ai pas encore entamé UF profs. Je vous tiens au courant.

    Avez-vous une astuce à propos ?

    La difficulté qui se pose certainement est comment lier chaque combobox à la cellule de la feuille qu'il faut ?

    Est il possible d'avoir une astuce pour y parvenir ? Ce sont justement ces trous entre les cellules qui compliquent encore !

    Si vous avez d'autres pichenettes, ça soulagera vraiment !

    Très cordialement !

  • auteur

    Re,

    Oui pour UF classe ça fonctionne bien jusqu'ici.
    Ben, nous n'avons pas le meme fichier car celui que j'ai est comme decrit précédemment.
    Y a bien 42 Combobox mais pas de 1 a 42

  • auteur

    Re,

    Ben, nous n'avons pas le meme fichier

    Oui c'est vrai, désolé.
    J'ai dû renommer toutes les combobox pour y arriver.

    Voici le nouveau fichier dont je parle.

    https://mon-partage.fr/f/aimRHCqk/

  • auteur

    Bonjour,

    Oui c'est vrai, désolé.
    Dernière fois.......

  • auteur

    Re,

    Combobox se remplissent, ok, et apres!!!!!!!!

  • auteur

    Re

    Bonjour,
    Combobox se remplissent, ok, et apres!!!

    Après Il y a lieu d'exporter le contenu de ces combobox vers les cellules correspondantes dans l'emploi du temps concerné ; D'autant Plus que chaque combobox correspond à une période de cours, période qui correspond à une cellule de l'emploi du temps.

    Donc, à chaque fois qu'on cliquera sur le bouton "valider" le code devrait sélectionner la feuille correspondante et y appliquer les informations se trouvant dans les combobox.

  • auteur

    Re,

    Après Il y a lieu d'exporter le contenu de ces combobox
    Ben, facile, a vous de jouer

  • auteur

    Re,

    Ben, facile, a vous de jouer

    Je vais essayer et vous faire part.

    Mais déjà, la seule option que je vois est de relier "systématiquement" chaque combobox à sa cellule de correspondance.
    Y a-t-il une option permettant une boucle ?

  • auteur

    Re,

    relier "systématiquement" chaque combobox à sa cellule
    N'existe pas, faut du code

    Y a-t-il une option permettant une boucle ?
    Boucle pour remplir les cellules de la feuille, oui, a vous de trouver car c'est vraiment facile

  • auteur

    Re,
    Bonjour

    Voici joint le nouveau fichier avec ce que j'ai pu jusqu'ici.

    https://mon-partage.fr/f/q2yXTaTX/

    Avec ce fichier, j'arrive pas à vider toutes les combobox avec le bouton "effacer", y a toujours un message d'erreur qui s'affiche.

    Merci pour d'éventuelles propositions.

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed