Filtre et numéro de ligne Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
Avatar du membre
Nattybb
Jeune membre
Jeune membre
Messages : 10
Inscrit le : 20 décembre 2016
Version d'Excel : 2010

Message par Nattybb » 9 avril 2019, 16:01

Bonjour,

Après plusieurs recherches web, forum et essais avec tout ce que j'ai trouvé, je me tourne vers vous car je ne comprends pas ce pourquoi cela ne fonctionne pas :oops: .
Je suis en train de créer un outil qui permet de saisir, ou modifier des fiches.
Mon problème concerne la modification de fiche.
Une box permet de faire une recherche de fiche dans la base de données à partir de filtres.
Une fois la fiche sélectionnée, toutes les informations concernant cette fiche apparaissent dans l'onglet fiche sous un format spécifique.
Jusque là pas de problème
Je peux modifier, mettre à jour les informations, puis je les enregistre et c'est là que ça bloque.

Je n'arrive pas à sélectionner le numéro de la ligne de la fiche dans la base de données filtrée pour y ajouter les modifications. Dans l'onglet BDD, seulement 2 lignes apparaissent la ligne 1 avec l'intitulé des colonnes et la ligne X qui correspond à la fiche recherchée.

voici le code une partie de la macro. Cette macro permet d'enregistrer une nouvelle fiche ou d'enregistrer des modifications d'une fiche existante (Filtre).
Option Explicit
Dim Vligne 'ligne sur laquelle on va saisir ou modifier une fiche

Sub Enregistrer_Fiche()
'Copie des informations de la feuille Fiche dans le tableau de BDD: création d'une nouvelle fiche=nouvelle ligne

'Création de fiche
If Sheets("Fiche").Range("F3") = "SAISIE D'UNE FICHE" Then

'Ajoute les informations de la nouvelle fiche en dernière ligne
Vligne = Sheets("BDD").Range("A1").CurrentRegion.Rows.Count + 1 'ajoute les informations de la nouvelle fiche en dernière ligne
End If

'Modification du contenu de la fiche sélectionnée par la box avec des filtres
If Sheets("Fiche").Range("F3") = "MISE A JOUR D'UNE FICHE" Then
Vligne = Sheets("BDD").Range("A1").CurrentRegion.Offset(1, 0).Resize(.Rows.Count - 1, 1) _
                      .SpecialCells(xlCellTypeVisible)
End If

  .............
 End sub
Le problème concerne
Vligne = Sheets("BDD").Range("A1").CurrentRegion.Offset(1, 0).Resize(.Rows.Count - 1, 1) _
                      .SpecialCells(xlCellTypeVisible)
J'ai essayé plusieurs manière de l'écrire mais rien ne fonctionne.
Pourriez-vous me dire ce quine fonctionne pas.

En vous remerciant,
Bonne journée,
G
GNIN
Membre habitué
Membre habitué
Messages : 73
Appréciations reçues : 6
Inscrit le : 6 février 2019
Version d'Excel : 2003
Version de Calc : 4.3

Message par GNIN » 9 avril 2019, 16:56

Bonjour,

J'espère que tu ne m'en voudras pas, mais j'ai du mal à comprendre ce que tu veux faire exactement.

Si je prends la ligne de code suivante:
'Ajoute les informations de la nouvelle fiche en dernière ligne
Vligne = Sheets("BDD").Range("A1").CurrentRegion.Rows.Count + 1 'ajoute les informations de la nouvelle fiche en dernière ligne

Tu écris en commentaire: Ajoute les informations....
En fait, cette ligne de code n'ajoute rien. Elle mémorise dans la variable Vligne le n° de la première ligne non utilisée de la colonne A de l'onglet BDD.

Tu peux effectivement par la suite utiliser Vligne pour écrire des informations.
exemple: Sheets("BDD").Cells(Vligne,1).value="xxx" 'écrit sur la cellule ligne Vligne, colonne A
ce qui a pour effet d'écrire à la suite des données existantes dans BDD.

Peut-être qu'avec un fichier joint, il serait plus aisé de te répondre.

Bien cordialement,
Avatar du membre
ThauThème
Passionné d'Excel
Passionné d'Excel
Messages : 3'131
Appréciations reçues : 87
Inscrit le : 19 octobre 2014
Version d'Excel : 2010 FR

Message par ThauThème » 9 avril 2019, 17:14

Bonjour Nattybb, bonjour le forum,

