Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/11/2011, 08h18   #1
Nouveau Membre du Club
 
Inscription : octobre 2011
Messages : 106
Détails du profil
Informations forums :
Inscription : octobre 2011
Messages : 106
Points : 38
Points : 38
Par défaut copie sur feuilles variables

Bonjour, j'ai un souci pour copier coller sur des feuilles variables.

J'ai un devis avec des feuilles "sous détail 1", "sous détail 2", selon les besoins d'une commande etc...

J'arrive à ajouter les feuilles, à copier la feuille devis mais c'est pour coller que je bloque je n'arrive pas à déclarer les variables correctement.

Voici le code que j'utilise :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Sub ExportCodeFeuille ()
 
  Worksheets("Devis").Protect userinterfaceonly:=True
 
Dim wAdd As Worksheet
      wAdd = Worksheets("Détail" + Str(Sheets.Count - 4)).Name
 
    Sheets.Add.Name = "Détail" + Str(Sheets.Count - 4)
        ActiveSheet.Move After:=Sheets("Devis")
    Sheets("Devis").Select
        Cells.Select
    Selection.Copy
          wAdd.Select
        ActiveSheet.Paste
        Application.CutCopyMode = False
Ce code est probablement truffé d'erreurs mais à 8h du mat j'ai pas les yeux en face des trous...
Il accepte pas la ligne
Code :
wAdd = Worksheets("Détail" + Str(Sheets.Count - 4)).Name
l'indice n'appartient pas à la sélection. Si quelqu'un a une idée je suis preneur
merci d'avance.
tompom3108 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2011, 08h32   #2
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 849
Points : 16 849
Envoyer un message via Skype™ à bbil
bonjour,

il faut enlever tes ActiveSheet, Select ..

Pour affecter une objet à rune variable il faut utiliser set ..

Code :
1
2
Dim wAdd As Worksheet
      set wAdd = ThisWorkbook.Worksheets("Détail" + Str(ThisWorkbook.Sheets.Count - 4))
Comment s'appellent tes feuilles détails ? tu peu vérifier le calcul de leur nom en l'affichant, saisie ce code dans la fenêtre exécution (CTRL+G) :
Code :
? "Détail" + Str(ThisWorkbook.Sheets.Count - 4)
voir http://darkvader.developpez.com/tuto...basic-6/#LII-3


ensuite quel est le but de la ligne suivant (sheets.Add..) ?
bbil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2011, 08h57   #3
Nouveau Membre du Club
 
Inscription : octobre 2011
Messages : 106
Détails du profil
Informations forums :
Inscription : octobre 2011
Messages : 106
Points : 38
Points : 38
Par défaut reponse

Bonjour et merci pour ta sollicitude

Le nom des feuilles est "détail 1", "détail 2" etc.

ces feuilles sont ajoutées uniquement si la commande le nécessite en terme de volume de produits. (si le champ de saisi de la feuille devis est trop petit pour la commande).

C'est pour cela que je veux utiliser un sheet.add avec un nom incrémenté :
"Détail" + str(Sheets.count -4).

Et pour chaque feuille ajoutée, effectuer la même copie du <<modèle>> représenté par la feuille "devis".

Je vais essayer avec Set mais je crois que je l'ai déjà fait merci

J'ai essayé le Ctrl + G mais rien n'apparait dans la fenêtre d'execution quand j'exécute la macro.
tompom3108 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2011, 09h06   #4
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 849
Points : 16 849
Envoyer un message via Skype™ à bbil
Citation:
Envoyé par tompom3108 Voir le message
...

Le nom des feuilles est "détail 1", "détail 2" etc.

...

Citation:
Envoyé par bbil Voir le message
...tu peu vérifier le calcul de leur nom en l'affichant, saisie ce code dans la fenêtre exécution (CTRL+G) :
Code :
? "Détail" + Str(ThisWorkbook.Sheets.Count - 4)
voir http://darkvader.developpez.com/tuto...basic-6/#LII-3
as-tu contrôlé ton calcul du nom de la feuille ??

