VBA / Macro : Copier des données en fonctions de conditions

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

___________________________________________________
A voir également:

2 réponses

fabien25000 Messages postés 673 Date d'inscription   Statut Membre Dernière intervention   59
 
Bonjour,
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
Feuil1
en 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


0
GalaadV3 Messages postés 1 Date d'inscription   Statut Membre Dernière intervention  
 
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
____________________________________________________________
0
fabien25000 Messages postés 673 Date d'inscription   Statut Membre Dernière intervention   59
 
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 )
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
0