Copier une zone de nom vers une autre feuille

recovery

XLDnaute Junior
Bonjour tout le monde,

je me retourne une nouvelle fois vers les plus aguerris, car mes modestes connaissances en VBA me limite bien vite

Voici mon problème

Dans ma feuille facture à l'aide d'un command button, je crée une nouvelle feuille nommée par la valeur de la cellule b12 et dans laquelle je souhaiterais faire une copie de la facture matérialisée par la zone de nom CopieFacture de sorte qu'elles s'incrémentent les unes en dessous des autres, or je bloque à ce niveau malgré mes différentes tentatives impossible de créer une copie vers la feuille définie par la cellule b12. je m'en remets à vous et joins le fichier.

vous remerciant par avance

Cordialement.
 

Pièces jointes

  • modèle facturationbis.xlsm
    37.7 KB · Affichages: 53

job75

XLDnaute Barbatruc
Re : Copier une zone de nom vers une autre feuille

Bonjour recovery,

Code:
Sub onglet()
On Error Resume Next
With Sheets("Facture")
  If CStr(.[B12]) = "" Then Exit Sub
  If IsError(Sheets(CStr(.[B12]))) Then
    .Copy After:=Sheets(Sheets.Count)
    Sheets(Sheets.Count).Name = CStr(.[B12])
  Else
    MsgBox "La feuille a déjà été créée..."
  End If
End With
End Sub
A+
 

recovery

XLDnaute Junior
Re : Copier une zone de nom vers une autre feuille

Je te remercie job 75 de m'apporter ton aide j'en ai bien besoin toutefois à chaque fois que je lance la macro feuille créée ou pas le message suivant s'affiche "feuille dèjà créée" et rien ne se passe aucune copie dans la feuille de destination par ailleurs je dois pouvoir facturer une entreprise plusieurs fois d'ou la nécessité que les copies suivantes se positionnent sous les précédentes. j'espère être assez explicite et te remercie une nouvelle fois de me consacrer un peu de temps.

Cordialement.
 

job75

XLDnaute Barbatruc
Re : Copier une zone de nom vers une autre feuille

Re,

Si vous voulez mettre plusieurs factures dans la feuille d'une même entreprise :

- modifiez la définition du nom CopieFacture par =Facture!$A$1:$J$48

- utilisez cette macro :

Code:
Sub onglet()
On Error Resume Next
With Sheets("Facture")
  If CStr(.[B12]) = "" Then Exit Sub
  If IsError(Sheets(CStr(.[B12]))) Then
    .Copy After:=Sheets(Sheets.Count)
    Sheets(Sheets.Count).Name = CStr(.[B12])
  Else
    .[CopieFacture].Copy Sheets(CStr(.[B12])).Range("A" & Rows.Count).End(xlUp)(5)
  End If
End With
End Sub
Attention au point devant [CopieFacture]...

A+
 

recovery

XLDnaute Junior
Re : Copier une zone de nom vers une autre feuille

Merci Job 75

ça fonctionne parfaitement vous venez de me sortir une belle épine du pied, je conseille souvent ce site car il mérite d'être connu, il y règne un formidable état d'esprit.

Un grand merci

Cordialement.
 

job75

XLDnaute Barbatruc
Re : Copier une zone de nom vers une autre feuille

Re,

DoubleZero m'a suggéré, à juste titre, de supprimer le bouton copié :

Code:
Sub onglet()
On Error Resume Next
With Sheets("Facture")
  If CStr(.[B12]) = "" Then Exit Sub
  If IsError(Sheets(CStr(.[B12]))) Then
    .Copy After:=Sheets(Sheets.Count)
    With Sheets(Sheets.Count)
      .Name = CStr(.[B12])
      .OLEObjects.Delete 'supprime le bouton
    End With
  Else
    .[CopieFacture].Copy Sheets(CStr(.[B12])).Range("A" & Rows.Count).End(xlUp)(5)
  End If
End With
End Sub
Edit 1 : testé sur Excel 2003, pas vérifié sur 2010...

Edit 2 : testé OK sur Excel 2010.

Bonne soirée et A+
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Copier une zone de nom vers une autre feuille

Bonjour recovery, le forum,

Il est aussi souhaitable de supprimer le nom dans la feuille créée :

