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 sub

Pour le code 2, je ne vois pas le rapport avec le code 1. Ce code (qui me rappelle quelque chose... lol ! ... ) sert à sauvegarder une feuille dans un nouveau classeur avec un nouveau nom. Tu veux le faire autant de fois sur base de la cellule F10 (donc jusqu'à 199 fois) ?

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

https://www.excel-pratique.com/~files/doc/icetea_test.xls

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 Sub
Sub 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 Sub

Les 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.

Rechercher des sujets similaires à "simplication code vba"