VBA
Frenchie83 Messages postés 2254 Statut Membre -
je suis en train de développer un outil pour générer des commandes passé par les clients sur excel et j'ai une feuille dont laquelle j'affiche tout,
je voudrais donc effectuer une boucle en VBA sachant que les valeurs que je souhaite afficher et garder en même temps sont des formules inscrit en colonnes et en ligne!!!
j'ai comme champs de AH13 0 AT18 et les formules sur ces champs sont
=INDEX(Fournisseur!$C$2:$Q$200;Fournisseur!$A$2;1)
=INDEX(Fournisseur!$C$2:$Q$200;Fournisseur!$A$2;2)
=INDEX(Fournisseur!$C$2:$Q$200;Fournisseur!$A$2;3)
=INDEX(Fournisseur!$C$2:$Q$200;Fournisseur!$A$2;4)
=INDEX(Fournisseur!$C$2:$Q$200;Fournisseur!$A$2;5)
je veux en fait au lieu de metre tout les formules dans vba, effectuer directement une boucle dont il pourra lire tout ce valeurs, aurait-il qlqn pour m'aider???
config>Windows / Chrome 46.0.2486.0</config>
31 réponses
Le sujet porte sur une boucle VBA visant à lire et afficher des valeurs issues de formules placées en lignes et colonnes spécifiques sans tout coder en dur.
La solution efficace consiste à écrire directement les formules dans les plages cibles via une macro utilisant FormulaR1C1 (par exemple AR13:BD13, AR14:BD14, etc.), afin d’obtenir les résultats dynamiquement.
Des erreurs fréquentes concernent le nom de la feuille (espace éventuel ou orthographe) et l’absence d’un avertisseur de comparaison ; il faut aligner le nom exact et ajouter Option Compare Text en tête du module.
Après correction du nom de la feuille et de la directive, la macro fonctionne et fournit les mêmes résultats que l’approche manuelle.
Est-ce que c'est-il possible d'enlever le filtre auto sur ma macro et avoir le même résultat sans efectuer aucun filtre??
j'ai pu faire quelque modif des lignes et masquer la formule index dans la feuille fournisseur!!
J'aimerais avoir le même resultat sans effectuer aucun filtre quand je seletionne mon entreprise si c'est possible, merci!!
Voici le lien
http://www.cjoint.com/c/FEujzwKUDnC
cldt
Une proposition à adapter
Sub RecopieFormule()
Application.ScreenUpdating = False
For i = 13 To 18 'de la ligne 13 à 18
For j = 34 To 46 'de la colonne AH à AT
Col = Col + 1
Cells(i, j).FormulaR1C1 = "=INDEX(Fournisseur!R2C3:R200C17,Fournisseur!R2C1," & Col & ")"
Next j
Next
End Sub
Cdlt
je viens de tapper sur VBA et ça marche maintenant je suis en train d'essayer avec les autres champs et ça Bugue tout le temps, voici les boucles.
=INDEX($BD$19:$BF$21;Fournisseur!$B$2;1)
=INDEX($BD$19:$BF$21;Fournisseur!$B$2;2)
=INDEX($BD$19:$BF$21;Fournisseur!$B$2;3)
Const Col_contact = 34
Dim Lig_contact
For Lig_contact = 18 To 20 'INDEX($BD$19:$BF$21;Fournisseur!$B$2;1)
Cells(Lig_contact, Col_contact).FormulaR1BD1 = "=INDEX(Trame commande!R2C3:R19C21,Fournisseur!R2C1)"
Next
_______________________________________________
=RECHERCHEV($B$27;Article!$A$2:$F$201;2;0)
=RECHERCHEV($B$29;Article!$A$2:$F$201;2;0)
=RECHERCHEV($B$31;Article!$A$2:$F$201;2;0)
=RECHERCHEV($B$33;Article!$A$2:$F$201;2;0)
=RECHERCHEV($B$35;Article!$A$2:$F$201;2;0)
=RECHERCHEV($B$37;Article!$A$2:$F$201;2;0)
=RECHERCHEV($B$39;Article!$A$2:$F$201;2;0)
=RECHERCHEV($B$41;Article!$A$2:$F$201;2;0)
=RECHERCHEV($B$43;Article!$A$2:$F$201;2;0)
=RECHERCHEV($B$45;Article!$A$2:$F$201;2;0)
Const Col_Designation = 6
Dim Lig_Designation
For Lig_Designation = 27 To 46 'RECHERCHEV($B$27;Article!$3:$F$201;3;0)
Cells(Lig_Designation, Col_Designation).FormulaR1C1 = "=RECHERCHEV(Trame commande!R2C3:R201C46,Article!R2C0)"
Next
j'arrive pas à voir où est mon erreur si je bien fait comme tu l'as fait!!
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionD'abord dans la 1ère boucle: pourquoi 18 à 20 alors que dans la formule en remarque c'est de 19 à 21 ?
For Lig_contact = 18 To 20 'INDEX($BD$19:$BF$21;Fournisseur!$B$2;1)
Cells(Lig_contact, Col_contact).FormulaR1BD1= "=INDEX(Trame commande!R2C3:R19C21,Fournisseur!R2C1 et quelle colonne?)"
For Lig_contact = 18 To 20 'INDEX($BD$19:$BF$21;Fournisseur!$B$2;1)
Col = Col + 1
Cells(Lig_contact, Col_contact).FormulaR1C1 = "=INDEX(Trame commande!R2C3:R19C21,Fournisseur!R2C1," & Col & ")"
Next
Dans la 2ème boucle
Const Col_Designation = 6
Dim Lig_Designation
Lig = 27
For Lig_Designation = 27 To 46 'RECHERCHEV($B$27;Article!$3:$F$201;3;0)
Cells(Lig_Designation, Col_Designation).FormulaR1C1 = "=VLOOKUP('Trame commande'!R" & Lig & "C2,Article!R2C1:R201C6,2,0)"
Lig = Lig + 2
Next
Cdlt
y a tjs un Bugue!!!!! Oui, mais sur quelle ligne?
j'aimerais bien qu'il m'affiche pas #NA, il faut traiter la condition =SI.NA(Formule; action à faire ; Formule)
Pour gagner du temps, pourriez-vous mettre votre fichier en pièce jointe(sans données sensibles, ni personnelles)?
Pour déposer un fichier en pièce jointe
aller sur "www.cjoint.com"
-clic sur "parcourir"
-sélectionnez le fichier à envoyer
-clic sur "créer le lien Cjoint" (bouton en bas)
-clic droit sur le lien proposé, et sélectionnez "copier l'adresse du lien"
-sur votre nouvelle demande CCM, -clic droit coller
Cdlt
Je répète
Pour déposer un fichier en pièce jointe
aller sur "www.cjoint.com"
-clic sur "parcourir"
-sélectionnez votre fichier à envoyer
-clic sur "créer le lien Cjoint" (bouton en bas)
-clic droit sur le lien proposé, et sélectionnez "copier l'adresse du lien"
-sur votre nouvelle demande CCM, -clic droit coller
1ère erreur: Dans la feuille "Commandes", les numéros de commandes de la colonne A ne sont pas aux bon format à partir de la ligne 20, mettre tout au format "standard".
2ème erreur: Dans le code de la macro 1, impossible d'effacer le bouton (pas le bon numéro, et remplacement d "Picture" par "Image"). De plus le numéro des boutons peut être incrémenter par l'appli, pour contourner ce problème, création d'une boucle qui va tester tous les numéros compris entre 1 et 1000, et les supprimer.
Option Explicit
Const Col_destinataire = 34
Const Col_contact = 34
Const Col_Designation = 6
Const col_PrixHT = 31
Dim Lig_contact
Dim Lig_Designation
Dim Lig_PrixHT
Dim Lig_destinataire
Dim i
Sub Macro1()
'Creation du fichier Excel de la commande
Dim ligne As Integer 'numero de la ligne non vide en début de macro
Dim num_commande_old As Integer 'numero de la derniere commande
Dim num_commande_new As Integer 'numero de la nouvelle commande
Dim annee_en_cours As Integer 'année en cours
Dim nom_commande As String 'nom de la commande = PM-anneeencours-num_commande_new
Dim date_commande As Date 'date de la commande
Dim fournisseur As String 'nom du fournisseur
Dim montant_HT As Double 'montant HT
Dim montant_TTC As Double 'montant TTC
Dim objWorkbookCible As Workbook
Dim objworkbooksource As Workbook
Sheets("commandes").Select 'selection de l'onglet
Range("A" & Rows.Count).End(xlUp).Select 'selection de la derniere ligne non vide dans colonne A, recherche du bas vers le haut
ligne = ActiveCell.Row 'numero de la ligne non vide en début de macro
num_commande_old = ActiveCell.Value 'numero de la derniere commande
num_commande_new = num_commande_old + 1 ' numero de la nouvelle commande
Range("B" & (ligne + 1)).Value = num_commande_new 'inscription du nouveau numero de commande dans la liste
annee_en_cours = Year(Date) 'année en cours
nom_commande = ("PM_" & CStr(annee_en_cours) & "_" & CStr(num_commande_new)) 'nom de la commande
Sheets("trame commande").Select 'selection de l'onglet
Range("G21:N21").Value = nom_commande 'inscrit le numero de la commande sur la commande
'copie des infos d'une feuille vers l'autre
Worksheets("commandes").Range("A" & (ligne + 1)).Value = Worksheets("trame commande").Range("AX23:BD23").Value 'date de la commande
Worksheets("commandes").Range("B" & (ligne + 1)).Value = Worksheets("trame commande").Range("AR13:BD13").Value 'nom du fournisseur
Worksheets("commandes").Range("F" & (ligne + 1)).Value = Worksheets("trame commande").Range("AS47:AV48").Value 'montant HT
Worksheets("commandes").Range("G" & (ligne + 1)).Value = Worksheets("trame commande").Range("AS56:AZ57").Value ' Montant TTC
'création du fichier excel de la commande
Set objworkbooksource = ActiveWorkbook
Worksheets(1).Copy
Set objWorkbookCible = ActiveWorkbook
ActiveSheet.Unprotect 'desactive la protection
For i = 1 To 1000 'Supprime les boutons
On Error Resume Next
ActiveSheet.Shapes.Range(Array("Image " & i)).Select
If Err.Number = 0 Then Selection.Delete
On Error GoTo 0
Next i
Suite:
Sheets(1).Name = nom_commande 'change le nom de l'onglet
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True 'active la protection
'efface les données de la trame commande
Windows("DDDDDD.xlsm").Activate
Worksheets("trame commande").Activate
Range("G21:N21").Value = "" 'efface le numero de la commande
Range("G23:N23").Value = "" 'efface la référence commande
Range("AL27:AN45").Value = "" 'Effacer la quantité
Range("AR23:BD23").Value = "" 'effacer date
ActiveWorkbook.Save
ActiveWorkbook.Close
End Sub
Y a t-il encore d'autres erreurs? si oui, A quel endroit?
Sheets(1).Name = nom_commande 'change le nom de l'onglet
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True 'active la protection
'efface les données de la trame commande
Windows("DDDDDD.xlsm").Activate
Worksheets("trame commande").Activate
Range("G21:N21").Value = "" 'efface le numero de la commande
Range("G23:N23").Value = "" 'efface la référence commande
Range("AL27:AN45").Value = "" 'Effacer la quantité
Range("AR23:BD23").Value = "" 'effacer date
ActiveWorkbook.Save
ActiveWorkbook.Close
Pour effacer toutes les donner apreès avoir géneré la commenade
il fait que boucler sur
For i = 1 To 1000 'Supprime les boutons
On Error Resume Next
ActiveSheet.Shapes.Range(Array("Image " & i)).Select
If Err.Number = 0 Then Selection.Delete
On Error GoTo 0
Next i
cld
For i = 1 To 1000 'Supprime les boutons
On Error Resume Next
ActiveSheet.Shapes.Range(Array("Image " & i)).Select
If Err.Number = 0 Then Selection.Delete
On Error GoTo 0
Next i
par
For i = 1 To 1000 'Supprime les boutons
On Error Resume Next
ActiveSheet.Shapes.Range(Array("Image " & i)).Select
If Err.Number = 0 Then
Selection.Delete
GoTo Suite
End If
On Error GoTo 0
Next i
J'en ai encore une question!! est-ce possible en VBA ou avec des fonctions sur excel afficher des donnés que correspondent à un seul fournisseur???
genre quand je sélectionne mon fournisseur il me donne directement les référence des ses articles et notamment sa désignation ainsi que le Prix HT et la TVA!!!!!!
cld
Selon vos modifications mon outil marche bien mais le problème c'est que quand je génère une nouvelle commande il tiens pas en compte de valeurs, il m'affiche encore des formules si je click sur les champs c'est que veut dire quand je modifie une donné sur ma trame commande il modifie directement sur la commande que je viens de passer car il a gardé les formules.
cld
le problème c'est que quand je génère une nouvelle commande il tiens pas en compte de valeurs, il m'affiche encore des formules si je click sur les champs c'est que veut dire quand je modifie une donné sur ma trame commande il modifie directement sur la commande que je viens de passer car il a gardé les formules.
Je n'ai pas touché à cette partie du code, c'était déjà comme ça avant. Si vous voulez effacer les formules ajoutez un "collage spécial valeurs".
derrière la ligne suivante:
Sheets(1).Name = nom_commande 'change le nom de l'onglet
ajouter:
Sheets(1).Cells.Copy
Sheets(1).Cells.PasteSpecial Paste:=xlPasteValues
Je vois aussi que vous avez déplacé la partie suivante:
Windows("test.xlsm").Activate
Worksheets("trame commande").Activate
Range("G24:N24").Value = "" 'efface le numero de la commande
Range("G26:N26").Value = "" 'efface la référence commande
Range("AL34:AN52").Value = "" 'Effacer la quantité
Range("AR26:BD26").Value = "" 'effacer date
ActiveWorkbook.Save
ActiveWorkbook.Close
d'accord, mais vous avez oublié de prendre l'étiquette "Suite:" qui va avec, vous devriez avoir ceci:
Suite:
Windows("test.xlsm").Activate
Worksheets("trame commande").Activate
Range("G24:N24").Value = "" 'efface le numero de la commande
Range("G26:N26").Value = "" 'efface la référence commande
Range("AL34:AN52").Value = "" 'Effacer la quantité
Range("AR26:BD26").Value = "" 'effacer date
ActiveWorkbook.Save
ActiveWorkbook.Close sans quoi après avoir tester les boutons à effacer, le programme sort sans s'enregistrer.
Quant à votre demande:est-ce possible en VBA ou avec des fonctions sur excel afficher des donnés que correspondent à un seul fournisseur??? , vous pouvez utiliser les filtres.
Cdlt
par contre avec ds filtres j'en ai essayé mais ça marche pas ou j'arrive à a voir la solution que je souhaitais mais avec cette methode c deja mieux je trouve!!
Je voudrais aussi que au démarrage de mon outil, les champs Désignation, Réf article, le prix ht, montant ht et tva m'affiche vide mais en gardant bien mes formules si je click sur ces champs.
je essaye d'appliquer sur mon code vba quelque fonctions au démarrage mais je trouve pas la solution envisagé!!
pouriez vous me données quelques tuyaux?
cld
La formule des cellules fusionnées "AS34:AV35" est différente de celles au-dessous
La formule des cellules fusionnées"AW34:AZ35" est différente de celles au-dessous
Si c'est une erreur, corrigez dans le code ci-dessous
Option Explicit
Private Sub Workbook_Open()
Application.ScreenUpdating = False
Range("F34:AZ53").ClearContents
Range("AR13:BD13").FormulaR1C1 = "=INDEX(Fournisseur!R2C3:R200C17,Fournisseur!R2C1,1)"
Range("AR14:BD14").FormulaR1C1 = "=INDEX(Fournisseur!R2C3:R200C17,Fournisseur!R2C1,2)"
Range("AR15:BD15").FormulaR1C1 = "=INDEX(Fournisseur!R2C3:R200C17,Fournisseur!R2C1,3)"
Range("AR16:BD16").FormulaR1C1 = "=INDEX(Fournisseur!R2C3:R200C17,Fournisseur!R2C1,4)"
Range("AR17:AV17").FormulaR1C1 = "=INDEX(Fournisseur!R2C3:R200C17,Fournisseur!R2C1,5)"
Range("AR18:BD18").FormulaR1C1 = "=INDEX(R19C66:R24C68,Fournisseur!R2C2,1)"
Range("AR19:BD19").FormulaR1C1 = "=INDEX(R19C66:R24C68,Fournisseur!R2C2,2)"
Range("AR20:BD20").FormulaR1C1 = "=INDEX(R19C66:R24C68,Fournisseur!R2C2,3)"
Range("BN19").FormulaR1C1 = "=INDEX(Fournisseur!R2C3:R200C17,Fournisseur!R2C1,7)"
Range("BN20").FormulaR1C1 = "=INDEX(Fournisseur!R2C3:R200C17,Fournisseur!R2C1,10)"
Range("BN24").FormulaR1C1 = "=INDEX(Fournisseur!R2C3:R200C17,Fournisseur!R2C1,13)"
Range("BO19").FormulaR1C1 = "=INDEX(Fournisseur!R2C3:R200C17,Fournisseur!R2C1,8)"
Range("BO20").FormulaR1C1 = "=INDEX(Fournisseur!R2C3:R200C17,Fournisseur!R2C1,11)"
Range("BO24").FormulaR1C1 = "=INDEX(Fournisseur!R2C3:R200C17,Fournisseur!R2C1,14)"
Range("BP19").FormulaR1C1 = "=INDEX(Fournisseur!R2C3:R200C17,Fournisseur!R2C1,9)"
Range("BP20").FormulaR1C1 = "=INDEX(Fournisseur!R2C3:R200C17,Fournisseur!R2C1,12)"
Range("BP24").FormulaR1C1 = "=INDEX(Fournisseur!R2C3:R200C17,Fournisseur!R2C1,15)"
Range("F34:AK35").FormulaR1C1 = "=IF(R34C2<>0,VLOOKUP(R34C2,Article!R2C1:R201C5,2,0),"""")"
Range("F36:AK37").FormulaR1C1 = "=IF(R36C2<>0,VLOOKUP(R36C2,Article!R2C1:R201C5,2,0),"""")"
Range("F38:AK39").FormulaR1C1 = "=IF(R38C2<>0,VLOOKUP(R38C2,Article!R2C1:R201C5,2,0),"""")"
Range("F40:AK41").FormulaR1C1 = "=IF(R40C2<>0,VLOOKUP(R40C2,Article!R2C1:R201C5,2,0),"""")"
Range("F42:AK43").FormulaR1C1 = "=IF(R42C2<>0,VLOOKUP(R42C2,Article!R2C1:R201C5,2,0),"""")"
Range("F44:AK45").FormulaR1C1 = "=IF(R44C2<>0,VLOOKUP(R44C2,Article!R2C1:R201C5,2,0),"""")"
Range("F46:AK47").FormulaR1C1 = "=IF(R46C2<>0,VLOOKUP(R46C2,Article!R2C1:R201C5,2,0),"""")"
Range("F48:AK49").FormulaR1C1 = "=IF(R48C2<>0,VLOOKUP(R48C2,Article!R2C1:R201C5,2,0),"""")"
Range("F50:AK51").FormulaR1C1 = "=IF(R50C2<>0,VLOOKUP(R50C2,Article!R2C1:R201C5,2,0),"""")"
Range("F52:AK53").FormulaR1C1 = "=IF(R52C2<>0,VLOOKUP(R52C2,Article!R2C1:R201C5,2,0),"""")"
Range("AO34:AR35").FormulaR1C1 = "=IF(R34C2<>0,VLOOKUP(R34C2,Article!R2C1:R201C5,3,0),"""")"
Range("AO36:AR37").FormulaR1C1 = "=IF(R36C2<>0,VLOOKUP(R36C2,Article!R2C1:R201C5,3,0),"""")"
Range("AO38:AR39").FormulaR1C1 = "=IF(R38C2<>0,VLOOKUP(R38C2,Article!R2C1:R201C5,3,0),"""")"
Range("AO40:AR41").FormulaR1C1 = "=IF(R40C2<>0,VLOOKUP(R40C2,Article!R2C1:R201C5,3,0),"""")"
Range("AO42:AR43").FormulaR1C1 = "=IF(R42C2<>0,VLOOKUP(R42C2,Article!R2C1:R201C5,3,0),"""")"
Range("AO44:AR45").FormulaR1C1 = "=IF(R44C2<>0,VLOOKUP(R44C2,Article!R2C1:R201C5,3,0),"""")"
Range("AO46:AR47").FormulaR1C1 = "=IF(R46C2<>0,VLOOKUP(R46C2,Article!R2C1:R201C5,3,0),"""")"
Range("AO48:AR49").FormulaR1C1 = "=IF(R48C2<>0,VLOOKUP(R48C2,Article!R2C1:R201C5,3,0),"""")"
Range("AO50:AR51").FormulaR1C1 = "=IF(R50C2<>0,VLOOKUP(R50C2,Article!R2C1:R201C5,3,0),"""")"
Range("AO52:AR53").FormulaR1C1 = "=IF(R52C2<>0,VLOOKUP(R52C2,Article!R2C1:R201C5,3,0),"""")"
Range("AS34:AV35").FormulaR1C1 = "=IF(RC[-7]="""","""",RC[-7]*RC[-4])"
Range("AS36:AV37").FormulaR1C1 = "=IF(R36C41<>0,PRODUCT(R36C38,R36C41),"""")"
Range("AS38:AV39").FormulaR1C1 = "=IF(R38C41<>0,PRODUCT(R38C38,R38C41),"""")"
Range("AS40:AV41").FormulaR1C1 = "=IF(R40C41<>0,PRODUCT(R40C38,R40C41),"""")"
Range("AS42:AV43").FormulaR1C1 = "=IF(R42C41<>0,PRODUCT(R42C38,R42C41),"""")"
Range("AS44:AV45").FormulaR1C1 = "=IF(R44C41<>0,PRODUCT(R44C38,R44C41),"""")"
Range("AS46:AV47").FormulaR1C1 = "=IF(R46C41<>0,PRODUCT(R46C38,R46C41),"""")"
Range("AS48:AV49").FormulaR1C1 = "=IF(R48C41<>0,PRODUCT(R48C38,R48C41),"""")"
Range("AS50:AV51").FormulaR1C1 = "=IF(R50C41<>0,PRODUCT(R50C38,R50C41),"""")"
Range("AS52:AV53").FormulaR1C1 = "=IF(R52C41<>0,PRODUCT(R52C38,R52C41),"""")"
Range("AS54:AV55").FormulaR1C1 = "=SUM(R34C45:R53C48)"
Range("AW34:AZ35").FormulaR1C1 = "=IF(RC[4]<>0,RC[-4]*RC[4],"""")"
Range("AW36:AZ37").FormulaR1C1 = "=IF(RC[4]<>0,RC[-4]*0.2,"""")"
Range("AW38:AZ39").FormulaR1C1 = "=IF(RC[4]<>0,RC[-4]*0.2,"""")"
Range("AW40:AZ41").FormulaR1C1 = "=IF(RC[4]<>0,RC[-4]*0.2,"""")"
Range("AW42:AZ43").FormulaR1C1 = "=IF(RC[4]<>0,RC[-4]*0.2,"""")"
Range("AW44:AZ45").FormulaR1C1 = "=IF(RC[4]<>0,RC[-4]*0.2,"""")"
Range("AW46:AZ47").FormulaR1C1 = "=IF(RC[4]<>0,RC[-4]*0.2,"""")"
Range("AW48:AZ49").FormulaR1C1 = "=IF(RC[4]<>0,RC[-4]*0.2,"""")"
Range("AW50:AZ51").FormulaR1C1 = "=IF(RC[4]<>0,RC[-4]*0.2,"""")"
Range("AW52:AZ53").FormulaR1C1 = "=IF(RC[4]<>0,RC[-4]*0.2,"""")"
Range("AW54:AZ55").FormulaR1C1 = "=SUM(R34C49:R53C52)"
Range("BA34:BD35").FormulaR1C1 = "=IF(R34C2<>0,VLOOKUP(R34C2,Article!R2C1:R201C5,4,0),"""")"
Range("AS60:AZ61").FormulaR1C1 = "=QUOTIENT(R63C45,1.2)"
Range("AS63:AZ64").FormulaR1C1 = "=QUOTIENT(R54C49,0.1666666667)"
[F34].Select
End Sub
Cdlt
=SI($BA$34="";"";PRODUIT(BA34;AS34))
mais il me calcul à resultat que n'à rien avoir avec les donnés, notament pour pour le calcul de la remise ainsi que TOTAL HT ET TTC, j'aimerais que vous me donniez quelques idées aussi merci!!!
cld
Remise=Montant total HT * %remise(sur la totalité)
Total HT=Montant HT - remise (sur la totalité)
Total TTC = Montant Total HT + Montant total TVA (sur la totalité)
avec les nouvelles formules
Option Explicit
Private Sub Workbook_Open()
Application.ScreenUpdating = False
Range("F34:AZ53").ClearContents
Range("AR13:BD13").FormulaR1C1 = "=INDEX(Fournisseur!R2C3:R200C17,Fournisseur!R2C1,1)"
Range("AR14:BD14").FormulaR1C1 = "=INDEX(Fournisseur!R2C3:R200C17,Fournisseur!R2C1,2)"
Range("AR15:BD15").FormulaR1C1 = "=INDEX(Fournisseur!R2C3:R200C17,Fournisseur!R2C1,3)"
Range("AR16:BD16").FormulaR1C1 = "=INDEX(Fournisseur!R2C3:R200C17,Fournisseur!R2C1,4)"
Range("AR17:AV17").FormulaR1C1 = "=INDEX(Fournisseur!R2C3:R200C17,Fournisseur!R2C1,5)"
Range("AR18:BD18").FormulaR1C1 = "=INDEX(R19C66:R24C68,Fournisseur!R2C2,1)"
Range("AR19:BD19").FormulaR1C1 = "=INDEX(R19C66:R24C68,Fournisseur!R2C2,2)"
Range("AR20:BD20").FormulaR1C1 = "=INDEX(R19C66:R24C68,Fournisseur!R2C2,3)"
Range("BN19").FormulaR1C1 = "=INDEX(Fournisseur!R2C3:R200C17,Fournisseur!R2C1,7)"
Range("BN20").FormulaR1C1 = "=INDEX(Fournisseur!R2C3:R200C17,Fournisseur!R2C1,10)"
Range("BN24").FormulaR1C1 = "=INDEX(Fournisseur!R2C3:R200C17,Fournisseur!R2C1,13)"
Range("BO19").FormulaR1C1 = "=INDEX(Fournisseur!R2C3:R200C17,Fournisseur!R2C1,8)"
Range("BO20").FormulaR1C1 = "=INDEX(Fournisseur!R2C3:R200C17,Fournisseur!R2C1,11)"
Range("BO24").FormulaR1C1 = "=INDEX(Fournisseur!R2C3:R200C17,Fournisseur!R2C1,14)"
Range("BP19").FormulaR1C1 = "=INDEX(Fournisseur!R2C3:R200C17,Fournisseur!R2C1,9)"
Range("BP20").FormulaR1C1 = "=INDEX(Fournisseur!R2C3:R200C17,Fournisseur!R2C1,12)"
Range("BP24").FormulaR1C1 = "=INDEX(Fournisseur!R2C3:R200C17,Fournisseur!R2C1,15)"
Range("F34:AK35").FormulaR1C1 = "=IF(R34C2<>0,VLOOKUP(R34C2,Article!R2C1:R201C5,2,0),"""")"
Range("F36:AK37").FormulaR1C1 = "=IF(R36C2<>0,VLOOKUP(R36C2,Article!R2C1:R201C5,2,0),"""")"
Range("F38:AK39").FormulaR1C1 = "=IF(R38C2<>0,VLOOKUP(R38C2,Article!R2C1:R201C5,2,0),"""")"
Range("F40:AK41").FormulaR1C1 = "=IF(R40C2<>0,VLOOKUP(R40C2,Article!R2C1:R201C5,2,0),"""")"
Range("F42:AK43").FormulaR1C1 = "=IF(R42C2<>0,VLOOKUP(R42C2,Article!R2C1:R201C5,2,0),"""")"
Range("F44:AK45").FormulaR1C1 = "=IF(R44C2<>0,VLOOKUP(R44C2,Article!R2C1:R201C5,2,0),"""")"
Range("F46:AK47").FormulaR1C1 = "=IF(R46C2<>0,VLOOKUP(R46C2,Article!R2C1:R201C5,2,0),"""")"
Range("F48:AK49").FormulaR1C1 = "=IF(R48C2<>0,VLOOKUP(R48C2,Article!R2C1:R201C5,2,0),"""")"
Range("F50:AK51").FormulaR1C1 = "=IF(R50C2<>0,VLOOKUP(R50C2,Article!R2C1:R201C5,2,0),"""")"
Range("F52:AK53").FormulaR1C1 = "=IF(R52C2<>0,VLOOKUP(R52C2,Article!R2C1:R201C5,2,0),"""")"
Range("AO34:AR35").FormulaR1C1 = "=IF(R34C2<>0,VLOOKUP(R34C2,Article!R2C1:R201C5,3,0),"""")"
Range("AO36:AR37").FormulaR1C1 = "=IF(R36C2<>0,VLOOKUP(R36C2,Article!R2C1:R201C5,3,0),"""")"
Range("AO38:AR39").FormulaR1C1 = "=IF(R38C2<>0,VLOOKUP(R38C2,Article!R2C1:R201C5,3,0),"""")"
Range("AO40:AR41").FormulaR1C1 = "=IF(R40C2<>0,VLOOKUP(R40C2,Article!R2C1:R201C5,3,0),"""")"
Range("AO42:AR43").FormulaR1C1 = "=IF(R42C2<>0,VLOOKUP(R42C2,Article!R2C1:R201C5,3,0),"""")"
Range("AO44:AR45").FormulaR1C1 = "=IF(R44C2<>0,VLOOKUP(R44C2,Article!R2C1:R201C5,3,0),"""")"
Range("AO46:AR47").FormulaR1C1 = "=IF(R46C2<>0,VLOOKUP(R46C2,Article!R2C1:R201C5,3,0),"""")"
Range("AO48:AR49").FormulaR1C1 = "=IF(R48C2<>0,VLOOKUP(R48C2,Article!R2C1:R201C5,3,0),"""")"
Range("AO50:AR51").FormulaR1C1 = "=IF(R50C2<>0,VLOOKUP(R50C2,Article!R2C1:R201C5,3,0),"""")"
Range("AO52:AR53").FormulaR1C1 = "=IF(R52C2<>0,VLOOKUP(R52C2,Article!R2C1:R201C5,3,0),"""")"
Range("AS34:AV35").FormulaR1C1 = "=IF(R34C41<>0,PRODUCT(R34C38,R34C41),"""")"
Range("AS36:AV37").FormulaR1C1 = "=IF(R36C41<>0,PRODUCT(R36C38,R36C41),"""")"
Range("AS38:AV39").FormulaR1C1 = "=IF(R38C41<>0,PRODUCT(R38C38,R38C41),"""")"
Range("AS40:AV41").FormulaR1C1 = "=IF(R40C41<>0,PRODUCT(R40C38,R40C41),"""")"
Range("AS42:AV43").FormulaR1C1 = "=IF(R42C41<>0,PRODUCT(R42C38,R42C41),"""")"
Range("AS44:AV45").FormulaR1C1 = "=IF(R44C41<>0,PRODUCT(R44C38,R44C41),"""")"
Range("AS46:AV47").FormulaR1C1 = "=IF(R46C41<>0,PRODUCT(R46C38,R46C41),"""")"
Range("AS48:AV49").FormulaR1C1 = "=IF(R48C41<>0,PRODUCT(R48C38,R48C41),"""")"
Range("AS50:AV51").FormulaR1C1 = "=IF(R50C41<>0,PRODUCT(R50C38,R50C41),"""")"
Range("AS52:AV53").FormulaR1C1 = "=IF(R52C41<>0,PRODUCT(R52C38,R52C41),"""")"
Range("AS54:AV55").FormulaR1C1 = "=SUM(R34C45:R53C48)"
Range("AS58:AV58").FormulaR1C1 = "=R[-4]C*RC[4]"
Range("AW34:AZ35").FormulaR1C1 = "=IF(RC[4]<>0,RC[-4]*RC[4],"""")"
Range("AW36:AZ37").FormulaR1C1 = "=IF(RC[4]<>0,RC[-4]*0.2,"""")"
Range("AW38:AZ39").FormulaR1C1 = "=IF(RC[4]<>0,RC[-4]*0.2,"""")"
Range("AW40:AZ41").FormulaR1C1 = "=IF(RC[4]<>0,RC[-4]*0.2,"""")"
Range("AW42:AZ43").FormulaR1C1 = "=IF(RC[4]<>0,RC[-4]*0.2,"""")"
Range("AW44:AZ45").FormulaR1C1 = "=IF(RC[4]<>0,RC[-4]*0.2,"""")"
Range("AW46:AZ47").FormulaR1C1 = "=IF(RC[4]<>0,RC[-4]*0.2,"""")"
Range("AW48:AZ49").FormulaR1C1 = "=IF(RC[4]<>0,RC[-4]*0.2,"""")"
Range("AW50:AZ51").FormulaR1C1 = "=IF(RC[4]<>0,RC[-4]*0.2,"""")"
Range("AW52:AZ53").FormulaR1C1 = "=IF(RC[4]<>0,RC[-4]*0.2,"""")"
Range("AW54:AZ55").FormulaR1C1 = "=SUM(R34C49:R53C52)"
Range("BA34:BD35").FormulaR1C1 = "=IF(R34C2<>0,VLOOKUP(R34C2,Article!R2C1:R201C5,4,0),"""")"
Range("AS60:AZ61").FormulaR1C1 = "=R[-6]C-R[-2]C"
Range("AS63:AZ64").FormulaR1C1 = "=R[-3]C+R[-9]C[4]"
[F34].Select
End Sub
J'en ai encore un problème, j'aimerais en fait, créer une nouvelle macro et l'associer à ma feuille "Filtre et trame commande" ayant les fonction suivants:
- Quand je sélectionne une entreprise sur ma trame commande, automatiquement il me prends la "Réf article, catégorie, Fournisseur, Désignation, Prix HT et le % TVA" de la feuille Article et il me rempli la feuille "filtre " ayant que des articles en fonction du fournisseur choisi sur ma trame commande!!!!
voici le lien du fichier
https://www.cjoint.com/c/FEqpUeZE6Ux
j'ai les idées bien construis mais je vois pas quels fonction mettre en place pour que la macro fonctionne, pourriez-vous m'aider svp!!!
cld
En fait si j'ai bien compris, en choisissant une entreprise dans la feuille "Trame commande", il suffit de filtrer la feuille article avec le nom de l'entreprise comme critère de filtrage et de recopier le tout dans la feuille "Filtre". Est-ce bien cela?
pour cela il me faut une macro dont je pourrais fusionner ces données
cld
Pour une question de commodité, j'ai converti le tableau de la feuille "fournisseur" en plage.
Sélectionnez simplement l'entreprise dans la feuille"Trame commande"
https://www.cjoint.com/c/FErfpK1PSnw
En espérant que cela vous convienne.
Cdlt
Je viens de changer quelques mise en forme de ma feuille "Filtre" et selon votre macro "Module 1" je n'arrive pas à bien reprendre!!!
Des fois ça marche mais et des fois il m'affiche que des champs vides et aussi quand je sélectionne l'entreprise sur ma trame commande il fait bien le filtre auto mais le problème c'est qu'il fixe une seule entreprise, c'est à dire, quand je prends par exemple la "Mututoyo" il me remplie la feuille "Filtre" avec ses données mais quand je prends "CTTM", sur la feuille "Filtre", ça ne change pas il garde les infos de Mututoyo et aussi il filtre pas sur la feuille "Article".
J'essayer de faire des modifs sur la macro mais je n'arrive pas à avoir la solution souhaité, vous trouverez ci-dessous le lien, merci
https://www.cjoint.com/c/FErksW8ehUC
cldt
Ajoutez cette ligne
Sheets("Article").AutoFilterMode = False
après
[A2].Select ActiveSheet.Paste
Question: Pourquoi commencez -vous la plupart des tableaux en ligne 3 au lieu de la ligne 2?
Cdlt
Pouvez revoir les dernières lignes de ma macro svp!!
je voudrais activé et désactivé le filtre dans la feuille article genre quand je sélectionne mon fournisseur et me remplissant la feuille filtre par des données venant de la feuille article, je puisse pas voir les filtre à trainer dans ma feuille article, j'aimerais quand puisse filtrer et en voyant pas les filtre si j'ouvre la feuille article, merci
voici le lien du dernière modif
http://www.cjoint.com/c/FEuneoJJCfC
cldt