Pour le Set .. c'est juste pour avoir un code cohérent tu définit wAdd en worksheet .. pour l'affecter il faut utiliser Set ... après je suis pas sur que cette affectation soit nécessaire la ...


Lors de l'appel de ton code doit-tu à chaque appel créer une nouvelle feuille ?
bbil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2011, 10h34   #5
Nouveau Membre du Club
 
Inscription : octobre 2011
Messages : 106
Détails du profil
Informations forums :
Inscription : octobre 2011
Messages : 106
Points : 38
Points : 38
oui chaque appel de macro doit créer une nouvelle feuille "détail n+1"

Après j'ai saisi
Code :
? "Détail" + Str(ThisWorkbook.Sheets.Count - 4)
dans la fenêtre d'exécution mais j'obtiens rien.

il y a truc a faire en plus ?

bon j'ai essayé ce code, j'ai du mal avec les variables... entre autre
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Sub ExportCodeFeuille()
 
Dim wadd As Worksheets
Dim xnom As Variant
 
Set wadd = ThisWorkbook.Worksheets(xnom)
Set xnom = "Détail" + Str(Sheets.Count - 4)
 
 
  Worksheets("Devis").Protect userinterfaceonly:=True
 
  Sheets.Add.Name = "Détail" + Str(Sheets.Count - 4)
        ActiveSheet.Move After:=Sheets("Devis")
 
    Sheets("Devis").Select
        Cells.Select
    Selection.Copy
          wadd.Select
        ActiveSheet.Paste
        Application.CutCopyMode = False
 
 
End Sub
Evidemment ça ne marche pas...

Le seul bout de code qui marche c'est
Code :
1
2
3
4
5
6
7
8
Worksheets("Devis").Protect userinterfaceonly:=True
 
  Sheets.Add.Name = "Détail" + Str(Sheets.Count - 4)
        ActiveSheet.Move After:=Sheets("Devis")
 
    Sheets("Devis").Select
        Cells.Select
    Selection.Copy
Mon problème c'est de sélectionner la nouvelle feuille ajoutée (Dim wadd) nommée "Détail n°" puis de coller la sélection copiée dans la feuille "Devis"

Je n'y suis pas encore . Je creuse + profondément...
tompom3108 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2011, 10h41   #6
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 849
Points : 16 849
Envoyer un message via Skype™ à bbil
Citation:
Envoyé par tompom3108 Voir le message
Mon problème c'est de sélectionner la nouvelle feuille ajoutée (Dim wadd) nommée "Détail n°" puis de coller la sélection copiée dans la feuille "Devis"

Je n'y suis pas encore . Je creuse + profondément...
je pensai que la copie était à réaliser de la feuille Devis vers la feuille détail..
Code :
1
2
3
4
5
6
7
8
9
10
11
Sub ExporteCodeFeuille()
Dim shDevis As Worksheet 'Définit la variable shDevis pour l'accés à cette feuille
Dim shDetail As Worksheet 'Définit la variable pour accés à la nouvelle feuille
Set shDevis = ThisWorkbook.Worksheets("Devis")
shDevis.Protect userinterfaceonly:=True
shDevis.Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
Set shDetail = ActiveSheet
shDetail.Name = "Détail " + Str(ThisWorkbook.Sheets.Count - 4) 'Attention à l'espace
 
 
End Sub
bbil est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 18/11/2011, 10h52   #7
Nouveau Membre du Club
 
Inscription : octobre 2011
Messages : 106
Détails du profil
Informations forums :
Inscription : octobre 2011
Messages : 106
Points : 38
Points : 38
Par défaut ok

Bon ça marche comme sur des roulettes

je sais pas pourquoi je me complique la vie, ça a l'air si simple...

Un grand merci Bbil à bientôt peut être..
tompom3108 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h55.


 
 
 
 
Partenaires

Hébergement Web