Copie d'une feuille avec incrémentation

kinocam

XLDnaute Nouveau
Bonjour,

J'aurais besoin d'un petit conseil. J'ai dans un classeur 7 feuilles, les quatre dernières se nomment respectivement J1,J2,J3 et J4. Aussi, dans chaque feuille, ce numéro est dans une cellule (dans la feuille J2, il y a 2 dans la B4; dans la feuille J3, il y a 3 dans la B4). Il me faudrait aller jusqu'à J35 en suivant cette logique. C'est possible manuellement, mais un peu long je pense... : ) Si vous pouvez m'aider, j'en serais ravi.

Tant que j'y suis, j'en profite ; ) ! Dans un autre classeur, j'ai 3 feuilles. Dans chacune, il y a une colonne du même nombre de cellules (que j'ai mises en mode texte pour garder le 0 de début ex: 05/05/08). J'aimerais qu'en écrivant dans une cellule d'une colonne, les cellules correspondantes des autres colonnes prennent la même valeur. Je voudrais que ca marche dans tous les sens : que je puise commencer par n'importe quelle cellule de n'importe quelle colonne. Il y a t il une autre méthode que celle qui consiste à sélectionner les 3 feuilles avec shif (ou pomme)?

Je vous remercie d'avance
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Copie d'une feuille avec incrémentation

Bonjour Kinocam. bonjour le forum,

Ce code devrait résoudre ton premier problème :

Code:
Sub Macro1()
For x = 5 To 35
    Sheets("J4").Select
    Sheets("J4").Copy After:=Sheets(Sheets.Count)
    ActiveSheet.Name = "J" & x
    ActiveSheet.Range("B4").Value = x
Next x
End Sub

pour le second j'essaie déjà moi de le comprendre...
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Copie d'une feuille avec incrémentation

Bonjour Kinocam, bonjour le forum,

Pour ton second problème, cette macro événementielle à placer dans le composant ThisWorkbook par Visual Basic Editor :

Code:
Private test As Boolean 'déclare la variable test
Private Sub Workbook_SheetChange(ByVal sh As Object, ByVal Target As Range)
 
Dim pl As String 'déclare la variable pl (PLage)
Dim ad As String 'déclare la variable ad (ADresse)
Dim ac As Worksheet 'déclare la variable ac (onglet ACtif)
 
If test = True Then Exit Sub 'condition : si text est vrai sort de la procédure (évite de boucler à chaque changement)
 
Set ac = ActiveSheet 'définit la variable ac
pl = "$A$1:$A$30" 'définit la variable pl (à adapter à ton cas)
 
'condition : si l'édition à lieu dans une (ou plusieurs) cellule(s) de la plage pl
If Not Application.Intersect(ac.Range(pl), Target) Is Nothing Then
    test = True 'définit la variable test
    ad = Target.Address 'définit la variable ad
    For Each sh In Sheets 'boucle sur tous les onglets du classeur
        'si l'onglet est différent de l'onglet actif, place la valeur éditée dans l'onglet à la même addresse
        If sh.Name <> ac.Name Then sh.Range(ad).Value = Target.Value
    Next sh 'prochain onglet du classeur
End If 'fin de la condition
 
test = False 'réinitialise la variable test
 
End Sub
 

kinocam

XLDnaute Nouveau
Re : Copie d'une feuille avec incrémentation

Merci pour le code, mais je t'avoue que je ne sais pas comment ouvrir la fenêtre de programmation et donc où coller ce code... :confused:

Quant à l'autre problème, je vais essayer de l'exprimer autrement... C'est pas toujours évident :) . Sur chacune de mes trois feuilles j'ai mis une colone de 35 cellules en texte (pour éviter qu'il m'enlève le 0 de début. Ces cellules sont destinée à des dates. J'aimerais si j'inscris une date dans une cellule d'une des 3 page, j'aimerais que les cellules correspondantes des deux autres colones (donc sur les deux autres feuilles) prennent la même valeur : la date que j'ai inscri.

Ex : Si j'écris dans la deuxième cellule de la colonne de la feuille 2, j'aimerais que la deuxième cellule de la colonne de la feuille 1 et 3 prenne la même valeur... J'espère que c'est plus clair :)

Merci encore
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Copie d'une feuille avec incrémentation

Bonjour Kinocam, bonjour le forum,

[Alt]+[F11] ouvre Visal Basic Editor. Pour le premier code tu fais Insertion/Procédure... tu donnes n'omporte quel nom, puis tu remplaces ce qu'il ya a par un copier/coller de l'intégralité du premier code.

