Microsoft 365 Extraire des valeurs avec une macro

  • Initiateur de la discussion Initiateur de la discussion Xyzka
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Xyzka

XLDnaute Nouveau
Bonjour,

Je cherche à extraire des valeurs aprés avoir remplacer automatique 2 valeurs. J'ai déjà fais une macro mais elle est trop lourde et ne convient pas au nombre de valeurs à extraire (excel me dit qu'il y a trop de ligne) 1 tableau a extraire = 1500 lignes et il faut que j’extrais 4 tableaux ...

Pour mieux comprendre j'avais fait ça :

Sub Mise_A_Jour_Prix_Revient()

Sheets("V1 lames L").Range("largeur_L").Value = Sheets("Synthèse").Range("E14").Value --> remplace la valeur de 'largeur_L" dans la feuille "V1 lames" suivant la valeur en E14 dans la feuille "synthèse"
Sheets("V1 lames L").Range("avancee_L").Value = Sheets("Synthèse").Range("D15").Value --> remplace la valeur de 'avancées_L" dans la feuille "V1 lames" suivant la valeur en D15 dans la feuille "synthèse"
Sheets("Synthèse").Range("E15").Value = Sheets("V1 lames L").Range("Prix_revient_L").Value --> extrait la valeur "prix de revient_L" dans la feuille "V1 lames L" et l'écrit en E15 dans la feuille "Synthèse"

Sheets("V1 lames L").Range("largeur_L").Value = Sheets("Synthèse").Range("E14").Value
Sheets("V1 lames L").Range("avancee_L").Value = Sheets("Synthèse").Range("D16").Value
Sheets("Synthèse").Range("E16").Value = Sheets("V1 lames L").Range("Prix_revient_L").Value

Sheets("V1 lames L").Range("largeur_L").Value = Sheets("Synthèse").Range("E14").Value
Sheets("V1 lames L").Range("avancee_L").Value = Sheets("Synthèse").Range("D17").Value
Sheets("Synthèse").Range("E17").Value = Sheets("V1 lames L").Range("Prix_revient_L").Value

End Sub

avec cette macro j’extrais les prix de reviens qui est calculé dans une cellule, en fonction de l'avancé et de la largeur de ma pièce.

Est-ce qu'il y a une façon moins "bourrine" de faire ça ?

Merci beaucoup !
 
Solution
Re,
Je ne suis pas sur d'avoir tout compris. Mon hypothèse :
- Je dispose d'une matrice en Synthèse avec des valeurs de Avancées et Largeurs,
- Avec chaque couple de valeurs je calcule le prix de revient en utilisant la feuille Données.
J'ai fait ça avec :
Code:
Option Explicit
Sub Remplit()
    Dim Ligne%, Colonne%, Ligne0%, Colonne0%
    Application.ScreenUpdating = False
    Ligne = 4: Colonne = 2                      ' Ligne colonnes initiales, cellule en haut à gauche du tableau Synthèse
    Ligne0 = Ligne: Colonne0 = Colonne          ' Ligne colonnes de travail pour valeurs Avancées Largeur
    While Cells(Ligne0, Colonne + 1) <> ""      ' Tant que le contenu de la colonne n'est pas vide
        While Cells(Ligne + 1, Colonne0) <>...
Bonjour Xyzka, et bienvenu sur XLD,
Un petit fichier test serait infiniment le bienvenu pour mieux comprendre le problème.
Ensuite 1500 lignes pour XL c'est peanuts. Le pb doit venir d'autre part.
Enfin, pour le code utilisez les balises </> ( à droite de l'icone GIF ) cela rend le code beaucoup plus lisible.
 
Bonjour, Merci !

J'ai fais un mini fichier exemple, j’espère que ça sera plus compréhensible ...

Je sais que c'est rien pour excel 1500 lignes ... mais il me disait quand même qu'il y avait trop de lignes de code (et c'est vraiment pas mon domaine donc je sais pas trop comment faire).

Et merci pour le conseil, je ferais ça la prochaine fois 🙂
 

Pièces jointes

Re,
Je ne suis pas sur d'avoir tout compris. Mon hypothèse :
- Je dispose d'une matrice en Synthèse avec des valeurs de Avancées et Largeurs,
- Avec chaque couple de valeurs je calcule le prix de revient en utilisant la feuille Données.
J'ai fait ça avec :
Code:
Option Explicit
Sub Remplit()
    Dim Ligne%, Colonne%, Ligne0%, Colonne0%
    Application.ScreenUpdating = False
    Ligne = 4: Colonne = 2                      ' Ligne colonnes initiales, cellule en haut à gauche du tableau Synthèse
    Ligne0 = Ligne: Colonne0 = Colonne          ' Ligne colonnes de travail pour valeurs Avancées Largeur
    While Cells(Ligne0, Colonne + 1) <> ""      ' Tant que le contenu de la colonne n'est pas vide
        While Cells(Ligne + 1, Colonne0) <> ""  ' Tant que le contenu de la ligne n'est pas vide
            [Avancées_L] = Cells(Ligne + 1, Colonne0)           ' On transfert Avancées et Largeur
            [Largeur_L] = Cells(Ligne0, Colonne + 1)
            Cells(Ligne + 1, Colonne + 1) = [Prix_revient_L]    ' On récupère le prix de revient
            Ligne = Ligne + 1                                   ' On passe à la ligne suivante
        Wend
        Colonne = Colonne + 1: Ligne = Ligne0                   ' On passe à la colonne suivante
    Wend
    Application.ScreenUpdating = True
End Sub
L'avantage de ce code est qu'il est indépendant du nombre de lignes colonnes de la matrice Synthèse, puisqu'il s'arrête à la première ligne vide et la première colonne vide.
 

Pièces jointes

Merci beaucoup !

Je vais essayer de transférer ça dans mon "vrai" fichier 🤞

Juste comme ça (parce que je maîtrise pas du tout) à quoi sert les deux premières lignes ?
VB:
Dim Ligne%, Colonne%, Ligne0%, Colonne0%
    Application.ScreenUpdating = False

J'ai pas écris toutes les unités 🙄
Le poids est en kg/m, d'où le calcul longueur (m) * poids (kg/m) * prix (€/kg) 🙂
 
Re,
Dim déclare les variables qu'on va utiliser.
En VBA c'est facultatif, mais fortement recommandé car si vous utilisez MaVariable puis ensuite par erreur MaVarriable ( deux r ) alors pour le VBA ce sont deux variables différentes et vous vous poserez beaucoup de questions sur le pourquoi ça marche pas. Et le VBA ne donnera pas d'erreur.
Application.ScreenUpdating = False permet de figer l'écran pendant qu'on écrit sur la feuille. Cela permet d'accélérer les calculs.
 
Si vous voulez vous éviter des problèmes ... et garder tous vos cheveux, commencez toujours votre code par :
VB:
Option Explicit
Qui vous oblige à déclarer toutes vos variables.
C'est un peu plus contraignant mais ça évite pas mal de soucis.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Microsoft 365 Code VBA
Réponses
10
Affichages
860
Retour