Simplication de code VBA
Bonjour à tous,
Voila, je souhaite réaliser cette macro pour les cellules A2 à A200 uniquement si les cellules ne sont pas vides
CODE 1 :
Range("A2").Select
Selection.Copy
Sheets("Récap client").Select
Range("F10").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
et ensuite, appliquer ce code pour chaque cellule non vide.
CODE 2:
Dim extension As String
With Application
.ScreenUpdating = False
.EnableEvents = False
End With
ThisWorkbook.ActiveSheet.Copy
ActiveSheet.UsedRange.Activate
With Selection
.Copy
.PasteSpecial Paste:=xlPasteValues
End With
extension = ".xls"
If ActiveSheet.Name = "Récap client" Then
chemin = "C:\Documents and Settings\Laurent Mortelmans\Mes documents\Projet\PROXISERVICE\Gestion\Clients\"
nomfichier = ActiveSheet.Range("F10") & "-" & ActiveSheet.Range("A23") & extension
End If
MsgBox "Votre sauvegarde porte la référence : " & nomfichier
With ActiveWorkbook
Selection.AutoFilter Field:=8, Criteria1:="<>"
.SaveAs Filename:=chemin & nomfichier
.Close
End With
With Application
.EnableEvents = True
.ScreenUpdating = True
End With
End Sub
En fait, si la cellule A2 n'est pas vide, alors on exécute le CODE2 et on passe à la cellule A3. Par contre, si la cellule A2 est vide, on passe directement à la cellule A3 et ainsi de suite jusqu'à la cellule A200.
Y a t-il un moyen pour que cela se gère automatiquement.
Vous remerciant par avance
ICETEA
Bonsoir,
La macro pour le code 1 pourrait être la suivante :
Sub test()
'Macro dan le 11/01/09
i = 2
For i = 2 To 200
If Not IsEmpty(ActiveSheet.Range("A" & i)) Then
Sheets("Récap client").Range("F" & i + 8) = ActiveSheet.Range("A" & i)
End If
Next
End subPour le code 2, je ne vois pas le rapport avec le code 1. Ce code (qui me rappelle quelque chose... lol ! ...
Donne plus d'explications sur ce que tu veux faire ou mieux mets ton fichier en ligne, je regarderai pour adapter ton code.
A te relire
Dan
Bonjour Dan,
Effectivement le code 2 doit te rappeler quelque chose....
Voici mon fichier simplifié. En effet je souhaite effectuer le code 2 pour chaque clients de la colonne A de l'onglet "clients". Je souhaite aussi imprimer la facture pour chaque client. Evidemment la facture ne s'imprimera et ne s'enregistera pas si il n'y a pas de client dans les cellules A de l'onglet client. (les clients seront mis à la suite au fur et à mesure dans la plage A, le 1er client en A2, le second en A3, etc...)
J'espère que mes explications sont suffisament claires.
Te remerciant par avance.
ICETEA
Bonjour,
Merci de tes explications on ne peut plus claires.
Voici les codes à placer dans un module :
Sub Edition()
'Macro dan le 11/01/09
i = 2
For i = 2 To Sheets("Clients").Range("A65536").End(xlUp).Row
Sheets("Récap client").Range("F10") = Sheets("Clients").Range("A" & i)
Call sauve
Next
End SubSub sauve()
'Macro dan le 11/01/09
Dim extension As String, Chemin As String, nomfichier As String
Application.ScreenUpdating = False
ThisWorkbook.ActiveSheet.Copy
With ActiveSheet.UsedRange
.Copy
.PasteSpecial Paste:=xlPasteValues
End With
extension = ".xls"
Chemin = "C:\Documents and Settings\Laurent Mortelmans\Mes documents\Projet\PROXISERVICE\Gestion\Clients\"
nomfichier = ActiveSheet.Range("F10") & "-" & ActiveSheet.Range("A23") & extension
MsgBox "Votre sauvegarde porte la référence : " & nomfichier
With ActiveWorkbook
Selection.AutoFilter Field:=8, Criteria1:="<>"
.SaveAs Filename:=Chemin & nomfichier
.Close
End With
End SubLes codes fonctionneront depuis la feuille Récap clients, d'où :
- ton bouton "Edition" doit se trouver sur cette feuille.
- ton bouton doit être associé à la macro EDITION.
- la liste de tes clients doit être continue dans ta colonne A. Si cela peut être possible il faudra modifier le code pour palier à cette éventualité.
Amicalement
Dan
Dan,
Encore un grand merci pour ce petit code qui fonctionne à merveille. Par contre peux-tu m'expliquer les modifications à apporter si je veux mettre le bouton "EDITION" sur une autre feuille.
ICETEA
Re,
Il faudra en principe modifier les "ACTIVESHEET" par SHEETS("Le nom de la feuille")
A vérifier si cela fonctionnera sans soucis car en programmation, il faut toujours figer son projet avant de réaliser un code.
Amicalement
Dan
PS : si ton pb est terminé, n'oublie pas de mettre "RESOLU" sur le fil en utilisant le liste déroulante en bas à gauche de ton premier message.