XL 2016 [Résolu]Formulaire adaptatif

Hynnuh

XLDnaute Junior
Bonjour à tous,
voici ce que je voudrais faire (et j'ai peur de m’être embarqué dans une usine à gaz)

Feuille 1 j'ai une liste de tests
Feuille 2 j'ai une fiche qui reprends et met en page les tests que j'ai validé sur la feuille 1
Feuille 3 J'ai un tableau qui se créé (reprenant en gros la transposée de la feuille 2)

Objectif:
feuille 1 des cases à cocher pour sélectionner les tests qui sont concernés par la référence
feuille 2 la fiche est mise en page et j'y rentre mes exigences
Feuille 3 le tableau me sert à rentrer mes résultat pour chaque produit (qui par la suite servira à alimenter d'autre tableaux rempli à base de rechercheV) .

je vous joint un fichier excel qui résume en gros ma pensée
avec un petit test de "boucle" SI .

mais là je bloque et je penses qu'un peu de VBA s'impose :/

Merci d'avances aux aventuriers Exceliens :)
 

Pièces jointes

  • Essai n°0.xlsx
    618.9 KB · Affichages: 45

Hynnuh

XLDnaute Junior
Tout d'abord merci pour ton retour toujours aussi rapide

le principe est le suivant pour les deux macros que je souhaite:

je souhaite qu'avant la copie des tableaux (sélection en feuil1 pour une copie en feuille 2), il y ai une vérification de si des données sont déjà enregistrées ou pas
si il y a des donnés,
on les sauvegarde/copie (ici c'était sur la feuille liste en AA), on met à jour le tableau (en ajoutant les T qui ont été ajoutés lors de la selection en feuil1)
puis on vient remettre les données en face des T qui étaient préremplis au préalable.
(feuil exemple, exemple 1)

Pour la seconde l'idée est la même à un détail près,
les valeurs ne sont pas sur une seule colonne plusieurs lignes
mais sur plusieurs lignes plusieurs colonnes.

Il faudrait donc que tout les résultats du tableau (en feuil 3) soient conservées, mis à jour avec les nouvelles colonnes de test (généré à partir de la feuil2)
puis que les valeurs remplies au préalable reprennent leur place en face des bons tests correspondant
(feuil exemple, exemple 2)



En ce qui concerne le rangement des macro,
j'avoue que pour le moment ni l'optimisation de la mise en page ni du code n'a été ma préoccupation (tant que ça fonctionne ça me va^^) mais c'est bien sur prévu :)

Merci encore,
Hynnuh
 

Pièces jointes

  • Test 2.xlsm
    101.4 KB · Affichages: 23

vgendron

XLDnaute Barbatruc
hello
bon... j'ai pas compris ce que tu souhaitais faire..
quelles infos souhaites tu copier coller.. de quelle feuille vers quelle feuille? sous quelles conditions..?

j'ai fait un gros tri sur tes macros..
une règle à connaitre..
quand tu fais
with sheets("nomFeuille") ' ou with CodeNameFeuille
dans le bloc with. il faut faire référence aux zones avec un .

ex:
with sheets("Fiche Controle")
.range("A19:A28").copy
end with

pas la peine de remettre
with ...
sheets("Feuille Controle").range.....
end with

par contre..
si la feuille Révision est active..
et que tu fais
with sheets("Fiche Controle")
range("A19:A28").copy
end with

c'est la zone de la feuille ACTIVE qui sera copiée...

j'ai aussi modifié la zone nommée "Résultats"
 

Pièces jointes

  • Test 2 Rev2.xlsm
    106.9 KB · Affichages: 22

Hynnuh

XLDnaute Junior
merci pour les infos,
Ah mince je pensais que les exemples étaient clairs,

je vais essayer d’être plus explicite avec un exemple de comment je vois les actions les une après les autres.
feuil 1 je sélectionne les T que je veux
je clique ensuite sur le bouton "générer la fiche labo"
ca me génère la feuille 2 (pour le moment ça le fait super bien)
je remplie en feuill 2 les exigences puis je créé le tableau associé (en cliquant sur le bouton "générer le tableau", qui fonctionne parfaitement aussi)

maintenant je souhaite faire une mise à jour,
je retourne donc sur la feuil1, je sélectionne des T que je n'avais pas pris avant (avant j'avais T1 T4 maintenant je veux avoir T1 T2 T3 T4)
je souhaiterais ne pas perdre les exigences entrées en feuil2 pour les T1 et T4 remplis au préalable et que après avoir recliqué sur le bouton "générer fiche labo"
je me retrouve avec T1 T2 T3 T4 MAIS que les exigences de T1 et T4 soient restées comme avant.

De même quand je cliquerais sur "générer le tableau", je souhaiterais que tous les résultats que j'ai pu enregistrer au préalable dans la feuil3 ne soient pas perdues.

d'où l'exemple,
on garde tout comme avant , on est venu ajouter les T supplémentaires qu'on a sélectionné en page 1, tout en conservant les valeurs qui étaient remplies avant

j'ai un peu de mal à l'exprimer verbalement plus clairement du coup j'ai fait un arbre

j'ai pour le moment les codes suivant qui fonctionne:
-faire le test si en G19 il y a une valeur, dans ce cas on copie tout le tableau sur un autre onglet
-générer la fiche labo
mais je ne sais pas comment "remettre les exigences à leur place

-faire le test si en C18 il y à une valeur et copier le tableau en entier
-générer le nouveau tableau
je ne sais pas comment remettre les valeurs dans la bonne case une fois le nouveau tableau généré



j’espère que ça a été plus clair :/
 

Pièces jointes

  • arbre.pdf
    212.5 KB · Affichages: 19

vgendron

XLDnaute Barbatruc
Avant de répondre à la question. en fait. j'essaie de comprendre ton fichier et son fonctionnement..
et comme je te l'avais dit.. toutes les macros mélangées, et qui semblent etre en doublon pour certaines.. c'est le boxon..
du coup. j'essaie de faire le tri et j'ai une question..
j'ai cliqué sur la macro "RAZ" qui efface TOUTE la feuille 1 (Fiche Controle Générique )===> déjà. travailler avec les codename plutot que le nom de la feuille.. pas facile pour s'y retrouver..
donc la. j'ai une feuille "Fiche Controle générique" qui ne contient plus que les lignes 1 à 17

De ce que je comprend.. pour remettre les tests (T1 T2....) il faut aller les chercher dans la feuille "Liste tests" avec 1 des macros (CetT_nu - CetT_SF - CetT_DF - Maille_SF - Maille_DF - ou Maille_Nu

Question.. comment et où sont appelées ces différentes macros?
les zones qu'elles vont chercher dans la feuille "Liste tests" sont vides...?? erreur ou tu n'as pas posté le "vrai" document?
vu qu'elles font toutes la meme chose (à la zone, au texte et au bouton près.), on pourrait rassembler tout ca dans une seule macro..
 

vgendron

XLDnaute Barbatruc
question suivante sur la macro Tableau qui génère le tableau de résultats (Feuille3) à partir de la fiche de Controle..
pourquoi laisses tu toutes les colonnes ?
ex: je viens de créer une fiche de controle (MailleDF) avec les tests T1 T2 et T3
j'ai bien un tableau avec T1 T2 T3 créés, mais il me reste aussi les colonnes T à CL....?
 

Hynnuh

XLDnaute Junior
Effectivement je n'ai pas mis le document final,

je reste avec feuil1 feuil2 pour le moment car c'est moins long à réécrire et au moins je sais qui fait quoi tout simplement, et je peux ainsi passer d'un with générique auw sheets("feuil") sans erreur (du moins pour le moment)

en ce qui concerne le mélange des macros

j'ai essayé de regroupé les modules en fonctions des pages sur lesquels on trouve le bouton de la macro associée,
module 1 pour la feuil 1
module 2 pour la feuil 2
module 3 pour la feuil 3

je t’envoie le fichier épuré de toutes les macro non utiles dans le cas présent et qui fonctionnent comme elle le doivent.
je met en module 7 ce que je souhaite

le fonctionnement de mon tableau est détaillé dans l'arbre envoyé juste avant en définitive
feuil 1 tu choisis les tests
feuil 2 tu mets les exigences
feuils 3 tu as le tableau que tu rempli


ça fait plusieurs semaines que je bosses dessus et il est vrai qu'a force d’être dedans tout semble "clair" pour moi,
mais je comprends la confusion si on ne sait pas à quoi ni comment il va servir.


j’espère que ce nouveau fichier va aider à y voir plus clair.
 

Pièces jointes

  • TEST EPURE.xlsm
    82.4 KB · Affichages: 19

vgendron

XLDnaute Barbatruc
Bon.. comme j'avais commencé et terminé de reprendre tous tes codes.. pas trop envie de recommencer sur ton dernier fichier :-D
je poste la dernière version sur laquelle on va pouvoir travailler à peu près proprement..
regarde les différents codes.. il y a des commentaires et questions..
 

Pièces jointes

  • Test 2 Rev2.xlsm
    110.3 KB · Affichages: 17

Hynnuh

XLDnaute Junior
Ah oui effectivement il y a eu du changement^^
bon du coup même si la macro AJOUTER_Test est efficace,
elle ne rend pas tout à fait ce que je voudrais, je m'explique.

Pour le moment tout mon tableau fonctionne parfaitement si on l'utilise pour la première fois, nouvelles création de tableaux, d'exigences ou de fiche labo.

Si je veux faire une mise à jour des exigences, cela ne pose pas de problème ça peut se faire.
en revanche si je veux faire une mise à jour de la fiche labo, et donc du tableau en feuil3 là ça ne va plus car à l'heure actuelle:


- la mise à jour des tests de la feuil1 vers la feuil2 engendre la perte de toutes les exigences.
- la mise à jour du tableau de la feuil2 vers la feuil3 engendre la perte de toutes les données qui auraient pu composer le tableau en feuil3

les contraintes sont les suivantes
- l'ordre des T sur la fiche labo et sur les tableaux ne peuvent pas différer de l'ordre qui est présenté sur la feuil1 (la feuille générique)


Donc idéalement lors des mises à jour (c'est ce que j'ai voulu illustrer sur la feuille "Exemple")

il faudrait pouvoir passer, par exemple: si avant la mise à jour on a sélectionné T1 T2 T5 et qu'on veut ajouter T3 et T4
en feuil 2 passer donc de T1 T2 T5 à du T1 T2 T3 T4 T5
tout en conservant les exigences déjà remplies

et par extension, lors de la mise à jour du tableau pouvoir ajouter les colonnes de test T3 et T4 sans pour autant perdre les valeurs qui ont été enregistrées pour les autres tests

d'où l'idée suivante,
-vérifier si il y a déjà des infos de remplie,
-les stocker sur une page tampon
-créer la nouvelle page en utilisant la macro déjà existante
et enfin (et c'est là ou cela bloque)
-remettre les données qui était là avant dans les bonnes cases .

je ne sais pas si c'est faisable, mais je pensais qu'en partant de la commande find ca pourrait se faire, mais la syntaxe m'échappe, d'autant plus lorsque je veux l'appliquer sur la mise à jour du tableau avec un find en colonne et en ligne
 

vgendron

XLDnaute Barbatruc
Hello

Je viens de regarder.. et à bien y réfléchir... il faut peut etre revoir la "stratégie" globale.. à savoir..

Partant d'une "Fiche Controle Générique" vierge.( avec le bouton Remise à Zero)
1) Clic sur "Maille Double Face"
===> la "Fiche Controle Générique" est remplie avec tous les tests récupérés dans "Liste tests"
AINSI que la "Fiche Controle" qui récupère TOUS les memes tests..

2) dans la "Fiche Controle Générique", tu cliques sur le ou les tests désirés (T1 T2 T3 par exemple)
3) Clic sur "Générer fiche labo" (c'est un peu long d'execution. ..12s.. pas d'inquiétude...
==> Seuls les tests sélectionnés dans le générique, sont affichés.. les autres sont JUSTE masqués..

4) tu rentres des exigences dans le test T1 (modif à faire dans le code pour que ca fonctionne sur n'importe quel test)
1 2 et 3 en lignes G19-G20-G21 (pour l'exemple)

5) tu reviens dans la "Fiche Controle Générique"
tu ajoutes le test T4
6) clic "Générer fiche labo" (toujours 12s d'execution)
==> le code détecte qu'il y a déjà une exigence
==>choix d'ajouter le test (en gardant les exigences déjà saisies)
==> ou d'effacer les exigences existantes

7) si OUI, le nouveau test est affiché, et les exigences n'ont pas bougé
si NON, le nouveau test est affiché, mais les exigences ont été effacées..

