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