Code:
Sub onglet()
On Error Resume Next
With Sheets("Facture")
  If CStr(.[B12]) = "" Then Exit Sub
  If IsError(Sheets(CStr(.[B12]))) Then
    .Copy After:=Sheets(Sheets.Count)
    With Sheets(Sheets.Count)
      .Name = CStr(.[B12])
      .OLEObjects.Delete 'supprime le bouton ActiveX
      .Names("CopieFacture").Delete 'supprime le nom dans la feuille
    End With
  Else
    .[CopieFacture].EntireRow.Copy _
      Sheets(CStr(.[B12])).Range("A" & Rows.Count).End(xlUp)(3)
  End If
End With
End Sub
Edit : pour la copie de la plage j'ai ajouté EntireRow ce qui offre 2 avantages :

- plus de souci si l'on oublie de modifier le nom CopieFacture

- les hauteurs des lignes sont copiées

Bonne journée.
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Copier une zone de nom vers une autre feuille

Re,

Pendant que j'y suis autant classer les onglets alphabétiquement :

Code:
Sub onglet()
Dim i%, j%
On Error Resume Next
With Sheets("Facture")
  If CStr(.[B12]) = "" Then Exit Sub
  If IsError(Sheets(CStr(.[B12]))) Then
    Application.ScreenUpdating = False
    .Move Before:=Sheets(1) 'au cas où...
    .Copy After:=Sheets(1)
    With Sheets(2)
      .Name = CStr(.[B12])
      .OLEObjects.Delete 'supprime le bouton ActiveX
      .Names("CopieFacture").Delete 'supprime le nom dans la feuille
    End With
    '---classement des onglets---
    For i = 2 To Sheets.Count
      For j = i + 1 To Sheets.Count
        If Sheets(j).Name < Sheets(i).Name Then Sheets(j).Move Before:=Sheets(i)
      Next
    Next
    .Activate 'retour
  Else
    .[CopieFacture].EntireRow.Copy _
      Sheets(CStr(.[B12])).Range("A" & Rows.Count).End(xlUp)(3)
  End If
End With
End Sub
Fichier joint.

A+
 

Pièces jointes

  • Facturation(1).xls
    139.5 KB · Affichages: 35
  • Facturation(1).xls
    139.5 KB · Affichages: 33
  • Facturation(1).xls
    139.5 KB · Affichages: 31

job75

XLDnaute Barbatruc
Re : Copier une zone de nom vers une autre feuille

Re,

Une dernière chose.

On peut mettre la date du jour par formule en D6 mais il faut supprimer cette formule dans la copie :

Code:
Sub onglet()
Dim i%, j%, c As Range
On Error Resume Next
With Sheets("Facture")
  If CStr(.[B12]) = "" Then Exit Sub
  If IsError(Sheets(CStr(.[B12]))) Then
    Application.ScreenUpdating = False
    .Move Before:=Sheets(1) 'au cas où...
    .Copy After:=Sheets(1)
    With Sheets(2)
      .Name = CStr(.[B12])
      .OLEObjects.Delete 'supprime le bouton ActiveX
      .Names("CopieFacture").Delete 'supprime le nom dans la feuille
      .[D6] = .[D6] 'supprime la formule de la date
    End With
    '---classement des onglets---
    For i = 2 To Sheets.Count
      For j = i + 1 To Sheets.Count
        If Sheets(j).Name < Sheets(i).Name Then Sheets(j).Move Before:=Sheets(i)
      Next
    Next
    .Activate 'retour
  Else
    Set c = Sheets(CStr(.[B12])).Range("A" & Rows.Count).End(xlUp)(3)
    .[CopieFacture].EntireRow.Copy c
    c(6, 4) = c(6, 4) 'supprime la formule de la date
  End If
End With
End Sub
Fichier (2).

A+
 

Pièces jointes

  • Facturation(2).xls
    140.5 KB · Affichages: 29
  • Facturation(2).xls
    140.5 KB · Affichages: 30
  • Facturation(2).xls
    140.5 KB · Affichages: 29

DoubleZero

XLDnaute Barbatruc
Re : Copier une zone de nom vers une autre feuille

Bonjour, recovery, job75 :D, le Forum,

Ma modeste contribution :eek: afin de supprimer les lignes vides de chaque facture archivée.

A bientôt :)
 

Pièces jointes

  • 00 - recovery - Merci job75.xls
    147 KB · Affichages: 33

Discussions similaires

Statistiques des forums

Discussions
312 310
Messages
2 087 117
Membres
103 477
dernier inscrit
emerica