==> plus de problème de savoir dans quel ordre les test apparaissent, ni de chercher à quel endroit coller les nouveaux tests..

Que penses tu de cette facon de faire???
(pour la partie tableau.. j'y reviendrai..)
 

Pièces jointes

  • Test 2 Rev3 New Strategy.xlsm
    116.6 KB · Affichages: 16

Hynnuh

XLDnaute Junior
Bonjour,

euh... bah là comme ça non, la méthode me semble pas plus simple du tout.
l'idée de base était justement d'avoir un document adaptatif, pour éviter d'avoir tout qui apparait à l'écran
d'où le choix des tests en feuil1 et vraiment avoir un fichier adapté à chaque situation.

concrètement, le code qui me permet de mettre à jour mes exigences de la feuil2 à la feuil3 est top, (macro exigences)

n'est il pas possible de prendre la même mécanique à la fois pour la mise à jour de la fiche labo et pour la mise à jour par la suite du tableau?


Guillaume
 

vgendron

XLDnaute Barbatruc
n'est il pas possible de prendre la même mécanique

c'est pas ce qui est le plus simple pour le code. mais c'est possible..
pour l'instant.. la difficulté que je vois, c'est : comment trouver la position d'insertion du "nouveau test"

Regarde la PJ et le code: j'y ai mis des commentaires
dans les 2 cas suivants:
1)la feuille est vierge
2) il y a déjà une exigence et tu choisis de refaire une feuille vierge,
le code fonctionne déjà.
dans le cas ou il y a déjà une exigence qu'il faut garder... le code reste à compléter..
 

Pièces jointes

  • Test 2 Rev3.xlsm
    118.1 KB · Affichages: 17

Hynnuh

XLDnaute Junior
pour l'instant.. la difficulté que je vois, c'est : comment trouver la position d'insertion du "nouveau test"

et on ne peut donc pas adapter la macro ci-dessous

Code:
Sub tester()
'mise à jour des exigences dans le tableau créé juste avant en fonction des infos de la fiche labo
Application.ScreenUpdating = False
With Feuil2
  fin = .UsedRange.Rows.Count  'on récupère la dernière ligne de la feuille
  For I = 18 To fin
  If .Range("A" & I) <> "" Then
  FinTab = .Range("A" & I).Offset(1, 0).Row - 1  'on récupère la dernière ligne de la "section test"
  Numtest = .Range("A" & I)
   
  .Range("G" & I & ":G" & FinTab).Copy
  With Feuil3
  Set ici = .Rows(10).Find(Numtest, lookat:=xlWhole)
  If Not ici Is Nothing Then
  .Range("A14").Offset(0, ici.Column - 1).PasteSpecial Transpose:=True
  End If
  End With
  End If
  Next I


End With
Application.ScreenUpdating = True
End Sub

j'ai voulu adapter avec ces changements

Set ici = .Columns(8).Find(Numtest, lookat:=x1whole)

.Range("O9").Offset(ici.Row - 1, 0).PasteSpecial (avec en O9 le début de la colonne des exigences par exemple)
mais ça ne marche pas je n'ai clairement pas la bonne écriture de cette fonction.

ce qui voudrait dire
on copie la page d'avant sur un autre onglet
on créé la nouvelle page
on vérifie ligne par ligne si les T sont les mm
et si oui alors on copie/colle l'exigence

et pour le tableau
je me dis qu'on peut faire la même mais en faisant deux récurrence, une en ligne et une en colonne
sachant qu'en colonne on a les T et en ligne on aura les N° Chrono en point de repere
 

Hynnuh

XLDnaute Junior
Bonjour @vgendron

J'ai réussi à régler une grosse partie de mon problème (mettre à jour les feuilles sans perdre les données)
en revanche je bloque sur un point de syntaxe,

dans ton code que j'avais réutilisé pour mes exigences tu avais cela
Code:
For i = 18 To fin
  If .Range("A" & i) <> "" Then
  fintab = .Range("A" & i).Offset(1, 0).Row - 1  'on récupère la dernière ligne de la "section test"
  NumTest = .Range("A" & i)
   
  .Range("G" & i & ":G" & fintab).Copy
  With Feuil3
  Set ici = .Rows(10).Find(NumTest, lookat:=xlWhole)
  If Not ici Is Nothing Then
  .Range("A14").Offset(0, ici.Column - 1).PasteSpecial Transpose:=True

J'aimerais pouvoir faire une sélection cette fois ci non pas en "balayant les lignes" mais en "balayant les colonnes"

j'ai tenté cette formule

Code:
fin = .UsedRange.Columns.Count  'on récupère la dernière ligne de la feuille
  For i = 8 To fin
  If .Cells(1, i) <> "" Then
  fintab = .Range(Cells(1,i)).Offset(0, 1).Columns - 1 'on récupère la dernière ligne de la "section test"
  NumTest = .Cells(1, i)
   
  .Range(Cells(18, i), Cells(18, fintab)).Copy
  With Feuil3
  Set ici = .Rows(10).Find(NumTest, lookat:=xlWhole)
  If Not ici Is Nothing Then
  .Range(Cells(18, i)).Offset(0, ici.Column - 1).PasteSpecial Transpose:=False

mais la ligne que j'ai souligné me renvoi une "erreur de type 1004"

je me doute que c'est un problème de syntaxe mais je ne vois pas comment écrire cette ligne pour que ca passe

ps: sachant que par la suite l'idée est de venir faire une récurrence ligne par ligne dc transformer les cells(18,i) en cells(j,i)


En tout cas merci encore pour l’énorme coup de main
 

Discussions similaires

Réponses
5
Affichages
215
Réponses
4
Affichages
196

Statistiques des forums

Discussions
312 305
Messages
2 087 087
Membres
103 461
dernier inscrit
dams94