Modifier une macro en inserant une condition (fonction SI)

jaguar69

XLDnaute Nouveau
Bonjour a toutes et a tous,

Je suis debutant en VBA ainsi qu'en creation de macro et je me heurte a un probleme dont je n'arrive pas a trouver la solution.
J'ai créé une macro me permettant d'ajouter des lignes dans un tableau et de copier des données venant d'une autre feuille. Cette macro fonctionne parfaitement tel quel.
Ce que je voudrai faire est :
-d'une part la lancer a chaque ouverture du fichier excel correspondant
- d'autre part je voudrai qu'elle ne fonctionne que si le resultat de la case C17 de ma feuille = 1. Si C17=1, la macro ajoute des lignes, copies les données, .... Si C17=0, la macro ne fait rien.

Ci-dessous mon code macro

Merci d'avance pour votre aide

Sub Macro1()
'
' Macro1 Macro
'

'
Sheets("Compte").Select
Rows("8:8").Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Sheets("Echeancier").Select
Range("G4:J4").Select
Selection.Copy
Sheets("Compte").Select
Range("B8").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("F9").Select
Application.CutCopyMode = False
Selection.AutoFill Destination:=Range("F8:F9"), Type:=xlFillDefault
Range("F8:F9").Select
Range("G8").Select
ActiveCell.FormulaR1C1 = "non"
Range("B1").Select
Selection.Copy
Range("A8").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("J9:L9").Select
Application.CutCopyMode = False
Selection.Copy
Range("J8").Select
ActiveSheet.Paste
End Sub
 

john

XLDnaute Impliqué
Re : Modifier une macro en inserant une condition (fonction SI)

Bonjour,
Dans le code de "thisworkbook" tu mets :
Private Sub Workbook_Open()
Call Module1.Macro1
End Sub
et dans le module1 tu mets :
Sub Macro1()
'
' Macro1 Macro
'

'
If Range("C17").Value = 1 Then
Sheets("Compte").Select
Rows("8:8").Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Sheets("Echeancier").Select
Range("G4:J4").Select
Selection.Copy
Sheets("Compte").Select
Range("B8").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("F9").Select
Application.CutCopyMode = False
Selection.AutoFill Destination:=Range("F8:F9"), Type:=xlFillDefault
Range("F8:F9").Select
Range("G8").Select
ActiveCell.FormulaR1C1 = "non"
Range("B1").Select
Selection.Copy
Range("A8").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("J9:L9").Select
Application.CutCopyMode = False
Selection.Copy
Range("J8").Select
ActiveSheet.Paste
End If
Ca devrait faire ce que tu veux ;)
Bonne journée.
John
End Sub
Edit : Salut VDAVID :)
 
Dernière édition:

VDAVID

XLDnaute Impliqué
Re : Modifier une macro en inserant une condition (fonction SI)

Bonjour Jaguar69,

Essaye comme ceci:

(En supposant que la condition avec la case C17 porte sur la feuille "Compte"

Code:
Private Sub Workbook_Open()

    With Sheets("Compte")
    
        If .Range("C17").Value = 1 Then
            
            .Rows("8:8").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
            Sheets("Echeancier").Range("G4:J4").Copy Destination:=.Range("B8")
            .Range("F9").AutoFill Destination:=.Range("F8:F9"), Type:=xlFillDefault
        
            .Range("G8").FormulaR1C1 = "non"
            .Range("B1").Copy Destination:=.Range("A8")
            .Range("J9:L9").Copy Destination:=.Range("J8")
            Application.CutCopyMode = False
        
        End If
    
    End With

End Sub

Il faut que tu insère le code dans le projet de ton classeur.
Alt + F11 ==> Double clique sur "ThisWorkbook"
N'hésites pas si tu as des questions. :)
Bonne journée !

EDIT: Salut John !
 

jaguar69

XLDnaute Nouveau
Re : Modifier une macro en inserant une condition (fonction SI)

Bonjour,
Dans le code de "thisworkbook" tu mets :
Private Sub Workbook_Open()
Call Module1.Macro1
End Sub
et dans le module1 tu mets :
Sub Macro1()
'
' Macro1 Macro
'

'
If Range("C17").Value = 1 Then
Sheets("Compte").Select
Rows("8:8").Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Sheets("Echeancier").Select
Range("G4:J4").Select
Selection.Copy
Sheets("Compte").Select
Range("B8").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("F9").Select
Application.CutCopyMode = False
Selection.AutoFill Destination:=Range("F8:F9"), Type:=xlFillDefault
Range("F8:F9").Select
Range("G8").Select
ActiveCell.FormulaR1C1 = "non"
Range("B1").Select
Selection.Copy
Range("A8").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("J9:L9").Select
Application.CutCopyMode = False
Selection.Copy
Range("J8").Select
ActiveSheet.Paste
End If
Ca devrait faire ce que tu veux ;)
Bonne journée.
John
End Sub
Edit : Salut VDAVID :)

Un ENORME merci. c'est exactement ce que je voulais faire
 

jaguar69

XLDnaute Nouveau
Re : Modifier une macro en inserant une condition (fonction SI)

Re bonjour,

Petits retour d'experience sur vos solutions respectives

La solution donnée par John fonctionne .....une seule fois. je m'explique. Le résultat de ma cellule C17 est lié a une date. Pour certaines dates = 1, les autres =0
je copies les codes, j'enregistre. Le resultat de C17 est bien = 1. je ferme le fichier et je l'ouvre a nouveau. ça marche sans soucis et le resultat de ma cellule C17 devient =0 (pour executer la macro qu'une seule fois par date). Maintenant, Je change la date de façon a ce que C17=1 et je ferme le fichier. Lorsque je l'ouvre a nouveau, rien ne se passe alors que C17=1. Maintenant, j'ai peut etre fait quelque chose de travers.

J'ai donc essayé la solution de VDAVID. Elle fonctionne parfaitement et ce a chaque fois que je reouvre le fichier et que C17=1 (changement de date) ... la macro copie les bonnes données au bon endroit

Encore merci a vous deux
 

Discussions similaires

Réponses
2
Affichages
124
Réponses
3
Affichages
241

Statistiques des forums

Discussions
312 322
Messages
2 087 279
Membres
103 507
dernier inscrit
tapis23