VBA

Bonjour,
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

Résumé de la discussion

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.

Bobot (l’IA à votre service)
  1. Bonjour Mr,

    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
    1
    1. Bonjour
      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
      0
      1. Merci pour ta preposition

        mais par contre je vois pas ce que vous appelez de R1 et 2!!!
        0
        1. c'est votre formule recopiée en VBA
          0
        2. hmmmm ok merci je vais essayer si ça marche!!
          0
      2. Bonjour Frenchie83

        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!!
        0
        1. Bonjour
          D'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
          0
          1. Les deux dernières codes je les tape mais ça marche pas en fait, y a tjs un Bugue!!!!!
            0
          2. Et pour la premiere j'aimerais bien qu'il m'affiche pas #NA
            0
        2. Bonjour
          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
          0
          1. j'arrive pas avoir le lien dont vous parlez à part ça la sur la cage

            Pour utiliser ce service, il faut tout de même avoir quelque chose à mettre en lien ;-)

            cld
            0
          2. @MANUELTemoPour utiliser ce service, il faut tout de même avoir quelque chose à mettre en lien Oui, votre fichier, et c'est Cjoint.com qui va créer le lien.
            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
            0
          3. Sur la feuille trame commande vous trouverez la parti tout en haut où c'est marqué société et contact et pareil sur la designation et le PU HT à modifier
            0
          4. y a un bouton generer la commande et quand vous allez clik vous verrez qu'il y aura un bugue sur les dernieres actions que vous m'avez donnés!!
            0
        3. En ce qui concerne la macro 1
          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?
          0
          1. oui y a un bugue sur la ligne 1004,

            ActiveSheet.Shapes.Range(Array("Generercommande" & i)).Select
            0
          2. il prenne pas en compte toute cette parti

            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
            0
          3. @MANUELTemoDésolé, mais cette ligne est introuvable dans le fichier que vous avez déposé.
            1004 est un code erreur généré par le VBA, cela ne veut pas dire que l'erreur se situe à la ligne 1004. dans le cas présent, il cherche "Generercommande" qui n'existe nulle part dans votre programme. d'ou l'erreur 1004.
            0
        4. Remplacez
              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
              
          0
          1. d'accord merci

            ça marche bien!!!
            0
        5. Bonjour,

          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
          0
          1. https://www.cjoint.com/c/FEcg7xCq5TC

            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
            0
            1. Bonjour
              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
              0
              1. MERCI BEAUCOUP!!

                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
                0
            2. ah!! c'est deja ok je trouvé une solution merci
              0
              1. A coller dans le module du classeur "ThisWorkbook"

                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
                0
                1. d'accord merci ça marche aussi!!!
                  0
              2. Maintenant j'ai un autre probleme sur le montant de la tva je utilise cette fonction

                =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
                0
                1. Montant de la Tva=montant HT * %TVA (par article)
                  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
                  0
                  1. Bonjour Mr,

                    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
                    0
                2. Bonsoir
                  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?
                  0
                  1. Oui c'est bien cela mais il faut que cela soit automatique et pas manuel, il qu'il me remplisse toute les champs si il y en a plusieurs sur ma feuille filtre
                    0
                3. en fait je veux qu'en choisissant une entreprise sur la trame commande, il filtre sur la feuille article les données que de cette entreprise et il prends ces données et il remplie automatiquement dans les cellules de la feuille "Filtre"

                  pour cela il me faut une macro dont je pourrais fusionner ces données

                  cld
                  0
                  1. Bonjour
                    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
                    0
                    1. je voudrais juste savoir, la fonction index que vous avez mis dans la feuille fournisseur, quelle est ça utilité? car quand je sélectionne mes fournisseurs dans la trame commande, il m'affiche #Valeur sur toutes les lignes de la société et notamment la colonne A ne pas effacer sur la feuille fournisseur!!!
                      0
                    2. Et aussi je voudrais savoir comment avez vous affecter la liste déroulante SELECT ENTREPRISE avec la feuille Filtre, pour qu'il me remplisse les données venant de la Feuille Artticle, merci

                      cldt
                      0
                  2. Bonjour Mr.

                    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
                    0
                    1. c'est deja ok Mr. merci beacoup en tout cas!!
                      0
                  3. Bonjour
                    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
                    0
                    1. parce que je souhaite en fait avoir une au debut vierge, pour que en sortant de mon outil tout soit vide!!!

                      cldt
                      0
                    2. @MANUELTemoRien n'empêche de vider le contenu de la zone en question en fermant le fichier à l'aide de Auto_close
                      Sub Auto_close
                      la zone a effacer
                      end sub
                      0
                    3. D'accord,

                      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
                      0
                  • 1
                  • 2