Ajout de données via un nom définit
Bonjour à tous,
Voilà, je suis entrain de créer plus ou moins un simulateur d'équipement à des fins personnelles. Ce simulateur a pour but de simuler un achat d'équipement pour ensuite optimiser mon personnage.
J'ai créer une base de données peu conventionnelle ( avec une mind map de tableaux nommés(définir un nom), c’est peut-être horrible mais ça a l'air de fonctionner pour le moment, sauf si on me dit le contraire
J'ai tout illustré via un classeur Excel que j'espère assez détaillé. Lisez dans le sens des cases bleu foncées avec les numéros jaune. La ligne grise que vous pourrez voir est la séparation de la "base de données" qui normalement est sur une autre feuille de classeur. Le bouton "ajouter" ne fonctionne pas, il est juste là pour illustrer mes propos.
Je n'arrivait pas à résoudre, et comme ça fait plusieurs jours que je pense à une alternative sans jamais en trouver, je vous demande ici.
Merci à vous, si jamais une réponse viendrait à être postée !
Jule04
EDIT : Nouveau fichier, plus simple !!
Bonjour,
J'aimerai relancer le sujet, je ne suis pas dans les règles et je m'en excuse, mais je ne pourrait relancer celui-ci aujourd'hui (du moins, plus tard) ou même demain. Cependant après 9 téléchargements, aucune réponse.
Si jamais vous avez des questions sur la compréhension ou autre chose, posez les ! N'hésitez pas, même si la question est vague, tant qu'elle est un minimum dirigée vers quelque chose, cela me va et j'y répondrai avec le plus de précision possible !
J'ai vraiment besoin de cette aide car elle bloque tout le processus de création de mon petit simulateur
Merci à vous de regarder ce sujet,
Jule04
EDIT : J'ai simplifié mon fichier Excel pour plus de compréhension, je me suis aperçu qu'il reflétait TROP de choses par rapport à ce que je demandait
Bonjour
Par rapport à ton 1er fichier dans lequel je n'avais rien compris, celui-ci me parait bien simple
A tester
Bonjour,
Merci beaucoup pour cette réponse. En effet, c'est en relisant mon document que je me suis gratté la tête et que je me suis dit "Euhhh...J'ai voulu dire quoi là ?". Ducoup je l'ai refait et apparemment c'est ce qu'il fallait faire
Par rapport à votre document, ce n'est pas exactement ce que je voudrait. Enfaite, lorsque que je sélectionne Renault, et que je clique sur Ajouter, la macro (ou le code VBA) devrait m'ajouter TOUTES les Renault de la liste de validation d'à côté. Enfaite, cette liste ne sert qu'à illustrer les différentes Renault disponible et rien d'autre au final. De plus, "tableaux de données" ne sont pas forcement si bien triés qu'il le sont là. J'aimerai qu'ils soient tous automatique. Quel seraient les fonctions ou codes à utiliser ?
En quelque sorte dans cet ordre :
- Je sélectionne ma marque
- Je clique sur "ajouter"
- le code recherche la valeur de la marque dans la feuille entière
- il trouve cette valeur
- il copie une par une tous les types de voiture jusqu'à trouver une case vide à la verticale vers le bas.
- Je change de marque
- je re-clique sur "ajouter"
- le code recherche la nouvelle valeur de la marque dans la feuille entière
- il trouve cette valeur
- il copie une par une tous les types de voiture de la marque sélectionnée (idem qu'avant) dans un tableau qui se trouve à sa droite à la même hauteur.
- Dès que j'ai ajouté 6 marques, il s’arrête et me marque une erreur si je re clique sur ajouter.
et il faut que je fasse attention aussi à pas prendre par exemple le Renault contenu dans "Marque" mais le Renault qui contient les données.
J'espère avoir été clair dans mes propos
Jule04
EDIT : J'ai trouvé un exemple très concret de ce que je veux. Ça fait exactement ce que je voudrait, mais en assez complexe. Je pense que des experts comme certains sur le forum sauront m'aider.
Bonsoir,
Je ne peut pas vérifier le fichier ce soir, j'ai tout de même réussi à dégoter un PC pour répondre
C'est si peu explicite ? J'ai assez de mal à exprimer ma pensée car elle reste assez complexe dans la réflexion que j'ai vis-à-vis de ça.
Mais mon nouveau fichier n'est pas assez explicite ?
Enfaite, j'ai trouvé plus ou moins ce que je voulais, sauf que je cherche maintenant à le simplifier et le rendre plus automatique (ne pas rajouter de "if" pour chacune des marques enfaite).
Je vérifie le fichier demain et je ferai mon feedback juste après !
En tout cas je vous remercie pour votre implication et votre aide !
Jule04
Bonsoir,
J'ai pu enfin vérifié votre aide. Et c'est PRESQUE ça
En faite, je ne veux pas que les tableaux soient complets. Je veux juste qu'à chaque clique sur "Ajouter", l'ajout change de tableau. Par contre, si le tableau 1 n'est pas rempli et que le tableau 2 l'est, on marque l'ajout sur le tableau 1 puis on continue sur un tableau 3 (s'il existe).
Mais je voit que votre code est beaucoup plus simple que celui que j'ai fait ! Et cette simplicité de code est ce que je recherche.
Cordialement,
Jule04
EDIT : Voici un code que j'ai fait dans le cadre d'une simulateur où j'ajoute des objets à mon personnage :
Sub ajouterstuff()
If Range("D17") = "" Then
MsgBox "Veuillez choisir un objet"
Exit Sub
End If
If Range("A5") = "" Then 'Si A5 est vide on marque dans le premier tableau
Range("Tableau") = Range("objet").Value
ElseIf Range("A5") <> "" And Range("B5") = "" Then
Range("Tableau1") = Range("objet").Value
ElseIf Range("A5") <> "" And Range("B5") <> "" And Range("C5") = "" Then
Range("Tableau2") = Range("objet").Value
ElseIf Range("A5") <> "" And Range("B5") <> "" And Range("C5") <> "" And Range("D5") = "" Then
Range("Tableau3") = Range("objet").Value
ElseIf Range("A5") <> "" And Range("B5") <> "" And Range("C5") <> "" And Range("D5") <> "" And Range("E5") = "" Then
Range("Tableau4") = Range("objet").Value
ElseIf Range("A5") <> "" And Range("B5") <> "" And Range("C5") <> "" And Range("D5") <> "" And Range("E5") <> "" And Range("F5") = "" Then
Range("Tableau5") = Range("objet").Value
End If
End SubJe voudrait que le mot "objet" ici, renvoi à un nom !
Par exemple à la case D17 (là où est l'objet que je veut ajouter) il y a écrit "Marteau de boucher". Je voudrait que "objet" face référence à un nom défini (en l'occurence "Marteau de boucher") et présent dans le gestionnaire de noms pour ensuite inscrire les valeurs de ce nom dans mon tableau.
Vu que c'est très peu clair apparemment, j'ai fait une vidéo pour que vous compreniez (je l'espère) un peu mieux !
http://www.youtube.com/watch?v=MgWphVkVBCc&feature=youtu.be
Voilà !
Jule04
EDIT : Vous n'etes pas obligé d'utiliser le meme tableau que moi. C'est surtout la logique que je cherche à faire comprendre ici.
Bonjour à toi aussi
Très bien la vidéo
Ton fichier tu le gardes ou tu penses à le partager
Je n'ai pas trop envie de faire un fichier alors que tu as en un tout prêt
Bonjour,
Oups ! Je pensais l'avoir tout de même joint... La fatigue
Merci pour votre réponse.
Jule04
Merci beaucoup !
Ca fonctionne sur le fichier que je vous ai présenté.
Maintenant, en retranscrivant le tout sur mon classeur original, il ne m'affiche que pour deux ajout, puis plus rien.
Voici mon code :
Sub ajouterstuff()
Dim Colonne As Integer
If Range("D17") = "" Then
MsgBox "Veuillez choisir un objet"
Exit Sub
End If
If Range("B5") = "" Then
Colonne = 2
Else
Colonne = Range("A5").End(xlToRight).Column + 1
If Colonne > 7 Then
MsgBox "Vous ne pouvez pas rajouter d'équipement"
Exit Sub
End If
End If
Cells(5, Colonne).Resize(Range(Range("D17")).Rows.Count).Value = Range(Range("D17")).Value
Cells(4, Colonne) = Range("C21")
End SubJe ne voit vraiment pas ce qui cloche. J'ai juste changé les coordonnées de cases, rien de plus sachant que mon tableau original ressemble beaucoup à celui que j'ai donné en exemple.
Bonsoir
Je ne vois rien qui puisse empêcher l'écriture
Tu peux rajouter un MsgBox pour savoir où la macro va écrire
End If
MsgBox "Colonne : " & Colonne
Cells(5, Colonne).Resize(Range(Range("D17")).Rows.Count).Value = Range(Range("D17")).Value
Cells(4, Colonne) = Range("C21")
End SubSinon ton fichier va être indispensable
Il se bloque systématiquement sur colonne 3. Et n'avance plus.
Je tient à garder mon fichier plus ou moins secret pour le moment. Puis-je l'envoyer par MP sur le forum ? Puis exposer la réponse au problème ici ?
Le sujet est résolu, j'ai envoyé mon fichier à Banzai64 et il m'a répondu ceci :
Bonjour
Ton tableau n’est pas le même
Dans le fichier du forum tu as une colonne remplie avant tes tableaux (elle est utile pour la fonction End(xlToRight) )
Dans ce fichier cette colonne n’est pas présente donc obligé d’utiliser une autre méthode pour trouver le tableau vide
Une boucle qui commence à la colonne B et finit à la colonne G
On regarde à la ligne 5 dans chaque colonne si celle-ci est vide
Remplaces la macro actuelle par celle-ci
Sub ajouterstuff() Dim Colonne As Integer If Range("E17") = "" Then MsgBox "Veuillez choisir un objet" Exit Sub End If For Colonne = 2 To 7 If Cells(5, Colonne) = "" Then Exit For Next Colonne If Colonne > 7 Then MsgBox "Les tableaux sont complets" Exit Sub End If Cells(5, Colonne).Resize(Range(Range("E17")).Rows.Count).Value = Range(Range("E17")).Value Cells(4, Colonne) = Range("E17") End SubAmicalement
Banzai64