VBA

MANUELTemo Messages postés 25 Statut Membre -  
Frenchie83 Messages postés 2254 Statut Membre -
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

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

Généré automatiquement par IA
sur la base des meilleures réponses
  1. MANUELTemo
     
    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
  2. Frenchie83 Messages postés 2254 Statut Membre 339
     
    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
  3. MANUELTemo Messages postés 25 Statut Membre
     
    Merci pour ta preposition

    mais par contre je vois pas ce que vous appelez de R1 et 2!!!
    0
    1. Frenchie83 Messages postés 2254 Statut Membre 339
       
      c'est votre formule recopiée en VBA
      0
    2. MANUELTemo Messages postés 25 Statut Membre
       
      hmmmm ok merci je vais essayer si ça marche!!
      0
  4. MANUELTemo Messages postés 25 Statut Membre
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Frenchie83 Messages postés 2254 Statut Membre 339
     
    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. MANUELTemo Messages postés 25 Statut Membre
       
      Les deux dernières codes je les tape mais ça marche pas en fait, y a tjs un Bugue!!!!!
      0
    2. MANUELTemo Messages postés 25 Statut Membre
       
      Et pour la premiere j'aimerais bien qu'il m'affiche pas #NA
      0
  7. Frenchie83 Messages postés 2254 Statut Membre 339
     
    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. MANUELTemo Messages postés 25 Statut Membre
       
      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
      1. Frenchie83 Messages postés 2254 Statut Membre 339 > MANUELTemo Messages postés 25 Statut Membre
         
        Pour 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
    2. MANUELTemo Messages postés 25 Statut Membre
       
      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
    3. MANUELTemo Messages postés 25 Statut Membre
       
      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
  8. Frenchie83 Messages postés 2254 Statut Membre 339
     
    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. MANUELTemo Messages postés 25 Statut Membre
       
      oui y a un bugue sur la ligne 1004,

      ActiveSheet.Shapes.Range(Array("Generercommande" & i)).Select
      0
      1. Frenchie83 Messages postés 2254 Statut Membre 339 > MANUELTemo Messages postés 25 Statut Membre
         
        Dé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
    2. MANUELTemo Messages postés 25 Statut Membre
       
      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
  9. Frenchie83 Messages postés 2254 Statut Membre 339
     
    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. MANUELTemo Messages postés 25 Statut Membre
       
      d'accord merci

      ça marche bien!!!
      0
  10. MANUELTemo Messages postés 25 Statut Membre
     
    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
  11. MANUELTemo Messages postés 25 Statut Membre
     
    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
  12. Frenchie83 Messages postés 2254 Statut Membre 339
     
    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. MANUELTemo Messages postés 25 Statut Membre
       
      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
  13. MANUELTemo Messages postés 25 Statut Membre
     
    ah!! c'est deja ok je trouvé une solution merci
    0
  14. Frenchie83 Messages postés 2254 Statut Membre 339
     
    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. MANUELTemo Messages postés 25 Statut Membre
       
      d'accord merci ça marche aussi!!!
      0
  15. MANUELTemo Messages postés 25 Statut Membre
     
    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
  16. Frenchie83 Messages postés 2254 Statut Membre 339
     
    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. MANUELTemo Messages postés 25 Statut Membre
       
      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
  17. Frenchie83 Messages postés 2254 Statut Membre 339
     
    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. Temo MANUEL
       
      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
  18. MANUELTemo Messages postés 25 Statut Membre
     
    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
  19. Frenchie83 Messages postés 2254 Statut Membre 339
     
    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. MANUELTemo Messages postés 25 Statut Membre
       
      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. MANUELTemo Messages postés 25 Statut Membre
       
      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
  20. MANUELTemo Messages postés 25 Statut Membre
     
    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. MANUELTemo Messages postés 25 Statut Membre
       
      c'est deja ok Mr. merci beacoup en tout cas!!
      0
  21. Frenchie83 Messages postés 2254 Statut Membre 339
     
    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. MANUELTemo
       
      parce que je souhaite en fait avoir une au debut vierge, pour que en sortant de mon outil tout soit vide!!!

      cldt
      0
      1. Frenchie83 Messages postés 2254 Statut Membre 339 > MANUELTemo
         
        Rien 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
    2. MANUELTemo
       
      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