Récupérer valeur cellule de la feuille précédente et lui ajouter une valeur

JVOS

XLDnaute Junior
Bonjour à Tous
Je suis débutante et je bute sur un élément qui paraîtra surement très simple, voici ma macro :
Sub Nvlle_Feuille()
Sheets(1).Copy Before:=Sheets(1)
ActiveSheet.Name = "S"
Range("I3:AO50").Select
Selection.SpecialCells(xlCellTypeVisible).ClearContents
Selection.Interior.Color = xlColorIndexNone
Range("BB3:BD50").ClearContents
ActiveSheet.Range("I2").Value = ActiveSheet(Index - 1).Range("I2").Value + 7
End Sub

La ligne en gras est censé en "I2" de la nouvelle feuille récupérer la valeur de "I2" de la feuille précédente + 7

Merci pour votre aide
 

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour et bienvenue,

En référençant en début de macro la feuille à copier:

VB:
Sub Nvlle_Feuille()
    Dim sh As Worksheet
    Set sh = Sheets(1)
    sh.Copy Before:=Sheets(1)
    ActiveSheet.Name = "S"
    Range("I3:AO50").Select
    Selection.SpecialCells(xlCellTypeVisible).ClearContents
    Selection.Interior.Color = xlColorIndexNone
    Range("BB3:BD50").ClearContents
    ActiveSheet.Range("I2").Value = sh.Range("I2").Value + 7
End Sub

A bientôt
 

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour le fil, bonjour le forum,

Pourquoi ne pas prendre la valeur avant :

VB:
Sub Nvlle_Feuille()
Dim V As Integer
Dim S As Worksheet

V = Sheets(1).Range("I2").Value + 7
Sheets(1).Copy Before:=Sheets(1)
Set S = ActiveSheet
S.Name = "S"
With S.Range("I3:AO50")
    .SpecialCells(xlCellTypeVisible).ClearContents
    .Interior.Color = xlColorIndexNone
End With
S.Range("BB3:BD50").ClearContents
S.Range("I2").Value = V
End Sub
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil

Moi qui aime bien les endives, j'en rajoute un chouia ;)
VB:
Sub Nvlle_Feuille()
Dim V As Integer
V = Sheets(1).Range("I2") + 7
Sheets(1).Copy Before:=Sheets(1)
With ActiveSheet
  .Name = "S"
  With .Range("I3:AO50").SpecialCells(xlCellTypeVisible)
    .Value = Empty
    .Interior.Color = xlColorIndexNone
  End With
  .Range("BB3:BD50") = Empty
  .Range("I2") = V
End With
End Sub
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour à tous,

Surtout pour vous saluer ;).
Le code ci-dessous ne suffirait-il pas ? Il me semble qu'en copiant la feuille, on copie la cellule I2 aussi.

VB:
Sub Nvlle_Feuille()
    Sheets(1).Copy Before:=Sheets(1)
    ActiveSheet.Name = "S"
    With Range("I3:AO50").SpecialCells(xlCellTypeVisible)
      .ClearContents: .Interior.Color = xlColorIndexNone
    End With
    Range("BB3:BD50").ClearContents
    Range("I2") = Range("I2") + 7
End Sub
 
Dernière édition:

JVOS

XLDnaute Junior
Bonjour et bienvenue,

En référençant en début de macro la feuille à copier:

VB:
Sub Nvlle_Feuille()
    Dim sh As Worksheet
    Set sh = Sheets(1)
    sh.Copy Before:=Sheets(1)
    ActiveSheet.Name = "S"
    Range("I3:AO50").Select
    Selection.SpecialCells(xlCellTypeVisible).ClearContents
    Selection.Interior.Color = xlColorIndexNone
    Range("BB3:BD50").ClearContents
    ActiveSheet.Range("I2").Value = sh.Range("I2").Value + 7
End Sub

A bientôt
Bonjour
Merci beaucoup pour votre aide
Quelle fluidité
J'ai vraiment beaucoup à apprendre sur le VBA.
 

JVOS

XLDnaute Junior
Bonjour le fil, bonjour le forum,

Pourquoi ne pas prendre la valeur avant :

VB:
Sub Nvlle_Feuille()
Dim V As Integer
Dim S As Worksheet

V = Sheets(1).Range("I2").Value + 7
Sheets(1).Copy Before:=Sheets(1)
Set S = ActiveSheet
S.Name = "S"
With S.Range("I3:AO50")
    .SpecialCells(xlCellTypeVisible).ClearContents
    .Interior.Color = xlColorIndexNone
End With
S.Range("BB3:BD50").ClearContents
S.Range("I2").Value = V
End Sub
Bonjour
Merci beaucoup pour votre réponse, mais cela me donne une réponse "dépassement de capacité"
La macro de Roblochon me convient parfaitement.
Merci encore pour la réactivité
 

JVOS

XLDnaute Junior
Bonjour
Bonsoir le fil

Moi qui aime bien les endives, j'en rajoute un chouia ;)
VB:
Sub Nvlle_Feuille()
Dim V As Integer
V = Sheets(1).Range("I2") + 7
Sheets(1).Copy Before:=Sheets(1)
With ActiveSheet
  .Name = "S"
  With .Range("I3:AO50").SpecialCells(xlCellTypeVisible)
    .Value = Empty
    .Interior.Color = xlColorIndexNone
  End With
  .Range("BB3:BD50") = Empty
  .Range("I2") = V
End With
End Sub

Bonjour
J'ai pas essayé votre version
Merci beaucoup pour votre aide
 

