Problème travail sur 2 feuilles avec 1 programme vba

Résolu
VBABA -  
 VBABA -
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. GrandJean
     
    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
  2. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    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
  3. VBABA
     
    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. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      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. VBABA
       
      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
  4. VBABA
     
    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