Créer deux feuilles identiques sur un même classeur et les lier.

Signaler
Messages postés
8
Date d'inscription
lundi 24 août 2020
Statut
Membre
Dernière intervention
30 août 2020
-
Messages postés
8
Date d'inscription
lundi 24 août 2020
Statut
Membre
Dernière intervention
30 août 2020
-
Bonjour tout le monde :),

Dans un même classeur Excel, je voudrais créer la copie(Feuil2) ABSOLUMENT IDENTIQUE d'une autre feuille déjà existante(Feuil1). J'aurais donc deux mêmes feuilles, et dès que je modifierais Feuil1, Feuil 2 s'actualiserais automatiquement. Elles seraient liées (ce n'est donc pas un copier/coller banal à partir de l'onglet "format".).

Feuil 1 concerne une liste de produits avec une série de cellules isolées qui me permettent de modifier divers paramètres (valeurs de pourcentages, etc.).

Feuil 2 est la même liste mais destinée aux clients, qui n'ont donc pas besoin de voir certains paramètres et colonnes. Cela me permettrait de les cacher, de modifier les tailles de police et largeurs de cellules de manière à ce que le tout tienne dans du A4 et soit imprimable pour le client (Feuil 1 resterait avec une taille de police plus grande, pour éviter l'ophtalmo.).

J'ai bien essayé de faire une copie avec liaison, le hic est que je n'en n'ai pas l'accès, étant donné que mes valeurs sont dans des tableaux, et non dans des plages de valeurs quelconques. Je pourrais bien faire une copie des cellules avec liaison, mais ça m'obligerait à refaire les bordures, et je vais devoir souvent ajouter des lignes.

Si une bonne âme a un petit bout de VBA, ou toute autre solution, je suis preneur.
Merci par avance


Configuration: Windows / Firefox 79.0

6 réponses

Messages postés
17214
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
10 septembre 2020
4 226
Bonjour,

place ce code dans un bouton activex par exemple et teste le

Cells.Copy
Sheets("Feuil2").Select
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteFormats
Selection.PasteSpecial Paste:=xlPasteValues
Range("A1").Select
Application.CutCopyMode = False
Messages postés
97
Date d'inscription
mercredi 23 avril 2008
Statut
Membre
Dernière intervention
29 août 2020
16
Bonjour
Difficile de te répondre sans fichier
ajoute cette macro sur la feuille2
pour ce faire clic droit sur le nom de la feuille
choisir visualiser le code

Private Sub Worksheet_Activate()
Dim tablo, nblig As Long, nbcol As Integer
nblig = Range("A" & Rows.Count).End(xlUp).Row
nbcol = Cells(1, Columns.Count).End(xlToLeft).Column
Range(Cells(2, 1), Cells(nblig, nbcol)).ClearContents
With Sheets("Feuil1")
nblig = .[Tableau1].Rows.Count
nbcol = .[Tableau1].Columns.Count
tablo = .Range("Tableau1")
End With
Range(Cells(2, 1), Cells(nblig, nbcol)).Value = tablo
End Sub

changer With Sheets("Feuil1") si nom de la feuille1 est différent
changer [Tableau1] si le nom de ton tableau sur la feuille 1 est different

A+ François
Messages postés
8184
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
10 septembre 2020
1 463
Bonjour,

«J'aurais donc deux mêmes feuilles, et dès que je modifierais Feuil1, Feuil 2 s'actualiserais automatiquement»

