Fonction Si et Copier/Coller
Bonjour à tous, je suis nouveau sur ce site et j'adore toutes les fonctions VBA que je peux réaliser.
Malheureusement je suis tout nouveau dans ce domaine et après avoir chopé quelques lignes de codes, je me rends compte que ce monde est beaucoup plus complexe que je ne l'imaginais.
J'expose mon problème:
J'ai essayé de créer une macro VBA pour copier coller des valeurs d'un tableau sur un autre tableau du même excel Mais j'ai inclus une fonction si qui me sert a définir les conditions de copier/coller.
Concrètement, Si une de mes colonnes G, I, J, ou K est supérieur a 0, alors je copie les valeurs de mes colonnes B, C, G, I, J, et K de ma feuille 2 sur les colonnes D, E,H, F, G, et J de ma feuille 1:
Voici le code:
Private Sub Worksheet_Activate()
Macro1
End SubCelui-ci étant avec ma feuille 1
Sub Macro1()
If IsNumeric(Range("G4:G34"))> 0 Or IsNumeric(Range("I4:34"))> 0 Or IsNumeric(Range("J4:J34"))> 0 Or IsNumeric(Range("K4:K34"))> 0 Then
With Sheets("Feuil2")
.Range("B4:B34").Copy
Range("D15").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
.Range("C4:C34").Copy
Range("E15").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
.Range("G4:G34").Copy
Range("H15").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
.Range("I4:I34").Copy
Range("F15").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
.Range("J4:J34").Copy
Range("G15").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
.Range("K4:K34").Copy
Range("J15").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
End With
End If
End SubEt celui-ci pour la feuille 2.
Et je joins si besoin mon excel.
Ma macro ne fonctionne pas mais je n'arrive pas a déterminer les raisons...
Merci pour réponses! =)
Bonjour Yosh et bienvenu, bonjour le forum
Essaie comme ça :
Sub Macro1()
Dim OS As Worksheet 'Onglet Source
Dim OD As Worksheet 'Onglet Destination
Dim I As Integer 'Incrément
Dim LI As Integer 'LIgne
Set OS = Worksheets("Hoja2")
Set OD = Worksheets("Hoja1")
For I = 4 To 34
If OS.Cells(I, "G").Value > 0 Or OS.Cells(I, "I").Value > 0 Or OS.Cells(I, "J").Value > 0 Or OS.Cells(I, "K").Value > 0 Then
LI = IIf(OD.Range("B15").Value = "", 15, OD.Cells(Application.Rows.Count, "B").End(xlUp).Row + 1)
OD.Cells(LI, "D").Value = OS.Cells(I, "B").Value
OD.Cells(LI, "E").Value = OS.Cells(I, "C").Value
OD.Cells(LI, "H").Value = OS.Cells(I, "G").Value
OD.Cells(LI, "F").Value = OS.Cells(I, "I").Value
OD.Cells(LI, "G").Value = OS.Cells(I, "J").Value
OD.Cells(LI, "J").Value = OS.Cells(I, "K").Value
End If
Next I
End Sub- Messages
- 2'417
- Excel
- 2019
- Inscrit
- 13/07/2017
- Emploi
- Formateur, animateur,tech.informatique
Bonjour toutes et tous
je n'ai aucun code sur ton classeur et en essayant d'enregistrer le classeur avec les macros peut-être (==>Classeur Excel(Prenant en charges les macros<==))
crdlt,
André
Oui, c'est normal, car quand j'essaye de valider ma macro sur mon excel, il ne me l'a prends pas en compte et donc la supprime automatiquement quand je sauvegarde le tout...
Concernant le code que tu m'as passé, TauTheme, il ne fonctionne pas, il m'indique une erreur: L'indice n'appartient pas à la sélection (Indice hors plage (erreur 9)).
J'ai du oublier un truc...
Edit: Erreur de ma part sur la dénomination de mes feuilles!
Du coup Tautheme, je vois que tu es ultra callé en VBA, ca m'intéresse de ouf!
Tu aurais des liens, des sites ou je peux comprendre toutes les formules que je peux utiliser en VBA, car ca reste un peu flou pour moi! x)
Encore Merci! :D
Edit 2: Alors, je viens de l'exploiter ce code VBA, et il manque une chose:
Quand je suis sur la première ligne, tout est nickel, par contre quand je veux rajouter une deuxième une ligne en dessous de la première, il ne me la prends pas en compte et il me remplace la première ligne par la deuxième!
Concrètement, il n'arrive pas a copier les données les unes en dessous des autres sur la feuille1.
Bonsoir le fil, bonsoir le forum,
Met un fichier avec des données que l'on puisse tester car un fichier vide c'est un peu couillon... Sinon, j'ai pratiquement tout appris sur des forums...
Voila le résultat:
Tu peux essayer de changer les valeurs et tu verras que, avec cette commande, il ne passe pas a la ligne et écrit toujours sur la même ligne 15.
Re,
En effet, pour calculer la ligne LI, je me basais sur la colonne B et comme il n'y a pas de données en colonne B, la variable LI restait toujours égale à 15 et les lignes se copiaient les une sur les autres. Le code corrigée avec la colonne D comme référence :
Sub Macro1()
Dim OS As Worksheet 'Onglet Source
Dim OD As Worksheet 'Onglet Destination
Dim I As Integer 'Incrément
Dim LI As Integer 'LIgne
Set OS = Worksheets("Hoja 2")
Set OD = Worksheets("Hoja 1")
For I = 4 To 34
If OS.Cells(I, "G").Value > 0 Or OS.Cells(I, "I").Value > 0 Or OS.Cells(I, "J").Value > 0 Or OS.Cells(I, "K").Value > 0 Then
LI = IIf(OD.Range("D15").Value = "", 15, OD.Cells(Application.Rows.Count, "D").End(xlUp).Row + 1)
OD.Cells(LI, "D").Value = OS.Cells(I, "B").Value
OD.Cells(LI, "E").Value = OS.Cells(I, "C").Value
OD.Cells(LI, "H").Value = OS.Cells(I, "G").Value
OD.Cells(LI, "F").Value = OS.Cells(I, "I").Value
OD.Cells(LI, "G").Value = OS.Cells(I, "J").Value
OD.Cells(LI, "J").Value = OS.Cells(I, "K").Value
End If
Next I
End SubSuper Merci pour le code et l'aide précieuse que tu m'as apporté! Ca marche nickel! =)