variables pour remplacer le nom des feuilles

J

Jean

Guest
Bonjour à tous

J'ai fait un fichier Facturation contenant environ 150 feuilles (avec comme nom le nom de chacun de mes clients). Un par client et j'utilise ce fichier pour faire ma facturation.

Ensuite, je veux transférer les données des différentes feuilles dans un autre fichier que je nomme Compilation, celui-ci me servira pour faire le suivi de mes ventes.

Est-ce que je peux définir des variables pour identifier chacune feuilles de mon fichier facturation au lieu d'écrire le nom complet de la feuille et du fichier ?

J'espère que je suis assez clair ...

Merci pour votre aide.


Jean
 
B

Bernard

Guest
----
Bonsoir Jean

je suis content de revoir tes cent cinquante feuilles et tes pb avec, car j'attends toujours une réponse dans ce fil [Protection|<http://www.excel-downloads.com/html/French/forum/messages/1_98428_98428.htm>

Salut

Bernard
 
J

Jean

Guest
Bonjour à tous

Mille excuses Bernard

J'avais oublié de te remercier pour ton aide.

Je suis désolé.

Le problème de protection-déprotection est réglé.

Encore une fois merci pour ton aide.



Pour revenir au sujet: je vourdais trouver une façon simple de copier un range dans chacune de mes feuilles sans avoir à écrire à chaque fois le nom au complet de la feuille et du fichier d'origine et celui de destination.

J'ai plusieurs macros qui copient des données pour les transférer dans un autre fichier.

Exemple:
Sub FactureQuantite1()
Windows("facturation cartierville.xls").Activate
Sheets("Jean Plante").Select
Range("B5:B69").Select
Selection.Copy
Windows("compilation mensuelle.xls").Activate
Sheets("Jean PLante").Select
Range("IV3").End(xlToLeft).Select
ActiveCell.Cells(3, 1).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End Sub
 
B

Bernard

Guest
Bonsoir Jean

Merci de ton mea culpa.
Ce simple petit message pour dire que la réponse donnée correspond à ton attente et tout le monde est heureux de savoir que ton pb est résolu.

Cela donne envie de continuer à rendre service à nouveau.

Cordialement

Bernard
 
B

Bernard

Guest
Rebonsoir Jean

Pour copier des données dans un classeur et les coller dans un autre cela demande soit d'effectuer le travail à la main, fastidieux, soit de l'enregistrer dans une macro que l'on peut ensuite mettre en oeuvre autant de fois que besoin.
Cette macro peut être "intelligente", c'est à dire s'adapter à l'évolution des conditions dans le classeur récepteur en particulier.
Si tu veux passer toutes les feuilles d'un classeur les unes après les autres sans les nommer , la méthode exposée dans la macro "DeproMacroRepro" est parfaite.

Si tu veux faire quelqu chose d'autre, comme le dit Coco tu dois donner plus de précision.

Pour ton exemple, qui demande que les deux classeurs soient ouverts, j'ai condensé les lignes de ton code :

Sub FactureQuantite1()
Workbooks("facturation cartierville.xls").Sheets("Jean Plante").Range("B5:B69").Copy
Workbooks("compilation mensuelle.xls").Sheets("Jean PLante").Range("IV3").End(xlToLeft).Offset(2, 0).PasteSpecial Paste:=xlPasteValues
End Sub

Cordialement

Bernard
 
@

@+Thierry

Guest
Bonjour Bernard, Jean, Corinne, le Forum

Si j'ai bien compris ce que Jean souhaite ce devrait correspondre à ce Code ...


Option Explicit

Sub FactureQuantite1()
Dim WBSource As Workbook
Dim WBCible As Workbook
Dim WS As Worksheet
Dim WSname As String
Dim ThePlage As Range

Set WBSource = Workbooks("facturation cartierville.xls")
Set WBCible = Workbooks("compilation mensuelle.xls")

For Each WS In WBSource.Worksheets
WSname = WS.Name
Set ThePlage = WS.Range("B5:B69")
On Error GoTo ErrorHandler
With WBCible.Sheets(WSname)
ThePlage.Copy .Cells(3, .Range("IV3").End(xlToLeft).Column + 1)
End With
Next
Exit Sub
ErrorHandler:
If Err = 9 Then
MsgBox "La Feuille " & WSname & " n'existe pas dans le classeur " & WBCible.Name, vbCritical, "Arrêt Critique Procédure"
Else
MsgBox "Erreur Non Gérée " & Err.Number & " " & Err.Description
End If
End Sub


Cette produrer va Scanner Toutes les feuilles du Classeur Source ("facturation cartierville.xls") qui devient ici un Objet WorkBook "WBSource"...
On peut éviter de scanner certaines feuilles en ajoutant une condition If :
For Each WS In WBSource.Worksheets
If WS.Name <> "LaFeuilleAnePasCopier" Then
...
...
...
End If
Next

