IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Enregistrement d'une saisie à la suite d'un tableau filtré [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 5
    Points : 3
    Points
    3
    Par défaut Enregistrement d'une saisie à la suite d'un tableau filtré
    Bonjour à tous,

    J'ai un fichier excel avec un masque de saisie qui vient remplir un tableau, lignes après lignes.
    Sauf que j'ai un petit souci pour enregistrer une saisie dans un tableau excel à la suite de la dernière ligne remplie dans ce tableau.
    En effet, tout fonctionne bien si le tableau est complètement affiché, par contre si je me mets à utiliser des filtres sur une des colonnes, ma macro est incapable de retrouver la dernière ligne saisie si elles sont toutes masquées (ou la dernière).

    Ma macro:
    Nom : 22-08-2014 11-50-23.png
Affichages : 240
Taille : 4,6 Ko

    Le problème dans ma macro vient du "End(xlDown)" qui, lorsque le filtre est en place, est donc incapable de retrouver cette ligne.
    J'ai pensé à une solution: compter le nombre de valeur saisies dans la colonne A et dire à la macro que l'enregistrement de la nouvelle saisie doit se faire sur la nouvelle ligne = dernière valeur colonne A + 1...

    Mais je suis novice en macro et là je bloque, si quelqu'un peut m'aider

    Merci !!

  2. #2
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Essaies
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NewRow=sheet.Cells(sheet.rows.count,1).end(xlup).row+1
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  3. #3
    Candidat au Club
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Merci pour ton retour mais pas mieux !!!

    La réaction est la même qu'avant c'est à dire que :
    - de base mes intitulés de colonnes avec filtre sont en ligne 6
    - avec le filtre par exemple les lignes 7 à 18 sont masquées
    - au lieu d'écrire sur la 19 la saisie se fait en ligne 7, donc écrase les données qui y étaient déjà présente.

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 755
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 755
    Points : 28 606
    Points
    28 606
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Personnellement je travaille avec un objet Range et sa propriété CurrentRegion et le fait que la plage soit filtrée ne pose pas de problème.
    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub t()
     Dim rng As Range
     Set rng = ThisWorkbook.Worksheets("db").Range("A1").CurrentRegion
     MsgBox "Numéro de la prochaine ligne libre " & rng.Rows.Count + 1
    End Sub
    Si la plage de cellules ne commence pas à la première ligne, par exemple à la sixième, il faut utiliser la propriété Row en plus
    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub t()
     Dim rng As Range
     Set rng = ThisWorkbook.Worksheets("db").Range("A6").CurrentRegion
     With rng
      MsgBox "Numéro de la prochaine ligne libre " & .Row + .Rows.Count
     End With
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Candidat au Club
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Bonjour Philippe,

    Merci pour ton retour, j'ai donc repris tes dires pour l'intégrer et ça marche nickel !!
    Un grand merci !
    Si je peux abuser, j'ai un seul souci qui est que cette fonction ne marche pas avec une feuille verrouillée... Ce que je souhaite car ce fichier est à destination d'une multitude d'utilisateurs !

    Voilà comment ça se présente:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub EnregistrerSaisie()
        Dim sheet
        Dim newRow As Integer
        Dim rng As Range
     
        Set sheet = ActiveWorkbook.Sheets("Suivi Souffrances")
        Set rng = ActiveWorkbook.Sheets("Suivi Souffrances").Range("A1").CurrentRegion
        newRow = rng.Rows.Count + 1
     
        sheet.Cells(newRow, 1).Value = CDate(BDate_constat)
        sheet.Cells(newRow, 2).Value = UCase(TextBox2.Text)

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 755
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 755
    Points : 28 606
    Points
    28 606
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Effectivement cela ne fonctionne pas avec une feuille protégée. J'ai d'ailleurs toujours trouvé cela curieux car la propriété End fonctionne avec une feuille protégée.
    Je suppose que tu connais le mot de passe donc je te conseille de déprotéger la feuille par code VBA et la protéger avec la propriété UserInterfaceOnly
    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub EnregistrerSaisie()
     Dim sht As Worksheet, rng As Range
     Dim newRow As Integer
     Set sht = ActiveWorkbook.Sheets("db") ' Sheets("Suivi Souffrances")
     With sht
     .Unprotect "Toto" ' Déprotection de la feuille
     .Protect "Toto", UserInterfaceOnly:=True ' Protection seulement pour User
      Set rng = .Range("A1").CurrentRegion
     End With
     newRow = rng.Rows.Count + 1
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  7. #7
    Candidat au Club
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Re,

    J'ai fais tes manip et donc les petits soucis :
    - Mot de passe: je n'en ai justement pas mis pour éviter l'oubli, mais de fait avec cette macro, il me demande un mot de passe quand même, et je ne peux donc rien y renseigner.
    L'objectif d'avoir mis un mot de passe est seulement de ne pas permettre à l'utilisateur de modifier la forme ni supprimer les lignes car il y a des textes cachés dans les colonnes plus loin de mon fichier.
    - Avec cette protection, je n'arrive plus à utiliser les boutons de filtre... bizarre alors que tout est bien paramétré pour permettre le filtre.

    Je vais réfléchir à tout cela ce WE et me replonger dedans Lundi.
    Merci en tout cas et bon WE !

  8. #8
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 755
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 755
    Points : 28 606
    Points
    28 606
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Si tu n'as pas mis de mot de passe, il suffit de l'enlever et si tu as prévu que l'utilisateur puisse filtrer les données malgré la protection de la feuille, il te suffit d'utiliser les arguments prévus à cet effet. Utilise l'enregistreur de macros pour connaître les arguments et les valeurs exactes.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  9. #9
    Candidat au Club
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Bonjour Philippe,

    Merci pour ton retour, maintenant tout fonctionne à souhait !

    Encore merci pour ton aide !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 26/01/2010, 16h01
  2. Un enregistrement sur une page et détail à la suite
    Par Patrick25300 dans le forum Rave
    Réponses: 2
    Dernier message: 21/01/2009, 22h58
  3. [MySQL] Redirection PHP suite à une saisie d'informations
    Par error404 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 03/06/2008, 21h24
  4. mise en page de la saisie aprés l'enregistrement dans une bd
    Par biba158 dans le forum Interfaces Graphiques en Java
    Réponses: 13
    Dernier message: 20/06/2007, 15h29
  5. Enregistrement d'une saisie en ligne
    Par flagadda dans le forum ASP.NET
    Réponses: 2
    Dernier message: 01/03/2007, 10h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo