Créer un classeur à partir de plusieurs données
Alors je suis vraiment confus mais ça ne veux pas avec le Si... même en tirant les information de la liste de feuilles modèle..
Pour les buttons je vous ai mis un exemple sur la fiche modèle "AV-FK001 et 002 et comme il ne seront pas placés dans les mêmes case a chaque fois je voudrais quelle soit à 2 colonnes vers la droite du "nvnom" que l'on a renseigner
Sub NouveauCahier()
Dim wbsource As Workbook, wbnew As Workbook
Dim rcahier As Range
Dim modele$, nvnom$, identification$, addid$, desti$, repert$
Dim nb%, i%
'Dim ws As Worksheets
Set wbsource = ThisWorkbook 'classeur origine
Set rcahier = wbsource.Sheets("Répertoire Nouveau Cahier").Range("RepCahier")
nb = rcahier.Rows.Count
With wbsource
.Sheets(Array("Entête", "Répertoire fiche de contrôle", "Répertoire Nouveau Cahier", "MENU1")).Copy 'CAS 1 : copie feuilles entete et fiche controle dans nouveau classeur
'CAS 2 : .Sheets("Entête").Copy
Set wbnew = ActiveWorkbook 'affectation wbnew 'CAS 1 ou 2
'CAS 2 : .Sheets("Répertoire fiche de contrôle").Copy after:=wbnew.Sheets("Entête")
For i = 1 To nb
modele = rcahier(i, 2).Value 'nom feuille modele = valeur en B
nvnom = rcahier(i, 1).Value 'nouveau nom feuille = valeur en A
identification = rcahier(i, 3).Value 'identification = valeur en C
addid = rcahier(i, 4).Value 'valeur en D
desti = rcahier(i, 5).Value 'valeur en E
If modele Like "AV*" Then 'si modele commence par AV
If Not FeuilleExiste(modele) Then GoTo Err 'si feuille existe pas, sortie vers Err
.Sheets(modele).Copy after:=wbnew.Sheets(Sheets.Count) 'copie feuille au nom modele après la dernière feuille du nv classeur
With wbnew.Sheets(Sheets.Count) 'avec cette nouvelle et dernière feuille du nv classeur
.Name = nvnom 'nom = nvnom
.Range(addid).Value = identification 'cellule à l'adresse addid = identification
.Range(desti).Value = nvnom 'cellule à l'adresse desti = nouveau nom
End With
End If
Next i
End With
'wbnew.Close savechanges:=True, Filename:=wbsource.Path & "\Cahier " & Format(Now, "YYMMDD-HHMM") & ".xlsm" 'fermeture et sauvegarde wbnew au nom défini (à modifier)
'Set wbsource = Nothing: Set wbnew = Nothing
Exit Sub
Err: 'si erreur
MsgBox "Feuille " & modele & " inexistante !", vbCritical 'msg erreur
wbnew.Close savechanges:=False 'nouveau classeur fermé sans enregistrement
Set wbsource = Nothing: Set wbnew = Nothing
End Sub
Function FeuilleExiste(NomFeuille As String) As Boolean 'fonction testant existence feuille
On Error Resume Next
FeuilleExiste = Sheets(NomFeuille).Index
End Function
Sub ListerFeuilles()
Dim ws As Worksheet
For Each ws In Worksheets
i = i + 1
Sheets("Listes").Range("A" & i).Value = ws.Name '<<<<< ADAPTER OU CREER FEUILLE LISTES
Next ws
End SubAie.. j'ai un autre soucis, il ne me garde pas mes validations de données en liste que j'ai dans mes fiches modèles..
Qu'est-ce qui ne va pas avec le Si ? lequel ?
Je regarde le fichier dès que j'ai un moment...
Et pour les validations, soit on les passe en dur (pas terrible) soit on les laisse sur une feuille listes qu'on copie également. Je pense que la validation devrait subsister. Sinon, on la rajoute par macro. Ces validations sont sur tes fiches AV-FK.... ?
A bientôt,
Très bien merci on a bien avancé déjà sur ce projet!
Le "si la feuille n'existe pas" avec le messbox pour que cela fonctionne il faut que je la mette en commentaire, et cela fonctionne.
Concernant toutes ces propositions de validations, je ne sais pas ce quel est le mieux vu ma position
Je vous laisse jeter un coup d’œil au dernier fichier vous aller mieux me comprendre je pense,
J'arrive a rajouter des choses (Feuille supp) au fur et à mesure et quelques macro ce qui est plutôt pas mal!
A bientôt Maître Génie Excel
En effet, tu avais bien raison.
J'ai laissé des notes sur la feuille AV-FK-001 du fichier pour que ce soit plus simple.
En ce qui concerne les validations, il faut que tu fasses en sorte de les lier à chaque fois à un tableau de la feuille Listes. Elles seront alors reportées sans problème dans le nouveau classeur. Je te laisse le soin de mettre à jour ces validations. J'aurais pu tenter quelque chose mais la disposition des feuilles AV n'est pas idéale...
Pour les boutons, comme je n'ai pas totalement compris, je te laisse aussi modifier les macros qui doivent leur être affectées.
J'imagine que tu auras probablement des questions donc je me tiens à dispo, n'hésite pas.
A bientôt,
Bonjour à toi Maître EXCEL,
C'est parfait ce que tu m'as fait! Je n'ai plus qu'a recopier la cellule de validation dans mes autres pages!
Les boutons c'est nickel comment cela fonctionne il faut que je mettent des XXX dans toutes mes feuilles modèles?
Pour la liste "boite" oui c'est normal elle ne figure pas je pense dans ces feuilles mais je saurais la rajouter
Un grand Merci!!!
Alors en effet j'ai une autre question car en avançant dans le cahier en ce rend compte de chose que l'utilisateur pourrait faire..
Imaginons qu'il doit ajouter un modèle de feuille dans son nouveau classeur mais qu'il l'a déja complété..
En quelques sortes:
-ajouter une ligne au milieu de son "Répertoire Nouveau cahier"
-appuyer sur un "bouton Mise à jour" (tout en conservant les valeurs déjà complétées)
Est ce possible?
Salut Willkaa,
C'est pas bien de se moquer
Pour les boutons, c'est la solution la plus simple que j'ai trouvé pour fixer la colonne où doivent se trouver les boutons...
Donc, si je comprends bien, tu as déjà le nouveau classeur et celui-ci est rempli ? Pas moyen de supprimer tout et recoller toutes les feuilles ?
Oui, c'est possible mais il s'agira d'une autre macro parce que le classeur est déjà créé donc il faut aller le chercher cette fois...
Oh non c'est plutôt une admiration!🤗
Alors j'ai encore beaucoup de travail sur les formules de noms qui se remplissent tout seul et protection de feuilles.. car je ne suis pas assez compétent pour créer d'autres macro a ce sujet alors je fais du copier coller...
La ca va je n'ai que 11 modèles mais en vrai j'en ai une soixantaine.. Alors j'en ai pour un moment.. sauf si tu me trouverais une solution plus rapide.. Ce que je ne doute pas du tout! 😉 Je t'expliquerai alors la manœuvre.
Pour la mise à jour, OK alors on verras ça ensuite.
Je te fait suivre un fichier modèle avec l'explication. 🙂
Alors voici le fichier de base:
L'utilisateur doit renseigner plusieurs cellules pour s'identifier,
Il commence sur l'onglet "MENU1" à repérer sa "lettre Agent" correspondant à son "NOM Prénom"
(ensuite à renseigner "le Contrôleur principal" et le "second.." ensuite le code de la fiche(si cela change)"AV")
Puis sur l'onglet "Entête" il renseigne en L21 et en L24 les noms correspondants..
On passe ensuite sur une feuille modèle, ex: "AV-FK-001" il ne doit pouvoir renseigner que les colonnes "RESULTAT" et "DATE" dés qu'il renseigne en exemple, la cellule "C11" son "NOM" s'inscrit automatiquement ainsi que ses initiales en "VISA" via les formules que j'ai posé.(Attention "NA" raye la ligne et ne rempli pas)
Si c'est un autre qui à contrôlé a sa place il renseigne la "lettre agent" du deuxième contrôleur dans la cellule "L1" et met un "X" dans la colonne "G" ainsi cela inscrit automatiquement le nom du deuxième contrôleur..
La plupart de mes modèles respectent les cases mais pas tous c'est pour cela que je fais du copier/coller.. Exemple: "AV-FK-008.1TER"
Et dans quelques cases le résultat attendu est une autre valeur que "C, NA, ..." Exemple: "AV-FK-008.1TER" en Ligne 17 ou "AV-FK-008.2" en ligne 26 et 27..
Mon but est de faire gagner du temps à l'utilisateur afin que son rendement soit efficace et ne perdent pas de temps à complété ce cahier.
C'est énormément de détour et de contrainte, c'est pour cela que je le fait a la main, et j'ai crée une macro " qui verrouille une feuille donc je le fais feuille par feuille si besoin le code est "AVE"
Merci, je suis flatté
Est-ce que c'est bien ça alors pour le classeur ? Aller le sélectionner dans les dossiers puis le modifier ? Parce que ça n'est pas insurmontable.
Pour les noms et les protections, je n'ai pas du tout compris ce que tu voudrais...
Je viens de lire ton deuxième mail :
Je peux très bien t'aider pour les formules, pour une feuille cependant, afin que tu aies une idée sur les blocages que tu rencontres. Le seul problème, c'est ta présentation. Si la présentation des fiches était différente, on aurait peut-être pu gérer beaucoup de choses avec des boucles. Mais là, ça prendrait autant de temps quasiment que de faire le boulot à la "main".
Pour les protections, tu peux suivre le même principe qu'avec certaines des boucles que j'ai utilisées jusqu'ici. Si j'ai bien compris :
Sub ProtegerRafale()
dim ws as worksheet 'déclaration objet feuille
for each ws in worksheets 'pour chaque feuille du classeur
if ws.name Like "AV*" then 'si le nom de la feuille en cours commence par "AV"
ws.protect "AVE" 'on protège la feuille sous le MDP "AVE"
end if
next ws
end sub
Sub DeprotegerRafale()
dim ws as worksheet 'déclaration objet feuille
for each ws in worksheets 'pour chaque feuille du classeur
if ws.name Like "AV*" then 'si le nom de la feuille en cours commence par "AV"
ws.unprotect "AVE" 'on déprotège la feuille grâce au MDP "AVE"
end if
next ws
end subJe regarderai le fichier quand j'aurai un moment.
C'est sincère!
Alors pour la modification, oui c'est ça, si on modifie le "nouveau répertoire" dans le nouveau classeur en ajoutant des feuilles a n'importe quel endroit de ce répertoire, il nous integre les feuilles dans ce classeur.
Concernant les noms et protection oui il faut suivre les étapes de mon précédent mail pour comprendre..
La protection c'est presque cela en rajoutant un truc du genre "sauf les cellules "C11: C34 et E11:E34" comme un formulaire. C'est un exemple..
Pour la protection, essaie ceci :
Sub ProtegerRafale()
dim ws as worksheet 'déclaration objet feuille
for each ws in worksheets 'pour chaque feuille du classeur
if ws.name Like "AV*" then 'si le nom de la feuille en cours commence par "AV"
ws.range("C11:C34, E11:E34").locked = false 'cellules déverrouillées
ws.protect "AVE" 'on protège la feuille sous le MDP "AVE"
end if
next ws
end subC'est noté pour la mise à jour du cahier
Bonne soirée,
Bonjour,
Dans le code, Haï bien compris que "like" voulais dire "commence par" Mais comment on dit "fini par" des chiffres de 0 a 7 et une autre des lettres finissant par "bis par exemple. Je pense que ce serai plus adapté.
Bonne journée,
Salut,
En fait, l'opérateur Like signifie correspondance partielle et le caractère spécial "*" remplace tous caractères quelconques, alors que le caractère spécial "?" remplace un unique caractère quelconque et "#" remplace un chiffre quelconque...
Ce que tu cherches peut s'exprimer comme ça :
if lemot Like "AV*00[0-7]" then '00[0-7] veut dire 2 zéros suivis d'un caractère entre 0 et 7
'ou bien
if lemot like "AV*" then
if not lemot like "*008*" thensi le but est d'écarter les modèles avec le 008.
C'est à vérifier parce que je ne suis pas allé contrôler les noms de modèle mais tu as le principe. Tu peux arranger la recherche à ta convenance.
Très bien je vais garder cela en mémoire,
Ça me servira une fois terminé car j'ai encore pas mal de modification à faire avant la protection...
et même une qui me chagrine.. c'est l'histoire des noms et visa qui se remplissent automatiquement en donnant un résultat en colonnes C ... via mon précédent mail.
j'aimerai trouver une macro qui remplace la formule dans les colonnes "NOM" et "VISA":
Exemple dans la fiche modèle "AV-FK-001 en D11
=SI(OU(C11="na";C11="");"";SI($L$1="";MENU1!$G$4;SI(ET(G11="X";$L$1="A");MENU1!$B$2;SI(ET(G11="X";$L$1="B");MENU1!$B$3;SI(ET(G11="X";$L$1="C");MENU1!$B$4;SI(ET(G11="X";$L$1="D");MENU1!$B$5;MENU1!$G$4))))))
Qui reprend des informations de la celules "L" et dans la colonnes "G" (si "x")
En modifiant les couleurs d'onglet par leur style de modèle je pense que nous arriverons plus facilement a faire quelques choses c'est pourquoi je te joint un nouveau classeur avec la couleur des fiches modèles corresponds.
Si valeur en "RESULTAT" alors "C11" affiche le nom renseigné en "MENU1!G4" (CONTRÔLEUR PRINCIPAL°OU SI "x" en col "G" affiche le nom du second contrôleur renseigné en L1 par sa lettre Agent via la liste en "MENU1"
Rose ="RESULTAT" en col "C" et "NOM" en col "D" et "VISA" en col "F"
Violet="RESULTAT" en col "F" e t"NOM" en col "G" et "VISA" en col "I"
Jaune ="RESULTAT" en col "Q" et" NOM" en col "R" et "VISA" en col "T"
Bleu ="RESULTAT" en ligne" et "NOM" en ligne 30 et "VISA en ligne 32
Tout cela est d'un compliqué.. je cherche quelque chose de plus simple.. si tu as une idée je suis preneur!
Oulala
Ma petite idée serait d'aller dans l'onglet Listes et de créer un nouveau tableau avec un colonne listant les valeurs possibles de L ('', 'A", "B", ...), une autre listant les valeurs possibles de G ("X", ...), de manière à lister tous les cas de façon lisible (parce qu'avec une succession de Si(et(ou())), c'est pas évident. Ensuite, il faut rajouter à ce tableau une 3è colonne qui donne les valeurs à renvoyer (valeur de menu G4, B3, ...).
Voilà, de la sorte, on pourra avoir une formule bien plus claire de type :
=INDEX(NVTAB[COL3];SOMMEPROD(EQUIV(1;(NVTAB[COL1]=G11)*(NVTAB[COL2]=$L$1);0)))où :
- SOMMEPROD(EQUIV()) permet de passer la recherche de correspondance (EQUIV) en matriciel
- EQUIV(1;(NVTAB[COL1]=G11)*(NVTAB[COL2]=$L$1);0) 'renvoie la position de correspondance quand les conditions sont remplies
car (NVTAB[COL1]=G11)*(NVTAB[COL2]=$L$1) vaudra 1 (c'est-à-dire vrai) si une ligne du tableau (nommé pour l'exemple NVTAB) a la valeur G11 en colonne 1 et L1 en colonne 2.
- INDEX(NVTAB[COL3];...) renvoie la valeur en colonne 3 à la position obtenue grâce au sommeprod equiv.Sinon, l'idée des couleurs d'onglets est une bonne idée si elle est bien maitrisée en amont. Ça pourra t'éviter de te casser la tête avec les bis, les ter, etc
Alors pour la liste j'ai bien compris, elle est créé dans l'onglet" MENU1" mais alors le reste HELP ME!!
Petit rappel : Je suis novice sur EXCEL!
Oui l'idée des couleur me semble judicieux car j'ai d'autres onglet de la sortes à rajouter ensuite et ca me permettrai de garder mes formules et/ou macro
Je vais regarder ton fichier bientôt mais je sais plus où donner de la tête
Est-ce que l'onglet MENU a une importance particulière ? Parce que le but étant de réunir, si possible, toutes les listes au même endroit, on pourrait tout même dans Listes et supprimer l'onglet MENU.
Edit : Oui, je sais que tu es novice. Désolé de parler comme si c'était évident... Parfois, c'est aussi pour poser noir sur blanc l'idée qui me vient afin d'être sûr de la retrouver ensuite.
Aucun de soucis au moins ça me forme en même temps :)
Alors j'ai essayer de saisir les informations mais je pense que ça ne correspond pas vraiment.. je vois l'idée,
Alors le "MENU1" je le laisse car il sera modifiable contrairement à liste qui sera masqué et protégé
Je te laisse examiner le classeur quand tu auras le temps tu comprendras mieux la manipulation je pense, mais ya de l'idée,
Bon et bien on va passer à ma troisième question alors,
Dans mon "nvrépertoire" j'aimerai rajouter une colonnes "I" pour mettre un lien vers la feuille portant le même nom que la cellule de la col "A". Sachant que les valeurs des la colonnes "A" changent en fonction de l'emplacement du texte.. .
Exemple:
=Si valeur cellule "A1" = nom feuille dans ce classeur, alors lien hypertexte en I vers cette feuille.
Ça c'est de la rigolade pour toi
Alors je résume ce qu'il reste à voir:
1- Formule /marco pour "NOM et "VISA"
2- Formule /marco pour "Lien vers feuille"
3- Protection des feuilles ( Ça je vais voir à la fin avec ce que j'ai déjà)
Ya pas de quoi s'ennuyer avec moi !
Willkaa,
J'ai 2 petites questions concernant le fichier :
Est-ce que les "X" en colonne G des fiches sont nécessaires, sachant que de la saisie en colonne C (RESULTAT) est déjà censée jouer sur la valeur des colonnes NOMS et VISA ? J'ai tendance à penser qu'on peut s'en passer...
J'ai commencé à écrire un code pour la modification du cahier. Cependant, je bloque. Si le cahier est déjà rempli, il faudra ajouter une feuille entre les feuilles déjà existantes et en même temps mettre à jour l'onglet "Nouveau Cahier". Or, cette mise à jour de la liste des feuilles créera un décalage avec les noms des fiches déjà présentes sur e nouveau classeur, à moins que la nom de la feuille ajoutée soit le nom de la dernière fiche incrémentée de 1. Est-ce que c'est ça l'objectif ? Sinon, peux-tu m'en dire plus ?