Pas très clair !... je n'ai pas compris si tu utilisais une UserForm ou un contrôle ActiveX dans l'onglet car une Box ça ne me parle pas.
Sinon, pour trouver la ligne pourquoi ne pas recherche avec la fonction Find.Range de VBA ? Si tu as une cellule de la ligne qui est unique dans le tableau (Code produit / Nº Identifiant, etc.) . En imaginant que la cellule soit dans la colonne 1 tu peux utiliser un code du style :
Dim R As Range

Set R = Sheets("BDD").Columns(1).Find(Valeur_de_la_Cellule, , xlValues, xlWhole)
If Not R Is Nothing Then Vligne = R.Row
À plus,

ThauTheme


Je suis Charlie
VBA m'éclate, les formules m'ennuient ! Je n'y peux rien c'est comme ça...
Avatar du membre
Nattybb
Jeune membre
Jeune membre
Messages : 10
Inscrit le : 20 décembre 2016
Version d'Excel : 2010

Message par Nattybb » 10 avril 2019, 09:02

Bonjour,

Merci pour vos réponse.
je vous met en pj le fichier.
Vous arrivez sur un onglet Menu avec 2 possibilités
- Saisir une Fiche : fait référence à la macro Saisie
- Modifier une fiche : fait référence à la macro Modif avec apparition d'une UserForm pour sélectionner la bonne fiche avec des filtres (Région, Département, ...).

Après clique sur un des 2 boutons: vous êtes dirigé sur l'onglet Fiche.

Le problème concerne le clique sur le bouton Enregistrer quand on est dans Modifier une fiche. (Cliquer sur modifier Fiche de l'onglet Menu, choisir une fiche avec la UserForm, faire une modif et cliquer sur enregistrer)
Je n'arrive pas à ce que les modifications s'enregistre sur la ligne de la fiche, de plus

Merci beaucoup pour votre aide.
Bonne journée
test .xlsm
(75.79 Kio) Téléchargé 2 fois
Avatar du membre
ThauThème
Passionné d'Excel
Passionné d'Excel
Messages : 3'131
Appréciations reçues : 87
Inscrit le : 19 octobre 2014
Version d'Excel : 2010 FR

Message par ThauThème » 10 avril 2019, 15:53

Bonjour Nattybb, bonjour le forum,

En déclarant la variable Vligne publique elle garde sa valeur pour l'ensemble des modules et procédures de ton projet VBA. Donc une fois que tu l'as définie dans la procédure [Modif] :
Vligne = ActiveCell.Row
tu n'as pas besoin de la redéfinir dans la procédure Enregistrer_Fiche...

Il te suffit donc de modifier la déclaration de la variable Vligne :
Public Vligne As Integer 'ou Long si tu dépasses 32 000 lignes
Puis, le début du code :
Sub Enregistrer_Fiche()
'Copie des information de la feuille Fiche dans le tableau de BDD
'Vérifier si creation ou MAJ
If Range("A3") = "SAISIE D'UNE FICHE" Then
'Vligne = Sheets("BDD").Range("A500000").End(xlUp).Row+1
Vligne = Sheets("BDD").Range("A1").CurrentRegion.Rows.Count + 1
Else
Vligne = Sheets("BDD").Range("A1").CurrentRegion.Offset(1, 0).Resize(.Rows.Count - 1, 1)
                      .SpecialCells (xlCellTypeVisible) 'ligne qui correspond à l'intitulé de la fiche
End If
devient:
Sub Enregistrer_Fiche()
'Copie des information de la feuille Fiche dans le tableau de BDD
'Vérifier si creation ou MAJ
If Range("A3") = "SAISIE D'UNE FICHE" Then Vligne = Sheets("BDD").Range("A1").CurrentRegion.Rows.Count + 1

Je n'ai pas regardé toutes les lignes de ton code mais il est possible que tu doives réinitialisé la variable Vligne à un certain moment...
À plus,

ThauTheme


Je suis Charlie
VBA m'éclate, les formules m'ennuient ! Je n'y peux rien c'est comme ça...
Avatar du membre
Nattybb
Jeune membre
Jeune membre
Messages : 10
Inscrit le : 20 décembre 2016
Version d'Excel : 2010

Message par Nattybb » 11 avril 2019, 09:12

Bonjour ThauTheme et le forum,

Merci beaucoup cela fonctionne parfaitement. ::D
Bonne journée
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message