Dupliquer X feuille Excel en 1 clic
C'est à dire que je ne peux jamais mettre de feuille intermédiaire ?
En gros oui si l'on utilise la méthode de formule = SOMME('1:150'!k47)....
Si vous avez une autre feuille que 1 à 150 entre, la formule prendra aussi les valeurs de cette feuille.
une solution serait de faire = Somme('1'!K47) +SOMME('2'!:K47)....., mais cela pourrait faire 150 formules SOMME ...
Je peux regarder pour cette solution si vous le voulez. Par contre si vous supprimez une feuille par exemple la formule ne sera pas adaptée automatiquement. C'était l'intérêt de la proposition actuelle.
Sinon dites moi quelle serait la ou les feuille(s) intermédiaire(s) ?
A vous relire
En fait, chaque feuille 1,2,3,4 etc jusqu'à 150 est normalement accompagné d'une deuxième feuille SD1, SD2, SD3 etc....Ces feuilles là ont d'autres formules que je mets et généralement sont masquées.
C'est pour cela que l'idée initiale était d'avoir moyen de multiplier 150 la même feuille en adaptant les formules sur chacune. Comme cela, ça n'aurait pas eu d'impact sur ma Feuille Base Vente :
Cellule E19 =SOMME('1:150'!K54)
Cellule E20 =SOMME('1:150'!F54)
Cellule E21 =SOMME('1:150'!H54)
Cellule E22 =SOMME('1:150'!M54)
L'idée d'automatiser la création de la feuille était une excellente idée mais j'avais oublié ces "feuilles annexes" qui doivent être présente. Donc je ne sais pas si c'est possible de les intégrer ou si pour le coup je dois chercher une autre solution.
Merci beaucoup Dan pour votre aide et désolée pour les questions
Il y a plusieurs choses dans votre message
1. En fait, chaque feuille 1,2,3,4 etc jusqu'à 150 est normalement accompagné d'une deuxième feuille SD1, SD2, SD3 etc.
Le code ne crée pas cette deuxième feuille (SD) actuellement. Doit-il le faire aussi et si oui, quelle est la position ? Exemple si on crée une feuille 2, doit-on créer aussi SD2 et la positionner à coté de la feuille 2.
2. C'est pour cela que l'idée initiale était d'avoir moyen de multiplier 150 la même feuille en adaptant les formules sur chacune.
Je comprends l'idée. Mais cela ne sert pas de créer 150 feuilles s'il n'y a rien à mettre dedans. Les formules peuvent adaptées via le code mais si une feuille SD doit être également créée, la formule simplifiée (genre SOMME('1:150'!K54)) n'est possible que si les feuilles 1 à 150 se suivent dans le fichier.
3. L'idée d'automatiser la création de la feuille était une excellente idée mais j'avais oublié ces "feuilles annexes" qui doivent être présente. Donc je ne sais pas si c'est possible de les intégrer ou si pour le coup je dois chercher une autre solution.
Non on peut faire une macro pour la créer. Comme précisé au point 1, c'est surtout la position de la feuille SD qui est à choisir. Il faut avant tout regarder votre utilisation car si les feuilles SD sont cachées... qu'est ce qui empêche qu'elle soit à la fin de toutes les autres ?
Il y a aussi plein d'autres solutions envisageables.
Un exemple : si vous cliquez sur la feuille 2, puisque les feuilles SD sont masquées par défaut on peut afficher automatiquement la feuille SD2 correspondante (un code sera à faire dans ce cas). Si vous cliquez sur la feuille 1, on cache la feuille SD2 et on affiche la feuille SD1
Le principal est la facilité dans votre travail !
Merci pour votre réponse Dan !
1. Le code ne crée pas cette deuxième feuille (SD) actuellement. Doit-il le faire aussi et si oui, quelle est la position ? Exemple si on crée une feuille 2, doit-on créer aussi SD2 et la positionner à coté de la feuille 2.
C'est cela en effet, la position doit être à côté de la feuille en question donc chaque feuille X aura sa feuille SDX à côté.
2. Je comprends l'idée. Mais cela ne sert pas de créer 150 feuilles s'il n'y a rien à mettre dedans. Les formules peuvent adaptées via le code mais si une feuille SD doit être également créée, la formule simplifiée (genre SOMME('1:150'!K54)) n'est possible que si les feuilles 1 à 150 se suivent dans le fichier.
Oui je suis d'accord avec vous et c'est beaucoup plus lisible d'ailleurs ! Il faut juste que ce soit adapté avec les feuilles SD
3. Non on peut faire une macro pour la créer. Comme précisé au point 1, c'est surtout la position de la feuille SD qui est à choisir. Il faut avant tout regarder votre utilisation car si les feuilles SD sont cachées... qu'est ce qui empêche qu'elle soit à la fin de toutes les autres ?
Il y a aussi plein d'autres solutions envisageables. Un exemple : si vous cliquez sur la feuille 2, puisque les feuilles SD sont masquées par défaut on peut afficher automatiquement la feuille SD2 correspondante (un code sera à faire dans ce cas). Si vous cliquez sur la feuille 1, on cache la feuille SD2 et on affiche la feuille SD1
C'est pour une question de faciliter de lecture. Je travaille sur les deux feuilles en changeant mon coeff. Donc j'ai besoin d'avoir les deux feuilles côte à côte :/ Après si en effet si je clique sur ma feuille X et que sa feuille SD s'affiche c'est excellent car comme vous l'avez dit elles sont masquées de base.
Mais du coup mes cellules de ma Feuille Base V, la somme ne prends pas en compte les feuilles SD...
E19 =SOMME('1:150'!K54)
E20 =SOMME('1:150'!F54)
E21 =SOMME('1:150'!H54)
E22 =SOMME('1:150'!M54)
D'ailleurs j'ai essayé votre code et ça m'a mis erreur 13, incompatibilité de Type... bizarre puisque le premier code à bien fonctionné.
1. Mais du coup mes cellules de ma Feuille Base V, la somme ne prends pas en compte les feuilles SD...
Heu la formule doit aussi prendre en compte le montant de la feuille SD ??
2. C'est pour une question de faciliter de lecture. Je travaille sur les deux feuilles en changeant mon coeff. Donc j'ai besoin d'avoir les deux feuilles côte à côte :/ Après si en effet si je clique sur ma feuille X et que sa feuille SD s'affiche c'est excellent car comme vous l'avez dit elles sont masquées de base.
Cote à cote oui si vous avez juste la feuille 1. Si vous avez deux feuilles 1 et 2, SD01 sera positionnée après la feuille 2. Ce qui ne gêne pas je pense
3. Pour l'erreur, vous avez bien la ligne "public i as byte" avant la macro Sub dupliquer ?
1. Heu la formule doit aussi prendre en compte le montant de la feuille SD ??
Non justement, elle doit prendre en compte que pour les feuilles 1,2,3 etc
2. Cote à cote oui si vous avez juste la feuille 1. Si vous avez deux feuilles 1 et 2, SD01 sera positionnée après la feuille 2. Ce qui ne gêne pas je pense
Non ça ne gêne pas forcément. Surtout si le code permet de faire apparaitre la feuille SD quand on clique sur sa feuille correspondante
3. Pour l'erreur, vous avez bien la ligne "public i as byte" avant la macro Sub dupliquer ?
Oui j'ai bien ça et j'avais créé une feuille SD mais que j'ai mis à la fin comme vous me l'aviez conseillé. J'ai que 4 feuilles en même temps pour test
Merci pour votre réponse et votre temps !
Je n'ai aucune erreur sur vos deux fichiers postés ici
Vous partez bien de la colonne C de la feuille D-E-SEC ?
Hmmm étrange. Affirmatif. Je pars bien de ma colonne C...
J'ai changé en mettant exactement le nom de la feuille mais pareil... alors que le premier code marche parfaitement.
Expliquez moi exactement ce que vous faites car là je viens d'ajouter en C29 et C30 et pas d'erreur dans le code
Edit : aussi une chose, votre colonne C est au format Comptabilité. Mettez là au format StandardC'est parfait ça marche, merci !! :)
En effet c'est parce que c'était probablement en Comptabilité
Dan,
Vous savez pour le problème de copier/coller où vous m'aviez dit de faire collage spéciale. En fait ma formule afficher le texte de ma formule car mes colonnes étaient en texte :D du coup j'ai changé et cela marche.
Merci !!
Dans mon fichier, il y a une macro qui me permet lorsque je double-clique sur une ligne de la colonne A de ma feuille 1 par exemple, de faire apparaitre une boite de dialogue me permettant de sélectionner des informations qui sont basées sur ma feuille Bibliothèque.
Je souhaite faire un changement dans cette macro en retirant Quantité mais je ne trouve pas le code pour le faire.... même quand je clique sur Macros pour visualiser mes macros....
Merciii...
En effet c'est parce que c'était probablement en Comptabilité
Ok. Il reste donc à vous donner le code pour créer les feuilles SD et le code pour le cas où vous sélectionnez les feuilles 1,2, etc...
Je souhaite faire un changement dans cette macro en retirant Quantité mais je ne trouve pas le code pour le faire.... même quand je clique sur Macros pour visualiser mes macros....
Vous voulez supprimer la textbox Quantité dans l'userform ? Si oui, il faut aller dans le frmdesignation et d&sactiver la ligne Quantité et ensuite supprimer la textbox quantité dans le Frm
Je trouve que les codes ne sont pas très lisibles. Je ne sais pas qui vous a fait les codes mais à première vue je pense que l'on pouvait faire plus simple. A vérifier toutefois..
Est-ce que lors de l'ouverture la liste déroulante désignation ne devrait pas comporter des valeurs ?
Ok. Il reste donc à vous donner le code pour créer les feuilles SD et le code pour le ca s où vous sélectionnez les feuilles 1,2, etc...
Oui c'est ça mais je ne veux pas vous déranger plus ! Vous m'avez tellement aider déjà !
Vous voulez supprimer la textbox Quantité dans l'userform ? Si oui, il faut aller dans le frmdesignation et d&sactiver la ligne Quantité et ensuite supprimer la textbox quantité dans le Frm
Je trouve que les codes ne sont pas très lisibles. Je ne sais pas qui vous a fait les codes mais à première vue je pense que l'on pouvait faire plus simple. A vérifier toutefois..
Est-ce que lors de l'ouverture la liste déroulante désignation ne devrait pas comporter des valeurs ?
Oui c'est ça. Je vous avoue que c'est moi qui l'ai fait en m'aidant de plusieurs tuto et j'ai mis longtemps ^^' Sauf que je ne sais plus comment retourné dans mon code avec les autres codes...
Mais le résultat c'est ça. En cliquant sur ma ligne, le userform s'ouvre, je sélectionne mon thème et ensuite soit j'écris et ça fait de l'autocomplétions soit je sélectionne via le menu déroulant. Ensuite ça rempli mes cases mais je souhaite juste que ça remplisse la désignation, Unité et le P.U. En fait je m'appuis sur ma feuille bibliothèque :)
Merciii
Bonne soirée
Cdt
Bonjour,
Oui c'est ça mais je ne veux pas vous déranger plus ! Vous m'avez tellement aider déjà !
Pas de souci j'avais déjà préparé le code. Voici ce que vous devez faire :
1. Ajout de la feuille SD
- Allez dans le module où est placée la macro Dupliquer
- Juste avant le END SUB, mettez cette instruction --> Call DupliquerSD
- En dessous de la macro Dupliquer, ajoutez le code ci-après :
Sub DupliquerSD()
Dim j As Byte
Dim Existe As Boolean
With Sheets("D-E-SEC")
For j = 1 To Sheets.Count
If Sheets(j).Name = CStr("SD" & .Cells(i + 19, 1)) Then Existe = 1: Exit For
Next j
If Existe = 0 Then
If Sheets("SD1").Visible = False Then Sheets("SD1").Visible = True
Sheets("SD1").Copy after:=Sheets(Sheets.Count)
With ActiveSheet
.Name = "SD" & Sheets("D-E-SEC").Cells(i + 19, 1).Value
.Range("D2").FormulaR1C1 = "='D-E-SEC'!R[" & 17 + i & "]C[-2]"
.Range("D3").FormulaR1C1 = "='D-E-SEC'!R[" & 16 + i & "]C[-1]"
.Range("G2").FormulaR1C1 = "='D-E-SEC'!R[" & 17 + i & "]C[-3]"
.Range("L2").FormulaR1C1 = "='D-E-SEC'!R[" & 17 + i & "]C[-7]"
End With
End If
Existe = 0
End With
End Sub2. Visualiser la feuille SD selon choix de feuille 1, 2 ...
- Allez dans THISWORKBOOK et mettez le code ci-dessous
Dim stpevt As Boolean
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim shref As String
Application.ScreenUpdating = False
If stpevt = True Or ActiveSheet.Name Like "SD*" Then Exit Sub
For Each Sh In Worksheets
shref = CStr(ActiveSheet.Name)
If Sh.Name Like "SD*" Then
If Sh.Name <> "SD" & ActiveSheet.Name Then
Sh.Visible = False
Else: Sh.Visible = True: stpevt = True: Sh.Move after:=Sheets(shref): Sheets(shref).Activate
End If
End If
Next Sh
stpevt = False
Application.ScreenUpdating = True
End SubAttention comme précédemment, la ligne Dim Stpevt as Boolean DOIT se trouver en première ligne (Toutefois voir ma remarque ci-dessous)
3. Modification à faire
- Faite un click droite sur l'onglet D-E-SEC
- choisissez l'option Visualiser le code
- Modifiez cette ligne --> If Target.Count > 1 then Exit Sub par ceci --> If Target.Count > 1 Or Target.Value = "" Then Exit Sub
4. Remarque :
J'ai vu que vous aviez créé un module "Define" spécifique pour les variables. Donc si vous le voulez, vous pouvez déplacer les deux variables Public i as byte et Public stpevt as boolean dans ce module
Je vous avoue que c'est moi qui l'ai fait en m'aidant de plusieurs tuto et j'ai mis longtemps ^^' Sauf que je ne sais plus comment retourné dans mon code avec les autres codes..
C'est souvent le souci. Surtout qu'ici il y avait moyen de faire plus simple pour certains codes
Voici ce que vous pouvez déjà faire :
- Dans l'userform, supprimez la textbox Quantité (nom --> BoxQte)
- Allez dans le code Private Sub UserForm_Initialize() et désactivez la ligne ValeurQte = ......
- Dans tous les autres codes de l'userform vous devez désactiver aussi chaque ligne où vous avez --> Boxqte
Voyez déjà si toutes ces modifications fonctionnent. Je vous donnerai ensuite quelques infos supplémentaires sur ce que j'ai pu constater.
A vous relire
Bonjour Dan,
J'espère que vous allez bien.
J'ai fait tout ce que vous m'avez dit de faire.
J'ai deux questions néanmoins s'il vous plait.
C'est souvent le souci. Surtout qu'ici il y avait moyen de faire plus simple pour certains codes
Voici ce que vous pouvez déjà faire :
- Dans l'userform, supprimez la textbox Quantité (nom --> BoxQte)
- Allez dans le code Private Sub UserForm_Initialize() et désactivez la ligne ValeurQte = ......
- Dans tous les autres codes de l'userform vous devez désactiver aussi chaque ligne où vous avez --> Boxqte
J'ai bien désactivé tous les Boxqte mais pour celui de ci-dessous il me met cela. J'ai peur de faire exploser le code si je désactive tout..
2. Visualiser la feuille SD selon choix de feuille 1, 2 ...
- Allez dans THISWORKBOOK et mettez le code ci-dessous
Dois supprimer tout le code et rajouter le votre et le Dim stpevt As Boolean doit être en dessus de Option Explicit du coup ?
Pour le reste j'ai tout modifié !
Encore merci !!
J'ai bien désactivé tous les Boxqte mais pour celui de ci-dessous il me met cela. J'ai peur de faire exploser le code si je désactive tout
Oui logique car vous avez laissé le AND. Puisque vous n'avez plus la textbox quantité, votre ligne doit être ceci --> If BoxDesignation.Text <> "" Then
Dois supprimer tout le code et rajouter le votre
Non vous devez garder le code double click bien sûr. Donc vous rajoutez le code (le mieux au dessus de l'autre)
le Dim stpevt As Boolean doit être en dessus de Option Explicit du coup ?
Oui juste en dessous de Option explicit.
Dan,
Super j'ai ça marche ! Merci beaucoup !!
Par contre pour le userforme maintenant quand je double click sur ma ligne, je n'ai plus la possibilité de faire l'autocomplétions. C'est à dire que si je vais par exemple sur l'onglet Main D'œuvre et que je tape "Scaph", il ne va me proposer le mot "Scaphandrier" (ce qui est dans ma feuille bibliothèque). Et du coup, cela à tout décalé :
le J doit être dans la colonne B et 1,00 dans la colonne C et Chef de Chantier dans la colonne A.
Re
quand je double click sur ma ligne,
Dans le module Define, vous devez :
- Supprimez Public Const COL_Nbre = 1
- désactivez toutes les lignes où vous avez col_nbre
- Modifiez les 3 lignes suivantes
Public Const COL_DESIGNATION = 1
Public Const COL_Unite = 2
Public Const COL_Quantite = 3Je n'ai pas encore fait de test mais pas sûr que la col_quantité serve encore.
Il y aurait encore des choses à changer ou à simplifier je vois.
Autre chose, lorsque l'on double clique sur les 8 et suivantes , l'userform s'affiche. Normal cela ?
Merci pour votre réponse Dan !
Vous cliquez sur quelle ligne et dans quelle feuille ?
Quand je clique sur n'importe quelle ligne de ma colonne A de chacune de mes feuilles 1,2,3 etc... à partir de DESIGNATION
Du coup c'est super merci ! J'ai bien fait ce que vous m'avez dit et ça marche !
Le seul problème que j'ai , c'est que j'ai du désactiver un truc qui me permettait de faire apparaitre le mot lorsque j'écrivais le début du mot.
Autre chose, lorsque l'on double clique sur les 8 et suivantes , l'userform s'affiche. Normal cela ?Sur les 8 et suivantes ? Alors effectivement l'userform s'affiche peut importe où vous cliquez ^^' mais bon ce n'est pas grave.
J'ai une autre question (désolée je suis très chiante...).
En fait la feuille SDX et le parfait miroir de la feuille X à laquelle elle est associée. A la différence que la ligne 8 de ma feuille SD n'a pas la même valeur. Ce qui modifie forcément le calcul mais c'est fait exprès. Est ce qu'il y a un moyen d'arriver à ce résultat sans devoir tout changer ? Si c'est beaucoup trop lourd, on reste comme ça et je trouverais un moyen parce que c'est super là !
Mercii !
Le seul problème que j'ai , c'est que j'ai du désactiver un truc qui me permettait de faire apparaitre le mot lorsque j'écrivais le début du mot.
C'est à dire ? Je ne vois pas de quoi vous parlez
Sur les 8 et suivantes ? Alors effectivement l'userform s'affiche peut importe où vous cliquez ^^' mais bon ce n'est pas grave.
Ce n'est pas compliqué. Faites ceci :
- Allez dans le module Define
- Modifiez ces deux lignes en remplaçant le 8 et le 45 par 15 et 53
Public Const LIGNE_Min = 15
Public Const LIGNE_Max = 53A la différence que la ligne 8 de ma feuille SD n'a pas la même valeur. Ce qui modifie forcément le calcul mais c'est fait exprès. Est ce qu'il y a un moyen d'arriver à ce résultat sans devoir tout changer ?
Vous pouvez donner un exemple car je ne vois de quelle colonne vous parlez en ligne 8