Ajout clé unique par ligne + Import conditionel Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
J
Jay_Stu
Membre habitué
Membre habitué
Messages : 51
Inscrit le : 13 novembre 2014
Version d'Excel : 2010

Message par Jay_Stu » 20 décembre 2014, 15:52

Bonjour à tous,

Je me met doucement à toucher à du VBA, donc attention les codes présents ne sont surement pas les plus beaux, mais ils fonctionnent (pour ma part c'est l'essentiel pour le moment :wink:)! Mais je bloque sur trois actions à coder pour le moment.

Donc j'ai deux fichiers, pour deux usages complémentaires :

"Fichier personnel" : le premier pour une personne qui doit remplir un "formulaire" puis cliquer sur Ajouter, ce qui vient copier les données dans l'onglet Reporting.
Je souhaite associer à chaque entrée un chiffre nommé "ID" sur l'onglet, du type 1,2,3,4 (etc)..
-> Besoin d'aide là dessus s'il vous plait !

Je souhaite ensuite pouvoir aller chercher une ligne dans la base via son ID pour la supprimer. Et que dans la base Reporting, il n'y ai pas de saut de chiffres du coup!
-> Besoin d'aide là dessus aussi s'il vous plait !


Enfin, le deuxième fichier "Tableau de bord" : je souhaite pouvoir importer des différents "Fichiers personnels" les données de l'onglet "Reporting", selon deux critères : Années et Mois, qui font partie des données à entrer dans le formulaire !
-> Besoin d'aide là dessus aussi s'il vous plait !

S'il y a besoin de plus d'informations, n'hésitez pas à me le dire si je n'ai pas été assez clair !
Merci de votre aide
Bien cordialement,
Modifié en dernier par Jay_Stu le 6 janvier 2015, 22:46, modifié 1 fois.
Avatar du membre
Yvouille
Passionné d'Excel
Passionné d'Excel
Messages : 9'017
Appréciations reçues : 77
Inscrit le : 6 avril 2007
Version d'Excel : 2016

Message par Yvouille » 22 décembre 2014, 08:02

Salut,

Dans ta macro, tu n’as pas déclaré la variable i, donc le code bloque sur la ligne For i = 1 To Sheets.Count.

Mais comme je ne comprends pas pourquoi tu as placé ce passage
For i = 1 To Sheets.Count
Sheets(i).Visible = True
Next
puisque les feuilles ne sont jamais masquées, je te propose de le supprimer.

Ensuite, tu n’es pas obligé de sélectionner une feuille afin d’y travailler dessus. J’ai donc modifié un tout petit peu tes lignes de codes permettant de ‘repérer le numéro de la dernière ligne vide’ et de ‘créer la clé de recherche unique par utilisateur’. Personnellement j’effectuerais cette recherche autrement, mais on ne va pas en faire trop à la fois.

Ensuite, je ne montre comment tu pourrais effectuer tes reports de la feuille ‘Formulaire’ à la feuille ‘Reporting’ sans effectuer ces allers-retours entre tes feuilles, même si tu as rendu la chose invisible par l’instruction Application.ScreenUpdating = False.

Suite à cela, j’en viens à ta toute première question : tu dis vouloir une incrémentation des valeurs ID dans ta feuille ‘Reporting’, mais tu as déjà une incrémentation en place !!!!! Peux-tu alors préciser ce qui te dérange dans ce qui existe déjà afin que l’on puisse te proposer autre chose ?

Pour tes autres questions, on verra par la suite, ça ne sert à rien de brûler les étapes.

Cordialement.
EXFichier personnel_V1.xlsm
(60.09 Kio) Téléchargé 45 fois
Yvouille

Valais de Coeur
J
Jay_Stu
Membre habitué
Membre habitué
Messages : 51
Inscrit le : 13 novembre 2014
Version d'Excel : 2010

Message par Jay_Stu » 23 décembre 2014, 16:19

Bonjour,

Merci pour ta réponse !
effectivement ton code est bien plus propre que le mien ! je vais le décrypter pour mieux le comprendre !

Merci pour ce point!

Pour répondre à ta question concernant la clé, en fait elle commence à 2, et non pas à 1. Il manque à mon avis une ligne qui permette de définir la clé n°1 .

A partir de là, vient ma deuxième question, pouvoir identifier la ligne pour la supprimer / modifier (si possible en la ré-intégrant au formulaire ?)

Merci de l'aide du forum =)
Avatar du membre
Yvouille
Passionné d'Excel
Passionné d'Excel
Messages : 9'017
Appréciations reçues : 77
Inscrit le : 6 avril 2007
Version d'Excel : 2016

Message par Yvouille » 23 décembre 2014, 23:13

Salut,

Pour ton premier problème, je n’avais effectivement pas pensé d’aller contrôler si ta manière de faire fonctionnait dès le départ, c’est-à-dire si la feuille ‘Reporting’ ne comportait que la ligne des titres en rien d’autre. J’avais constaté que si tu avais déjà des lignes en place après les titres, ton incrémentation fonctionnait bien, c’est tout.

