VBA / Macro : Copier des données en fonctions de conditions
Fermé
GalaadV3
-
Modifié le 7 mai 2021 à 11:02
fabien25000 Messages postés 673 Date d'inscription mercredi 5 octobre 2016 Statut Membre Dernière intervention 28 juillet 2022 - 7 mai 2021 à 16:59
fabien25000 Messages postés 673 Date d'inscription mercredi 5 octobre 2016 Statut Membre Dernière intervention 28 juillet 2022 - 7 mai 2021 à 16:59
A voir également:
- VBA / Macro : Copier des données en fonctions de conditions
- Erreur 1004 vba ✓ - Forum VB / VBA
- Macro logiciel - Télécharger - Organisation
- Vba appeler une macro - Astuces et Solutions
- Copier video youtube - Guide
- Super copier - Télécharger - Gestion de fichiers
2 réponses
fabien25000
Messages postés
673
Date d'inscription
mercredi 5 octobre 2016
Statut
Membre
Dernière intervention
28 juillet 2022
59
Modifié le 7 mai 2021 à 15:24
Modifié le 7 mai 2021 à 15:24
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
GalaadV3
Messages postés
1
Date d'inscription
vendredi 7 mai 2021
Statut
Membre
Dernière intervention
7 mai 2021
7 mai 2021 à 16:43
7 mai 2021 à 16:43
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
____________________________________________________________
fabien25000
Messages postés
673
Date d'inscription
mercredi 5 octobre 2016
Statut
Membre
Dernière intervention
28 juillet 2022
59
Modifié le 7 mai 2021 à 17:13
Modifié le 7 mai 2021 à 17:13
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