Problème travail sur 2 feuilles avec 1 programme vba

Résolu/Fermé
VBABA - Modifié par pijaku le 2/03/2016 à 13:03
 VBABA - 2 mars 2016 à 13:49
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
A voir également:

4 réponses

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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
2 mars 2016 à 13:03
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
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
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 2/03/2016 à 13:48
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
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
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