Je t’avais quand même dit :
Yvouille a écrit :Personnellement j’effectuerais cette recherche autrement, mais on ne va pas en faire trop à la fois.
Selon moi, afin de résoudre ce problème, il suffit de remplacer la ligne
'Clé de recherche unique par utilisateur
Sheets("Reporting").Cells(LI, 1) = (LI - 1) + 1
Par la ligne
'Clé de recherche unique par utilisateur
Sheets("Reporting").Cells(LI, 1) = (LI - 1)
Merci d’effectuer des essais. Pour les autres questions, on peut voir lorsque ce premier problème sera résolu.

Amicalement.
Yvouille

Valais de Coeur
J
Jay_Stu
Membre habitué
Membre habitué
Messages : 51
Inscrit le : 13 novembre 2014
Version d'Excel : 2010

Message par Jay_Stu » 24 décembre 2014, 10:45

Bonjour Yvouille, Bonjour au forum

Tout d'abord mes meilleurs voeux à tous pour l'année 2015 !

Merci pour ta réponse. Effectivement, ta ligne d’identification de clé fonctionne (j'ai effectué quelques tests!)
'Clé de recherche unique par utilisateur
Sheets("Reporting").Cells(LI, 1) = (LI - 1)
Je me suis également penché sur la ligne de copie des entrées, et je pense avoir compris, ce qui va me permettre de modifier beaucoup d'autres fichiers !


Pour la suite, c'est à dire supprimer une ligne, j'ai repris/ écrit / modifié ce code suivant et cela fonctionne comme je le souhaite
Sub Supprimer_fiche()

'Permet d'éviter les A/R entre les feuilles lors de la copie
Application.ScreenUpdating = False

'Décalration et identification des variables
Dim line As String
Dim FoundCell As Range

'Récupère le numéro ID à supprimer
line = Range("K15").Value

'Positionne et supprime
Sheets("Reporting").Select
   Set FoundCell = Range("A:A").Find(what:=line)
    Do Until FoundCell Is Nothing
        FoundCell.EntireRow.Delete
        Set FoundCell = Range("A:A").FindNext
   Loop
   
'Reinitialise la cellule

Sheets("Formulaire").Range("J15").ClearContents

'Repositionne le curseur

Sheets("Formulaire").Select
Range("D10").Select


End Sub
Qu'en penses-tu? Ce n'est surement pas le code le plus joli et simplifié mais cela fonctionne !

La troisième étape est celle du bouton "Modifier une entrée"

Je souhaite pouvoir identifier une ligne via le n° ID comme pour la suppression, mais qu'en cliquant sur le bouton les informations saisies remontes dans le formulaire.
Une fois les modifications apportées, pour valider la fiche en gardant le n°ID utilisé pour la chercher.

Pourrais-tu, ou quelqu'un d'autre du forum m'aider s'il vous plait?

Viendra enfin ma dernière question qui consiste à importer les données de l'onglet reporting dans le fichier Tableau de bord en fonction du Mois et de l'année indiqués dans le fichier tableau de bord.

Merci encore de votre aide à tous,
Bien cordialement,
Jay
Modifié en dernier par Jay_Stu le 6 janvier 2015, 22:45, modifié 1 fois.
J
Jay_Stu
Membre habitué
Membre habitué
Messages : 51
Inscrit le : 13 novembre 2014
Version d'Excel : 2010

Message par Jay_Stu » 6 janvier 2015, 17:39

Petit Up car j'ai édité mon message précédent !
(je ne sais pas si cela est autorisé ou non ! )
Avatar du membre
Yvouille
Passionné d'Excel
Passionné d'Excel
Messages : 9'017
Appréciations reçues : 77
Inscrit le : 6 avril 2007
Version d'Excel : 2016

Message par Yvouille » 6 janvier 2015, 21:31

Salut,

Editer un message ne devrait être fait que très peu de temps après l’avoir écrit, pour corriger un passage par exemple. Sinon tu prends le risque que la personne avec qui tu discutes ait déjà lu ton dernier message et – comme elle n’est pas avertie que tu as édité ton message – n’y revienne plus. C’est exactement ce qui s’est passé avec moi. Tu as maintenant envoyé une nouvelle ‘Réponse’ et j’en ai été averti.

En ce qui concerne les autres membres, ils sont très peu à s’intéresser à une discussion déjà bien entamée.

Revenons-en à ta dernière demande. Tu devrais essayer de te mettre à ma place et te dire : ‘Est-ce que ce gars qui ne connaît rien à mes fichiers peut facilement comprendre ce que je dis ?‘ Je peux donc te dire que non. Tu parles du bouton ‘Modifier une entrée’ et – malgré toute ma bonne volonté, je ne l’ai pas trouvé. Mais tu ne fais pas les choses simplement en me fournissant un fichier avec une feuille sur laquelle il faut chercher ton bouton, tu me fournis deux fichiers avec chacun plusieurs feuilles. Après avoir cherché ce bouton sans succès, je laisse tomber ta demande.

Maintenant, si tu me dis par exemple : ‘Dans le fichier X, sur la feuille Y, proche de la cellule AB1000, tu as un bouton qui se nomme très précisément XXXXX et il est relié à la macro nommée très précisément AAAA, alors peut-être que j’aurais à nouveau du plaisir à tenter de t’aider.

Indique aussi avec précision, mais en allant droit au but, ce qui ne fonctionne pas dans ta macro.

Evite aussi de poser 36 questions à la fois. Une question clairement posée et rapidement résolue permet d’avancer plus facilement que si tu désires brûler les étapes.

Enfin, je n’ai pas trop l’envie de consulter ton code qui fonctionne bien juste pour voir si l’on pourrait l’améliorer un tout petit peu. En tout cas pas si c’est dans le même fil que celui où tu as 36 autres problèmes.

A te relire.
Yvouille

Valais de Coeur
J
Jay_Stu
Membre habitué
Membre habitué
Messages : 51
Inscrit le : 13 novembre 2014
Version d'Excel : 2010

Message par Jay_Stu » 6 janvier 2015, 22:45

Bonsoir Yvouille,

Je prends note de tes remarques et vais tâcher de les mettre en application.
Par ailleurs je m'excuse car le fichier uploadé n'était pas le bon (pas de bouton actif / ni de macro).
Enfin, je comprends le fait de devoir séparer chaque problématique.

Je reprends donc en essayant d'être plus claire :

Dans le fichier "EXFichier personnel", sur l'onglet "Formulaire", j'ai un bouton/image Modifier dont le numéro d'ID unique est à renseigner en cellule J19.
Il est associé à la Macro nommée "Modifier_Fiche"

En renseignant, par exemple l'ID n° "2" (référence à la base de l'onglet "Reporting"), je souhaite y retrouver toutes les informations saisies précédemment.