JVOS

XLDnaute Junior
Bonjour à tous,

Surtout pour vous saluer ;).
Le code ci-dessous ne suffirait-il pas ? Il me semble qu'en copiant la feuille, on copie la cellule I2 aussi.

VB:
Sub Nvlle_Feuille()
    Sheets(1).Copy Before:=Sheets(1)
    ActiveSheet.Name = "S"
    With Range("I3:AO50").SpecialCells(xlCellTypeVisible)
      .ClearContents: .Interior.Color = xlColorIndexNone
    End With
    Range("BB3:BD50").ClearContents
    Range("I2") = Range("I2") + 7
End Sub
Bonjour
Merci beaucoup pour votre aide mais j'ai pas essayé votre version.
 

JVOS

XLDnaute Junior
Bonjour à Tous
Je suis débutante et je bute sur un élément qui paraîtra surement très simple, voici ma macro :
Sub Nvlle_Feuille()
Sheets(1).Copy Before:=Sheets(1)
ActiveSheet.Name = "S"
Range("I3:AO50").Select
Selection.SpecialCells(xlCellTypeVisible).ClearContents
Selection.Interior.Color = xlColorIndexNone
Range("BB3:BD50").ClearContents
ActiveSheet.Range("I2").Value = ActiveSheet(Index - 1).Range("I2").Value + 7
End Sub

La ligne en gras est censé en "I2" de la nouvelle feuille récupérer la valeur de "I2" de la feuille précédente + 7

Merci pour votre aide
Bonjour à tous et merci pour votre aide et votre réactivité
Une petite question : comment faire pour signifier que le problème est résolu?
 

JVOS

XLDnaute Junior
Bonjour et bienvenue,

En référençant en début de macro la feuille à copier:

VB:
Sub Nvlle_Feuille()
    Dim sh As Worksheet
    Set sh = Sheets(1)
    sh.Copy Before:=Sheets(1)
    ActiveSheet.Name = "S"
    Range("I3:AO50").Select
    Selection.SpecialCells(xlCellTypeVisible).ClearContents
    Selection.Interior.Color = xlColorIndexNone
    Range("BB3:BD50").ClearContents
    ActiveSheet.Range("I2").Value = sh.Range("I2").Value + 7
End Sub

A bientôt
Rebonjour
J'abuse un peu :
Est-il possible que lors de l’exécution de la macro, au lieu de nommer la nouvelle feuille "S", il y ait une ouverture de fenêtre pour que l'utilisateur tape le nom à la feuille (exemple "S24").
Ensuite la macro définit le nom du tableau de la feuille sous le format "T_NomFeuille" (T_S24 par exemple).
Merci beaucoup
A bientôt
 

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour à chacun,

@JVOS: a tester. Si le tableau de la feuille est un tableau structuré il faudra supprimé la ligne Application.Names.add...
Voir les commentaires de ligne
VB:
Sub Nvlle_Feuille()
    Dim nm As Variant
    Dim sh As Worksheet
    nm = InputBox("Entrez le nom de la nouvelle Feuille", "Création feuille", "")
    If Trim(nm) = "" Then
        MsgBox "Opération annulée!", "Création feuille", ""
    End If
    Set sh = Sheets(1)
    sh.Copy Before:=Sheets(1)
    ActiveSheet.Name = nm
    
    Range("I3:AO50").Select
    Selection.SpecialCells(xlCellTypeVisible).ClearContents
    Selection.Interior.Color = xlColorIndexNone
    ' S'il s'agit d'un tableau structuré
    ' décommenter la ligne ci-dessous et supprimer la suivante
    'Selection.ListObject.Name = "T_" & nm
    
    ThisWorkbook.Names.Add "T_" & nm, Selection
    
    Range("BB3:BD50").ClearContents
    ActiveSheet.Range("I2").Value = sh.Range("I2").Value + 7
End Sub
Il y aura erreur si un utilisateur entre un nom de feuille déjà existant. Voyez comment vous pouvez gérer ça.
Si ça 'coince' quelque part essayer de comprendre ce qui ne va pas et pourquoi. Ensuite, revenez vers nous.

Bonne journée
 

Robert

XLDnaute Barbatruc
Repose en paix
Re,

Pour éviter l'erreur :

VB:
Sub Nvlle_Feuille()
Dim BE As Variant
Dim I As Integer

ici:
BE = Application.InputBox("Nommer le nouvel onglet.", "NOM", Type:=2)
If BE = False Or BE = "" Then Exit Sub
For I = 1 To Sheets.Count
    If BE = Sheets(I).Name Then
        MsgBox "Un onglet portant ce nom existe déjà, veuillez recommencer !"
        GoTo ici
    End If
Next I
Sheets(1).Copy Before:=Sheets(1)
ActiveSheet.Name = BE
With Range("I3:AO50").SpecialCells(xlCellTypeVisible)
  .ClearContents: .Interior.Color = xlColorIndexNone
End With
Range("BB3:BD50").ClearContents
Range("I2") = Range("I2") + 7
End Sub
 

JVOS

XLDnaute Junior
Bonjour Robert
Ça fonctionne super bien, sauf dans un seul cas : même nom d'onglet écrit en minuscule
La macro détecte qu'il y a doublon dans la dénomination mais ne renvoi pas le message et affiche erreur 1004
Merci pour ton aide
Y a-t-il moyen de régler ça ou je bloque la feuille pour une écriture que en majuscule
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 069
Messages
2 085 037
Membres
102 763
dernier inscrit
NICO26