VBA / Macro : Copier des données en fonctions de conditions
GalaadV3
-
fabien25000 Messages postés 673 Date d'inscription Statut Membre Dernière intervention -
fabien25000 Messages postés 673 Date d'inscription Statut Membre Dernière intervention -
Bonjour à tous,
Débutant dans le domaine de la Macro, je dois en réaliser une permettant de copier des données en fonction de conditions.
Si la condition est respectée alors la donnée de la Feuille 1 se copie vers la Feuille 2 dans des cellules précises.
Chaque semaine, la valeur collée change de colonne mais reste sur la même ligne.
Voir comme ci-après mon début de Macro :
___________________________________________________
Sub TestMacroX()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
feuil1.Select
Range("O13:P350").Select
Dim Feuil2 As Integer
If numligne = 548153 And numligne = a Then
sheets(feuil1).Select Cells(numligne, 23) = sheets(Feuil2).Cells(13, 20)
End If
If numligne = 548153 And numligne = t Then
sheets(feuil1).Select Cells(numligne, 23) = sheets(Feuil2).Cells(13, 20)
End If
If numligne = 548153 And numligne = e Then
sheets(feuil1).Select Cells(numligne, 23) = sheets(Feuil2).Cells(13, 20)
End If
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub
___________________________________________________
Débutant dans le domaine de la Macro, je dois en réaliser une permettant de copier des données en fonction de conditions.
Si la condition est respectée alors la donnée de la Feuille 1 se copie vers la Feuille 2 dans des cellules précises.
Chaque semaine, la valeur collée change de colonne mais reste sur la même ligne.
Voir comme ci-après mon début de Macro :
___________________________________________________
Sub TestMacroX()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
feuil1.Select
Range("O13:P350").Select
Dim Feuil2 As Integer
If numligne = 548153 And numligne = a Then
sheets(feuil1).Select Cells(numligne, 23) = sheets(Feuil2).Cells(13, 20)
End If
If numligne = 548153 And numligne = t Then
sheets(feuil1).Select Cells(numligne, 23) = sheets(Feuil2).Cells(13, 20)
End If
If numligne = 548153 And numligne = e Then
sheets(feuil1).Select Cells(numligne, 23) = sheets(Feuil2).Cells(13, 20)
End If
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub
___________________________________________________
A voir également:
- VBA / Macro : Copier des données en fonctions de conditions
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Jitbit macro recorder - Télécharger - Confidentialité
- Télécharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Macro word - Guide
- Excel compter cellule couleur sans vba - Guide
2 réponses
Bonjour,
Il n'y a rien qui va dans ta macro :
numligne n'est pas déclaré, a, t et e nonplus si c'est des variables.. en tout cas écrit comme ça c'est ce que ça laisse penser
tes if doivent vérifier si numligne a pour valeur un nombre ET une variable (a, e ou t) qui sort d'on ne sait pas où, à moins que ce soit la lettre.. bref ça ne va pas en l'état
pour finir tes 3 if ne sont pas utiles.. si numligne doit être a, e ou t alors écrit simplement
mais de toute façon numligne n'est pas déclaré donc ça n'aboutira jamais
.. voilà ce que je peux dire sur ta macro.. tu trouveras de l'aide mais il va falloir un peu plus de substance pour arriver à qqchose
Il n'y a rien qui va dans ta macro :
Dim Feuil2 As Integer!? tu déclares ici que feuil2 est un chiffre entier
numligne n'est pas déclaré, a, t et e nonplus si c'est des variables.. en tout cas écrit comme ça c'est ce que ça laisse penser
tes if doivent vérifier si numligne a pour valeur un nombre ET une variable (a, e ou t) qui sort d'on ne sait pas où, à moins que ce soit la lettre.. bref ça ne va pas en l'état
sheets(feuil1).Select Cells(numligne, 23) = sheets(Feuil2).Cells(13, 20)ici avant tout il faudrait aller à la ligne après le .select et surtout tu fais l'inverse de ce que tu expliques : si ça fonctionnait, tu importerai les données de la feuille 2 dans la feuille 1. Dans ce cas, le "=" s'entend "reçoit" donc tu dis feuil1 reçois feuil2 en gros
sheets(feuil1)ne s'écrit pas comme ça : c'est soit
sheets(1)parce que tu travailles selon l'index de tes feuilles, soit
sheets("Feuil1")en travaillant avec le nom de l'onglet soit
Feuil1en travaillant avec le codename
pour finir tes 3 if ne sont pas utiles.. si numligne doit être a, e ou t alors écrit simplement
If numligne = a or numligne = e or numligne = t Then sheets(feuil1).Select Cells(numligne, 23) = sheets(Feuil2).Cells(13, 20) end if
mais de toute façon numligne n'est pas déclaré donc ça n'aboutira jamais
.. voilà ce que je peux dire sur ta macro.. tu trouveras de l'aide mais il va falloir un peu plus de substance pour arriver à qqchose
Merci à toi fabien25000,
Comme je l'ai dis ; je ne connais pas grands choses aux Macro. Mais bref.
Avec ce que tu viens de me dire et les recherches associées je suis arrivé a quelque chose.
Pour mieux comprendre et éviter de me tromper, j'ai fais en sorte que les données que je souhaites coller apparaissent sur la feuille de départ.
Dis moi ce que tu en penses :
____________________________________________________________
Sub TestMacroXYZ()
For numligne = 5 To 350
Dim condition As String
condition = Cells(numligne, 15)
If Cells(numligne, 16) = 'La_Valeur_Cherchée' And condition = "e" Then
Cells(numligne, 21) = Cells(numligne, 19)
End If
If Cells(numligne, 16) = 'La_Valeur_Cherchée' And condition = "a" Then
Cells(numligne, 21) = Cells(numligne, 19)
End If
If Cells(numligne, 16) = 'La_Valeur_Cherchée' And condition = "t" Then
Cells(numligne, 21) = Cells(numligne, 19)
End If
Next
End Sub
____________________________________________________________
Comme je l'ai dis ; je ne connais pas grands choses aux Macro. Mais bref.
Avec ce que tu viens de me dire et les recherches associées je suis arrivé a quelque chose.
Pour mieux comprendre et éviter de me tromper, j'ai fais en sorte que les données que je souhaites coller apparaissent sur la feuille de départ.
Dis moi ce que tu en penses :
____________________________________________________________
Sub TestMacroXYZ()
For numligne = 5 To 350
Dim condition As String
condition = Cells(numligne, 15)
If Cells(numligne, 16) = 'La_Valeur_Cherchée' And condition = "e" Then
Cells(numligne, 21) = Cells(numligne, 19)
End If
If Cells(numligne, 16) = 'La_Valeur_Cherchée' And condition = "a" Then
Cells(numligne, 21) = Cells(numligne, 19)
End If
If Cells(numligne, 16) = 'La_Valeur_Cherchée' And condition = "t" Then
Cells(numligne, 21) = Cells(numligne, 19)
End If
Next
End Sub
____________________________________________________________
je l'écrirais comme ça si la valeur recherchée est toujours la même: (avec la mise en forme c'est plus sympa aussi voir le petit tuto suivant ;) https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code )
Ce qui me "chagrine" dans ce code c'est qu'on ne sait pas sur quelle feuille travaille la macro
Sub TestMacroXYZ() Dim condition As String, NumLigne As Long For NumLigne = 5 To 350 condition = Cells(NumLigne, 15).Value If Cells(NumLigne, 16) = 'La_Valeur_Cherchée' Then If condition = "a" Or condition = "e" Or condition = "t" Then Cells(NumLigne, 21) = Cells(NumLigne, 19) End If End If Next NumLigne End Sub
Ce qui me "chagrine" dans ce code c'est qu'on ne sait pas sur quelle feuille travaille la macro