Aide pour créer une Macr Vba

Zdz16

XLDnaute Occasionnel
Bonjour à Tous et toutes;

Je sollicite votre aide pour écrire une macro Vba pour effectuer le calcul d'une Prev dans une feuille, a partir de la saisie sur une autre. Je m'explique.
Dans un classeur, j'ai trois feuilles : Ventes, TCD, Saisies
La feuille Ventes, Client/Article/Quantité issues d'importation. Deux colonnes Vides, Coef et Prev y sont insérés.
La feuille TCD contient le tcd, Client/quantité/Prev. Les données sont ceux de la feuille Ventes
La feuille Saisies, contient la copie du TCD (Speciale/Valeurs), une colonne coefficient y inséré.

Après la saisie dans la feuille 'Saisies' du coefficient ou de la Prev. On demande d'appliquer les coefficients sur les détails (Client/article) via le bouton appliquer.

Je joints un fichier contenant des explications, n'hesitez si vous avez des questions.

Merci d'avance
 

Pièces jointes

  • Zdz16_1.xlsm
    23.2 KB · Affichages: 41

Robert

XLDnaute Barbatruc
Repose en paix
Re : Aide pour créer une Macr Vba

Bonsoir Zdz, bonsoir le forum,

Le code ci-dessous pour mettre les formules dans l'onglet Saisies en fonction du type de saisie (Coef. ou Prev.). Mais après ton "après", je n'ai pas bien saisi (oui j'ose...) ce que tu voulais faire...
Le code :
Code:
Sub Rectangleàcoinsarrondis2_Cliquer()
Dim DL As Long 'déclare la variable DL (Dernière Ligne)
Dim PL As Range 'déclare la variable PL (PLage)
Dim CEL As Range 'déclare la variable CEL (CELlule)

DL = Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée de la colonne 1 (=A)
Set PL = Range("A2:A" & DL) 'définit la plage pl
For Each CEL In PL 'boucle sur toutes les cellule CEL de la plage PL
    'si la cellulle en colonne C n'est pas vide et celle en colonne D est vide
    If CEL.Offset(0, 2).Value <> "" And CEL.Offset(0, 3).Value = "" Then
        CEL.Offset(0, 3).FormulaR1C1 = "=RC[-2]*(1+(RC[-1]/100))" 'formule en colonne D
    'si la cellulle en colonne C est pas vide et celle en colonne D n'est pas vide
    ElseIf CEL.Offset(0, 2).Value = "" And CEL.Offset(0, 3).Value <> "" Then
        CEL.Offset(0, 2).FormulaR1C1 = "=((100*RC[1])/RC[-1])-100" 'formule en colonne C
    End If 'fin de la condition
Next CEL 'prochaine cellule de la boucle
End Sub
 

Zdz16

XLDnaute Occasionnel
Re : Aide pour créer une Macr Vba

Bonjour Robert, Bonjour le forum;

Merci Robert pour ta réponse et pour la code qui certainement va me mettre sur le bon chemin.
C'est vrai en me lisant, je me rends compte que c'est pas assez claire. Pour cela je te propose l'exemple du CLT-001:
Dans la feuille 'Saisies' Le CLT-001 à les données suivantes :

Total Vte = 450
Coef prv = 10 % (Saisie ou calculer par ton code)
Prv = 495 (Saisie ou calculer par ton code)

"Après", dans la feuille Détails, le CLT-001 a Trois lignes qui héritent le coef de la feuille 'Saisies' 10% qui va permettre de calculer pour chaque ligne de détail la Prev comme suit :

CLT-001 ! A-001 ! 150 ! 10 % ! 165
CLT-001 ! A-003 ! 150 ! 10 % ! 165
CLT-001 ! A-010 ! 150 ! 10 % ! 165

L'idée est, à l'activation du bouton 'Appliquer', toutes les coefficients saisis sont appliqués aux détails de chaque CLT correspondants dans la feuille Détails.

Cordialement et merci de nouveau.
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Aide pour créer une Macr Vba

Bonjour Zdz, bonjour le forum,

C'est plus clair maintenant...
Le code modifié :
Code:
Sub Rectangleàcoinsarrondis2_Cliquer()
Dim S As Object
Dim V As Object
Dim DL As Long 'déclare la variable DL (Dernière Ligne)
Dim PL As Range 'déclare la variable PL (PLage)
Dim CEL As Range 'déclare la variable CEL (CELlule)
Dim R As Range 'déclare la variable R (Recherche)
Dim PA As String 'déclare la variable PA (Première Adresse)

Set S = Sheets("Saisies")
Set V = Sheets("Ventes")
DL = S.Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée de la colonne 1 (=A)
Set PL = S.Range("A2:A" & DL) 'définit la plage pl
For Each CEL In PL 'boucle sur toutes les cellule CEL de la plage PL
    'si la cellulle en colonne C n'est pas vide et celle en colonne D est vide
    If CEL.Offset(0, 2).Value <> "" And CEL.Offset(0, 3).Value = "" Then
        CEL.Offset(0, 3).FormulaR1C1 = "=RC[-2]*(1+(RC[-1]/100))" 'formule en colonne D
    'si la cellulle en colonne C est pas vide et celle en colonne D n'est pas vide
    ElseIf CEL.Offset(0, 2).Value = "" And CEL.Offset(0, 3).Value <> "" Then
        CEL.Offset(0, 2).FormulaR1C1 = "=Round((100*RC[1]/RC[-1])-100,2)" 'formule en colonne C
    End If 'fin de la condition
    Set R = V.Columns(1).Find(CEL.Value, , xlValues, xlWhole) 'définit la recherche R (recherche la valeur de la cellule CEL dans la colonne 1 (=A) de l'onglet V)
    If Not R Is Nothing Then 'condition : si il existe au moins une occurrence trouvée
        PA = R.Address 'définit l'adresse de la première occurrence trouvée
        Do 'exécute
            R.Offset(0, 3).Value = CEL.Offset(0, 2).Value 'récupère le coef.
            R.Offset(0, 4).Value = CEL.Offset(0, 3).Value 'récupère la prev.
            Set R = V.Columns(1).FindNext(R) 'redéfinit la recherche R (occurrence suivante)
        Loop While Not R Is Nothing And R.Address <> PA 'boucle tant qu'il existe de nouvelles occurrences ailleurs qu'en PA
    End If 'fin de la condition
Next CEL 'prochaine cellule de la boucle
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 239
Messages
2 086 508
Membres
103 236
dernier inscrit
Menni