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

GalaadV3 -  
fabien25000 Messages postés 697 Statut Membre -
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

___________________________________________________

2 réponses

  1. fabien25000 Messages postés 697 Statut Membre 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
  2. GalaadV3 Messages postés 1 Statut Membre
     
    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
    1. fabien25000 Messages postés 697 Statut Membre 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