C'est pas aussi simple que ça, il ne s'agit pas de copier les valeurs, il faut que chaque cellule soit liée à Feuil1 par une formule.
Met cette macro dans un module standard et exécutes la :
Sub CreerDuplicata()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim cel As Range
   Set sh1 = Worksheets("Feuil1")
   sh1.Copy After:=sh1
   Set sh2 = ActiveSheet
   For Each cel In sh2.UsedRange.Cells
     If cel.Formula <> "" Then
       If IsNumeric(cel.Value) Then
         cel.Formula = "='" & sh1.Name & "'!" & cel.Address
       Else
         cel.Formula = "='" & sh1.Name & "'!" & cel.Address & " & """""
       End If
     End If
   Next cel
   sh2.UsedRange.Cells.Locked = True
End Sub


Tu peux ensuite supprimer la macro pour conserver un classeur sans macro.

Cordialement
Patrice

Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.
Messages postés
8
Date d'inscription
lundi 24 août 2020
Statut
Membre
Dernière intervention
30 août 2020

Rebonjour.

Merci à tous pour votre aide.

Patrice33740, j'ai bien créé un module standard et utilisé ton code. Ça marche plutôt pas mal.
Je t'envoie le fichier (Excel 2007) pour que tu voies le résultat. La feuille 1 s'appelle "Lista de productos" (je vis en Argentine) et la deuxième feuille qui est le résultat de ton code, est la feuille 9, et s'appelle "Lista imprimible comerciantes". Ne fais pas attention à feuil3("Antigua lista comerciantes"), c'est un copier/coller que j'avais fait "à la main", mais elle permet quand même de voir le résultat que j'aimerais obtenir.

> Comme tu pourras le remarquer, dans la copie obtenue, les titres des entêtes ont été remplacés par des chiffres (exemple : numero par 1, "envasado" par 2, etc.).

>Et dès que j'essaie d'ajouter une ligne dans un des tableaux, ça ne se répercute pas sur la deuxième feuille(feuil9). (Exemple : feuil1 : je vais dans le premier tableau "Aceites", je clique sur la cellule A31, dans le cadre apparaissant j'utilise la poignée en bas à droite que je maintiens tout en la faisant glisser (j'utilise cette méthode car en faisant simplement "ajouter une ligne", l'incrémentation des indices ne se ferait pas .).

Merci.

Lien du fichier : https://www.cjoint.com/c/JHyn5Onrphs
Messages postés
8184
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
10 septembre 2020
1 463
Ça change totalement le cahier des charges !!!!

Il était question d' «une liste de produits avec une série de cellules isolées qui me permettent de modifier divers paramètres (valeurs de pourcentages, etc.). »
En supplément, tu demandes :
- d'ajouter des lignes sur la Feuil1
- de modifier certaines informations de la Feuil2 (par exemple les en-têtes)

Ça devient bien plus complexe :
- dans un premier temps, il faut créer la copie et la mettre au nouveau format pour les client (ce que permet la macro actuelle)
- ensuite il faut identifier les modifications sur la feuille 1:
>> si elle porte sur le contenu d'une cellule liée par formule : on ne fait rien (ça marche actuellement).
>> si elle porte sur le contenu d'une cellule pas encore liée par formule : on ajoute la formule sur la feuil2
-
il faut aussi détecter l'insertion de cellules (ou de lignes), ce qui ne va pas toujours être très simple et :
>> insérer les nouvelles cellules (ou lignes) sur la Feuil2
>> déterminer (c'est là que ça se corse) quel est le format à appliquer à ces nouvelles cellules (ou lignes)
>> lier ou pas ces nouvelles cellules à celles de la Feuil1

Il faut donc définir le cahier des charges avec une grande précision.
Messages postés
8
Date d'inscription
lundi 24 août 2020
Statut
Membre
Dernière intervention
30 août 2020

Bonjour Patrice,

Excuse-moi aussi pour les mauvaises indications, je ne savais que cela pouvait être si complexe. Dorénavant j'essaierai d'être plus exhaustif dans mes explications.

Je suis parvenu à réaliser la quasi totalité de ce que je voulais faire.

En fait je n'avais pas besoin que les deux feuilles soient liées , désolé. J'ai utilisé l'enregistreur de macro. Curieusement certaines fonctions étaient impossibles à automatiser comme redimensionner les largeurs de colonnes ou en cacher d' autres.

J'ai été sur quelques forums grappiller du code ça et là (j'ai absolument aucune base en VBA, mais comme je connais un peu le C, j'ai pu comprendre la logique de manière grossière.)
La macro "ImprimirListaComerciantes" se démarre avec le raccourci : ctrl + i
Un message de confirmation de suppression de la feuille existante apparaîtra et il faudra faire OK.
(Je n'ai pas réussi à le rendre automatique.)

J'ai placé des commentaires dans le code pour pouvoir voir les différentes étapes de la macro.
Il me reste cependant un problème. Lorsque la feuille principale("Lista de productos") a été finalement mise en forme("Lista comerciantes imprimible"), il faut lui apposer un bandeau d'informations (Le coin supérieur gauche du bandeau doit se confondre avec le coin supérieur gauche de la cellule A1.).

Ce bandeau d'information est présent dans la feuille "! NO MODIFICAR !"(Feuil8). J'ai essayé avec l'enregistreur de macro de d'abord faire une macro à part("CopierImage"), présente dans le module 3. Isolée, elle fonctionne. Mais je n'arrive pas à l'appeler dans le code de la macro "ImprimirListaComerciantes". (Call Module3.CopierImage?)
Donc, en somme, pour que la feuille soit utilisable, il faudrait :

> Pouvoir apposer le bandeau d'informations

> Cacher automatiquement les quatre dernières lignes sur les cinq qui séparent chaque tableau. Alors là, je sais qu'algorithmiquement ça doit être compliqué (Déterminer chaque tableau, pour chaque tableau déterminer la position de la dernière ligne n, puis cacher les lignes n+2, n+3,n+4,n+5.), si c'est trop dur, laisse-le, je me débrouillerai autrement.

> Passer la confirmation de suppression au tout début de la macro(Cette étape n'est pas indispensable, au pire je me débrouillerai).

> Déplacer l'onglet "Lista comerciantes imprimible" à la gauche de l'onglet "Lista imprimible comerciantes"( là aussi j'avais fait une macro isolée "DéplacerOnglet" que je ne sais pas appeler.)
Je sais que c'est beaucoup, alors fais ce que tu peux et veux.

PS : j'ai créé une feuille qui s'intitule "Exemple souhaité" pour avoir un aperçu du résultat.
Lien du fichier : https://www.cjoint.com/c/JHBrRPJ2eus
Messages postés
8184
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
10 septembre 2020
1 463
Bonjour,

Avec un bouton sur la feuille Liste de produits (j'ai commenté chaque ligne de code) :
https://mon-partage.fr/f/VG5vtqZ9/

J'ai pas compris : « Déplacer l'onglet "Lista comerciantes imprimible" à la gauche de l'onglet "Lista imprimible comerciantes" »
Quand tu crées la copie tu peux la placer où tu veux (de ce cas avant la première) pourquoi la déplacer ?

Cordialement
Patrice

Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.
Messages postés
8
Date d'inscription
lundi 24 août 2020
Statut
Membre
Dernière intervention
30 août 2020

Bonjour Patrice,
Comme je cumule deux boulots, excuse mes réponses tardives.
Pardon je voulais dire Déplacer l'onglet "Lista comerciantes imprimible" à la gauche de l'onglet "Lista de productos".
"Lista de productos" est la feuille principale où on gère tous les prix, c'est pour ça que je voudrais l'avoir tout à gauche.
Merci de m'avoir répondu. "Lista comerciantes imprimible" est une feuille que je rafraîchirais à la volée après avoir modifié les prix (en Argentine, avec l'inflation, ça arrive très souvent.).
Messages postés
8
Date d'inscription
lundi 24 août 2020
Statut
Membre
Dernière intervention
30 août 2020
>
Messages postés
8
Date d'inscription
lundi 24 août 2020
Statut
Membre
Dernière intervention
30 août 2020

Je viens de voir le résultat....ça tue! Merci beaucoup!
Messages postés
8
Date d'inscription
lundi 24 août 2020
Statut
Membre
Dernière intervention
30 août 2020
>
Messages postés
8
Date d'inscription
lundi 24 août 2020
Statut
Membre
Dernière intervention
30 août 2020