Pour le second tu double-cliques à gauche sur ThisWorkbook et tu fais un copier/coller mais n'oublie pas d'adapter le code en remplaçant pl par l'adresse de ta plage à toi.
J'espère que c'est clair...
 

kinocam

XLDnaute Nouveau
Re : Copie d'une feuille avec incrémentation

Super! Le premier à marcher à merveille! C'est quand même bien un ordinateur :)

Pour le deuxième, ca ne fonctionne pas, je copie le code en l'adaptant puis je demande l'exécution, il me demande un nom de macro, je met date, puis je fais créer et il me dit nom de procédure incorrect. Ne t'arrache pas les cheveux, le premier problème était plus important, et je suis ravi qu'il soit résolu. Merci, merci et merci

Voici le code comme je l'ai tapé :

Private test As Boolean 'déclare la variable test
Private Sub Workbook_SheetChange(ByVal sh As Object, ByVal Target As Range)

Dim pl As String 'déclare la variable pl (PLage)
Dim ad As String 'déclare la variable ad (ADresse)
Dim ac As Worksheet 'déclare la variable ac (onglet ACtif)

If test = True Then Exit Sub 'condition : si text est vrai sort de la procédure (évite de boucler à chaque changement)

Set ac = ActiveSheet 'définit la variable ac
pl = "$B$5:$B$35" 'définit la variable pl

'condition : si l'édition à lieu dans une (ou plusieurs) cellule(s) de la plage pl
If Not Application.Intersect(ac.Range(pl), Target) Is Nothing Then
test = True 'définit la variable test
ad = Target.Address 'définit la variable ad
For Each sh In Sheets 'boucle sur tous les onglets du classeur
'si l'onglet est différent de l'onglet actif, place la valeur éditée dans l'onglet à la même addresse
If sh.Name <> ac.Name Then sh.Range(ad).Value = Target.Value
Next sh 'prochain onglet du classeur
End If 'fin de la condition

test = False 'réinitialise la variable test

End Sub
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Copie d'une feuille avec incrémentation

Bonsoir Kinocam, bonsoir le forum,

Pour le deuxième code tu n'as pas dû le copier au bon endroit. Dans VBE, double-cliques à gauche dans ThisWorkbook, puis dans la partie à droite colle le code que tu as adapté. C'est une macro événementielle. Tu n'as pas besoin de l'appeler elle va réagir toute seule dès que tu vas éditer quelquechose dans la plage que tu as définie. Elle copiera ce que tu as édité dans les autres onglets automatiquement.
 

kinocam

XLDnaute Nouveau
Re : Copie d'une feuille avec incrémentation

Great! Merci à nouveau Robert. J'ai à nouveau une demande! Celle-ci pour compléter mon premier problème! : ) Pour faire plus simple, je joints mon classeur. J'ai 5 feuilles, les deux dernières sont J1 et J2. J'aimerais à nouveau aller jusqu'à J35 en incrémentant la B4 au même nombre que celui suivant le J (ex : que la B4 de la J6 soit 6...)

Les cellules E31, G31, E32, E33, H33, E34, et G35 de la J2 sont des formules utilisant des cellules de la J1. J'aimerais que dans les nouvelles feuilles (J3, J4, J5...), les cellules citées dépendent plus de la J1 mais de la feuille précédente (ex : E31, G31, E32... de la J4 dépendent de la J3).

Les cellules C4, C5, A6, E27, H27, et E28 dépendent des feuilles Info et stock. J'aimerais que ce soit le cas pour toutes les feuilles...

A nouveau, j'espère que je me fait comprendre :)

D'avance merci
 

Pièces jointes

  • Test.zip
    14.4 KB · Affichages: 34
  • Test.zip
    14.4 KB · Affichages: 30
  • Test.zip
    14.4 KB · Affichages: 34

Robert

XLDnaute Barbatruc
Repose en paix
Re : Copie d'une feuille avec incrémentation

Bonjour Kinocam, bonjour le forum,

En pièce jointe ton fichier modifié. J'ai déplacé la macro dans un module plutôt quer dans l'onglet dans lequel elle se trouvait. Elle est mieux là...
 

Pièces jointes

  • Kinocam_v01.zip
    17.9 KB · Affichages: 46

Discussions similaires

Statistiques des forums

Discussions
312 676
Messages
2 090 802
Membres
104 668
dernier inscrit
Mac-Breheny