Création d'une boucle for each avec recherche v à valeur cherchée variable

Bonjour à tous !

Etant débutante en VBA, je viens ici pour essayer de trouver un peu d'aide !

Pour expliquer la situation : sur la première feuille "matières" se trouvent des codes de matières et des volumes correspondants en fonction des jours de la semaine. Sur la deuxième feuille "besoins" se trouvent les mêmes codes dans un ordre différent avec des volumes différents.

J'ai créé un userform qui permet à l'utilisateur de choisir un jour de la semaine. Lorsque l'utilisateur choisit par exemple lundi, je voudrait que les volumes de la feuille "besoins" de lundi remplacent les volumes de la feuille "matières" de lundi également. Pour cela, j'ai créé une fonction RECHERCHEV que j'ai trouvé sur le net. J'ai ensuite commencé à programmer mon userform pour que lorsque la personne choisi l'option lundi, la fonction va chercher le premier code dans la feuille besoin et remplace le volume correspondant. Jusqu'ici cela marche plutôt bien. J'aimerai maintenant créer une boucle afin que pour chaque code matière de la feuille "matière", la fonction aille rechercher la valeur associée dans la feuille besoin et vienne la remplacer dans la feuille matière. Mon plus gros problème, c'est que la valeur cherchée par la fonction est une variable. Je n'ai pas assez de connaissance pour y arriver toute seule avec mon faible niveau

Je tiens à préciser que j'ai placé les données comme elles le sont dans la réalité (j'ai recréé un fichier en ultra simplifié de mon boulot).

Je remercie d'avance tout personne prête à m'aider !

Eloïse

Salut,

Je te propose une approche qui me semble plus simple.

Cordialement.

Bonjour,

J'aurai fait la même chose qu'Yvouille. Je ne connais pas le besoin final mais il me semble plus adapté.

Par contre pourquoi as-tu autant de cellules vides dans ta feuille matière ? N'est-il pas possible de tout regrouper sur la même feuille afin d'avoir les matières sur les 7 premières colonnes et les besoins sur les 7 suivantes (1 par jour) ? Ca t'éviterais de jongler entre les feuilles et de passer par des variables lignes à ligne : tu aurais tes besoins et conso face à face.

Bonne soirée.

Merci infiniment Yvouille !

J'y réfléchi depuis quelques jours mais je ne risquais pas d'y arriver !

Ergotamine, pour répondre à ta question, en réalité les lignes vides ne sont pas vides mais contiennent des fournisseurs avec chacun leurs besoins, mais il ne m'a pas semblé utile de le mettre car ce sont des données qui ne bougent pas, c'est pour cela que j'avais précisé que les données étaient placées comme dans la réalité de mon fichier pro.

En tout cas cela marche parfaitement, donc encore merci et bonne soirée à vous !

D'accord c'est toi qui voit ! Je regarde toujours l'aspect visuel et fonctionnel d'un tableau tout en comptant l'aspect économe et rapidité d’exécution quand on cherche à automatiser.

Bonne soirée !

Bonjour!

Je reviens vers vous car lorsque je teste l'userform sur le fichier que je vous ai envoyé, cela marche à la perfection, mais lorsque que je l'ai adapté à mon fichier pro, la macro me met un message d'erreur qui est le suivant :

Erreur d'exécution 1004: erreur définie par l'application ou par l'objet.

Elle intervient sur la ligne du for. Au départ je croyais que c'était parce que tout en bas de la feuille j'avais du texte dans la colonne A, mais je l'ai znlvee6et ça n'a rien changé. Est ce que ça pourrait venir du nombre de ligne qui est trop important ? Le dernier code matière est dans la ligne 113.

Je met mon code entier ci dessous, mais je ne pourrait pas mettre mon fichier pro car il contient des données confidentielles.

Merci d'avance,

Eloïse

Private Sub CommandButton2_Click()
    Dim i As Byte, Ligne As Byte, Colonne As Byte

    If OptionButton7 = True Then Colonne = 4 'premier jour de la semaine dans la colonne' 
    If OptionButton7 = True Then Colonne = 5
    If OptionButton7 = True Then Colonne = 6
    If OptionButton7 = True Then Colonne = 7
    If OptionButton7 = True Then Colonne = 8
    If OptionButton7 = True Then Colonne = 9

    Sheets ("Besoins"). Select

    With Sheets("HA-BIO-PA-LR-BLT") 'vrai nom de ma feuille' 
           For i = 6 To Range ("A" & Rows.Count).End(x1Up).Row    'mes codes commencent à la ligne 6)
                 Ligne = Application.WorksheetFunction.Match("A" & i), .Range("A:A"), 0)
                .Cells(Ligne, Colonne) = Cells(i, Colonne - 2)   ' sur la feuille besoin les volumes de lundi sont dans la colonne B' 
            Next i

            .Select
     End With
     Unload Me
End Sub

Private Sub CommandButton3_Click()
      Unload Me
End Sub

Bonjour,

Sur ta ligne for remplace

For i = 6 To Range ("A" & Rows.Count).End(x1Up).Row

par

For i = 6 To .Range("A" & Rows.Count).End(xlUp).Row

Tu as mis un 1 a xlUp ça ne fonctionne pas ...

Bonne journée

Salut Eloïse,

Tu as recopié mon code de manière assez catastrophique. Je ne comprends d'ailleurs pas que tu n'ais pas commencé par copier-coller la base avant d'effectuer les modifications nécessaires ; tu aurais évité des erreurs indiquées ci-dessous. Ou, mieux, que tu me fournisses un fichier qui corresponde à la réalité

La correction proposée par Ergotamine est incorrecte. Si tu dois bien remplacer le x1Up par xlUp, il ne faut cependant pas placer de point devant Range("A" & Rows.Count).

Autres erreurs :

- Tu as 6 fois OptionButton7 ; ça ne va pas le faire.

- Dans le passage Match("A" & i), tu as mal recopié ! Revois mon code de base.

Je me suis rendu compte par la suite que = True n'est pas nécessaire, ça passe aussi sans, comme tu l'avais dans ta première macro : par exemple If OptionButton4 Then Colonne = 6 fonctionne également.

Amicalement.

Bonjour Yvouille,

Désolé ! Je me suis arrêté à cette erreur qui me parraissait flagrante et à la ligne qui posait problème ..

Bonjour Yvouille !

En fait, quand j'ai tapé le code dans mon message, j'ai fais des copier coller des optionbutton mais dans la réalité de mon userform ils ont bien des noms distincts (de 7 à 12, j'ai tapé le code depuis mon téléphone parce que je n'avais pas le choix à ce moment là et j'ai oublié de changer les noms).

Du coup j'ai tenté la correction de Ergotamine avant d'avoir vu ton message, et le programme est tombé sur l'erreur que tu as trouvé à la ligne suivante au niveau du Match. Il se trouve qu'en effet je n'ai pas directement copier coller ton code, je l'ai retapé à la main et même si je me suis relue une dizaine de fois, je n'arrivais pas à voir l'erreur ! Je vais la corriger demain ,voir si ça fonctionne et je vous tiens au courant.

Merci à vous deux et bonne soirée !

On pourrait donc se demander s'il vaut mieux faire les choses vite et mal ou calmement et bien

Rechercher des sujets similaires à "creation boucle each recherche valeur cherchee variable"