Problème travail sur 2 feuilles avec 1 programme vba

Résolu
Bonjour,

J'ai beau chercher la solution à mon problème sur tous les forum mais je n'y arrive pas.

Voici un extrait de mon code:

With Worksheets(2)
            For l = 2 To 11
                If Cells(1, 3) = Cells(24, i) Then
                    For m = 3 To 19
                        For n = 25 To 41
                            If Cells(j, 1) = Cells(k, i) Then
                                Cells(j, 2) = Cells(k, i - 1) / 7
                                Exit For
                            End If
                        Next
                    Next
                End If
            Next
            End With
            For l = 3 To 19
                For m = 3 To 19
                    If Cells(l, 1) = Sheets(2).Cells(m, 1) Then
                        Cells(l, i + 1) = Sheets(2).Cells(m, 6)
                        Exit For
                    End If
                Next
            Next 


En clair, ici je voudrais effectuer le remplissage d'un tableau sur ma deuxième feuille puis récupérer les résultats pour les mettre dans mon tableau de la première feuille.

J'espère que vous saurez m'aider.

Merci d'avance

4 réponses

  1. Bonjour,

    Comme je viens de poster un problème, j'ai vu votre question. Lorsqu'on manipule des données de plusieurs onglets, il est prudent de bien les définir.
    Voici un petit exemple que vous pourrez adapter à votre procédure :

    Option Explicit
    
    Dim WS1 As Worksheet
    Dim WS2 As Worksheet
    
    Sub test()
    
    Set WS1 = Sheets("Donnees")
    Set WS2 = Sheets("Results")
    
    WS1.Range("A10") = WS2.Range("C5")
    
    
    End Sub


    Bon courage
    Jean
    0
    1. Modérateur
      Bonjour,

      Pour compléter la réponse de GrandJean, lorsque l'on référence un objet dans un bloc With, il faut ensuite "rattacher" les objets s'y rapportant.
      Pour cela, il suffit de mettre un point devant.

      Exemple :
      'sélectionne la Feuil1. Feuil1 = feuille active
      Sheets("Feuil1").Select
      With Sheets("Feuil2")
          'se rapporte à la feuil2 (point devant)
          .Range("A1").Value = 18
          'sans point devant se rapporte à la feuille active : Feuil1
          Range("A1") = "salon de l'agriculture"
      End With

      0
      1. Merci de vos réponses.
        J'ai combiné vos 2 reponses mais ça ne fonctionne toujours pas.

        Set ws1 = Sheets("Matrice(charge x)")
                    Set ws2 = Sheets("Objectifs")
                    Sheets("Matrice(charge x)").Select
                    With Sheets("Objectifs")
                    For l = 2 To 11
                        If .Cells(1, 3) = .Cells(24, i) Then
                            For m = 3 To 19
                                For n = 25 To 41
                                    If .Cells(j, 1) = .Cells(k, i) Then
                                        .Cells(j, 2) = .Cells(k, i - 1) / 7
                                        Exit For
                                    End If
                                Next
                            Next
                        End If
                    Next
                    For l = 3 To 19
                        For m = 3 To 19
                            If Cells(l, 1) = .Cells(m, 1) Then
                                Cells(l, i + 1) = .Cells(m, 6)
                                Exit For
                            End If
                        Next
                    Next
                    End With


        ps: j'ai bien déclaré les 2 worksheet au début de mon code

        Si j'applique séparemment: premiere partie sur une macro sur feuille 2 puis j'active la macro de la feuille 1 pour aller chercher les données de la feuille 2 ça fonctionne

        Mais j'aimerais ne pas avoir à aller activer une macro sur une feuille puis lancer ma macro principale de la feuille 1 après.

        Le problème actuel c'est que ça me prend bien les données de la 2éme feuille mais ça ne met pas à jour ma deuxième feuille
        0
        1. Contributeur
          Bojour

          For l = 2 To 11
          If .Cells(1, 3) = .Cells(24, i) Then
          For m = 3 To 19
          For n = 25 To 41
          If .Cells(j, 1) = .Cells(k, i) Then
          .Cells(j, 2) = .Cells(k, i - 1) / 7
          Exit For
          End If
          Next
          Next
          End If
          Next


          1/A quoi sert For l = 2 To 11
          2/: tu met toujours la m^me valeur dans cells(1,3)?
          3/ a quoi servent "n" et "m" ?
          4/ d'où sortent "j" et "k" ?
          0
        2. Je te remercie !!! Je devrais me cacher....... Erreur honteuse de ma part. Je passe une heure à chercher le problème alors que j'avais seulement pas mis mes variables à jour....

          Merci beaucoup en tous cas ;)
          0
      2. Problème résolu. L'utilisation des feuilles fonctionne bien j'avais juste oublié d'accorder mes variables.

        Merci à vous pour l'aide. Toujours efficace ce forum.

        à bientot.
        0