Pour le reste, il faut impérativement que toutes les feuilles à recopier du WBSource existe dans le Classeur "compilation mensuelle.xls" qui est donc l'Objet WBCible... Sinon je gère l'erreur, mais la difficulté est de reprendre la macro pour la suite... Il faudrai en fait faire un premier passage pour comparer toutes les Feuilles Cible des Feuilles Source, ce qui allongerait d'autant vu que l'on parle de 150 feuilles de chaque coté... (Mais celà reste dans le domaine du possible of course en créant la feuille manquante à la volée... Voir si besoin...)

Enfin voilà déjà pour une première approche

Bonne Soirée
@+Thierry
 
J

Jean

Guest
Bonjour à tous

Je vous remercie pour votre aide (et je prend note des commentaire de Bernard).

Je vais regarder le code de Thierry pour essayer de la comprendre (surement quelques jours).

Il semble que cela soit exactement ce que je voulais.

Encore une fois merci et je vous tiens au courant de mes futurs développements.


Jean
 
J

Jean

Guest
Bonjour à tous

Je demande encore une fois votre aide !!!

J'ai essayé d'adapter le code de Thierry (en passant il fonctionne très bien) pour une deuxième procédure mais j'ai toujours un message d'erreur.

Voici ce que je veux faire: a partir du classeur source/feuille Jean je veux copier un range B5:B10 dans le classeur cible/toutes les feuilles dans le range C5:C10

Voici le code:
Sub CommandButton2_Click()
Dim WBSource As Workbook
Dim WBCible As Workbook
Dim WSS As Worksheet
Dim WSC As Worksheet
Dim WSnameSource As String
Dim WSnameCible As String
Dim ThePlage As Range

Set WBSource = Workbooks("source.xls")
Set WBCible = Workbooks("cible.xls")

For Each WSS In WBSource.Worksheets
If WSS.Name = "Jean" Then
WSnameSource = WSS.Name
Set ThePlage = WSS.Range("B5:B10")
On Error GoTo ErrorHandler
WSnameCible = WSC.Name
With WBCible.Sheets(WSnameCible)
ThePlage.Copy .Range("C5")
End With
End If
Next
Exit Sub

ErrorHandler:
If Err = 9 Then
MsgBox "La Feuille " & WSnameSource & " n'existe pas dans le classeur " & WBCible.Name, vbCritical, "Arrêt Critique Procédure"
Else
MsgBox "Erreur Non Gérée " & Err.Number & " " & Err.Description
End If
End Sub

Voici le message d'erreur:
Erreur non gérée 91: variable objet ou varaible de bloc with non définie

Extra: une fois le problème résolu, serait-il possible d'empêcher la copie du range dans certaine feuille du classeur cible ?

Encore une fois merci


Jean
 
@

@+Thierry

Guest
Salut Jean, le Forum

Sorry pas vu ton problème jusqu'à lors !

C'est simple, remplace :
WSnameCible = WSC.Name

Par
WSnameCible = WSS.Name 'NB Si tu veux ne copier que "Jean" !!!

Et c'est tout ! (quoique je reverrai un peu ce code, mais bon !

Pour "serait-il possible d'empêcher la copie du range dans certaine feuille du classeur cible" si je ne m'abuse, ce code ne fera de copy que d'une feuille "Jean" de ("source.xls") vers une Feuille Jean de ("cible.xls") ???

M'enfin si c'est pour une autre procédure on peut faire ceci :

Sub CommandButton2_Click()
Dim WBSource As Workbook
Dim WBCible As Workbook
Dim WSS As Worksheet
Dim WSC As Worksheet
Dim WSnameSource As String
Dim WSnameCible As String
Dim ThePlage As Range

Set WBSource = Workbooks("source.xls")
Set WBCible = Workbooks("cible.xls")

For Each WSS In WBSource.Worksheets
If WSS.Name = "Jean" Or WSS.Name = "Toto" Then
WSnameCible = WSS.Name
Set ThePlage = WSS.Range("B5:B10")
On Error GoTo ErrorHandler
With WBCible.Sheets(WSnameCible)
ThePlage.Copy .Range("C5")
End With
End If
Next
Exit Sub

ErrorHandler:
If Err = 9 Then
MsgBox "La Feuille " & WSnameSource & " n'existe pas dans le classeur " & WBCible.Name, vbCritical, "Arrêt Critique Procédure"
Else
MsgBox "Erreur Non Gérée " & Err.Number & " " & Err.Description
End If
End Sub

Ce code ne fera des copies que des plage des Feuille "Toto" et "Jean"...

Bonne Soirée
@+Thierry
 

Discussions similaires

  • Question
Microsoft 365 Boutons
Réponses
28
Affichages
519
Réponses
5
Affichages
138

Statistiques des forums

Discussions
312 296
Messages
2 086 962
Membres
103 409
dernier inscrit
Dave56