Le code suivant fait planter mon Excel et m'indique " La méthode copy du range a échoué "

Le code de la macro Modifier_fiche :
Sub Modifier_fiche()

'Permet d'éviter les A/R entre les feuilles lors de la copie
Application.ScreenUpdating = False

'Décalration et identification des variables
Dim line As String
Dim FoundCell As Range
Dim LI As Integer, x As Integer


'Récupère le numéro ID à supprimer
line = Range("K16").Value

'Recherche et copie les données de la ligne
Sheets("Reporting").Select
   Set FoundCell = Range("A:A").Find(what:=line)
    Do Until FoundCell Is Nothing
        FoundCell.EntireRow.Copy
        Set FoundCell = Range("A:A").FindNext
   Loop
   
'Colle les données de la ligne
For x = 1 To 28
    Sheets("Formulaire").Range("D" & x + 9) = Cells(LI, x + 1)
Next x
   
   
End Sub
Merci de ton aide,
Bien cordialement,
Jay
EXFichier personnel.xlsm
(99.72 Kio) Téléchargé 20 fois
Avatar du membre
Yvouille
Passionné d'Excel
Passionné d'Excel
Messages : 9'017
Appréciations reçues : 77
Inscrit le : 6 avril 2007
Version d'Excel : 2016

Message par Yvouille » 7 janvier 2015, 19:38

Salut,

Ton fichier semble tout pourri. Par exemple tu n’as pas de bouton nommé ‘Modifier’. Tu as un bouton sans nom et avec l’image d’un cayon vers la cellule H19, tu as un texte ‘Modifier’ en I19 qui ne semble relié à aucune macro et tu as un bouton avec un V blanc sur fond vert vers la cellule K19.

J’ai tenté de lancer macro reliée au bouton vers la cellule H19 et ça boge car dans ton code tu effectues une recherche basée sur le contenu de la cellule K16 (ligne de code : line = Range("K16").Value), mais cette cellule ne contient rien et rien n’indique que l’on doit y entrer une valeur.

N’ayant pas l’envie de me demander ce que tu as bien pu modifier sur ton fichier de base afin de créer ce fichier-exemple-pour-le-forum, je vais te demander de bien vouloir indiquer ce fil comme ‘Résolu’ et d’en ouvrir un autre sur lequel j’espère que tu aies plus de chance.

Yvouille a écrit :Maintenant, si tu me dis par exemple : ‘Dans le fichier X, sur la feuille Y, proche de la cellule AB1000, tu as un bouton qui se nomme très précisément XXXXX et il est relié à la macro nommée très précisément AAAA, alors peut-être que j’aurais à nouveau du plaisir à tenter de t’aider.

Indique aussi avec précision, mais en allant droit au but, ce qui ne fonctionne pas dans ta macro.
Peut-on dire que tu as vraiment suivi ces conseils ?


Désolé :( :(

Amicalement.
Yvouille

Valais de Coeur
J
Jay_Stu
Membre habitué
Membre habitué
Messages : 51
Inscrit le : 13 novembre 2014
Version d'Excel : 2010

Message par Jay_Stu » 7 janvier 2015, 20:56

Bonsoir,

Ok je vais m'y prendre autrement du coup !

Merci pour tes conseils sur les premières lignes de code néanmoins !

Bonne soirée


Gilles
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message