Filtre et numéro de ligne

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 .

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,

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,

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

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

15test.xlsm (75.79 Ko)

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...

Bonjour ThauTheme et le forum,

Merci beaucoup cela fonctionne parfaitement.

Bonne journée

Rechercher des sujets similaires à "filtre numero ligne"