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,

    j'aimerais rester en contact avec vous, si c'est possible, je souhaite en fait vous suivre et être enseigné par vous, je voudrais élargir, comprendre et approfondir mes connaissances dans la programmation, merci.

    cldt
    0
    1. Bonsoir
      Je ne suis pas enseignant, et n'ai sûrement pas la prétention de pouvoir former qui que ce soit. Mais pour approfondir vos connaissances, il y a plusieurs façons de procéder. Il existe une grande quantité de livres traitant le sujet, des sites internet, des formations personnalisées, des forums comme CCM où des gens de bonnes volontés et très compétents sont prêts à vous donner un coup de main. Amusez-vous à faire des manipulations sur une feuille Excel en utilisant l'enregistreur de macro, puis allez sur la page de code (avec les touches ALT + F11) et essayez de comprendre ce qui à été enregistré. Faites des modifications et observez? servez-vous de l'aide en ligne. Si vous butez sur le sens d'une instruction, positionnez-vous sur le terme en question et appuyez sur la touche F1, une fenêtre s'ouvrira donnant toutes les explications avec des exemples à l'appui. Soyez curieux, regardez les demandes des autres personnes sur ce forum, essayez de résoudre leurs problèmes et analysez les réponses qui leurs sont faites. De toute évidence, il faut du temps, mais si vous êtes passionné et suivez les quelques conseils que je vous ai donné, vous évoluerez rapidement. Courage.
      Cordialement
      0
  2. J'ai toujours un Bugue Mr, j'ai bien rejoué cette ligne mais ça marche toujours pas en fait, Vu que la ligne n'a pas changé par rapport à la version précédente, j'en conclu que vous avez renommé la feuille "Trame commande " en "Trame commande" (suppression de l'espace en trop après le mot commande). Dans ce cas je ne vois pas où est l'erreur.
    Si il y a un blocage , il faut me dire à quel endroit et me donner la ligne en défaut, parce que chez moi cela se passe bien, l'ai pas de soucis.
    0
    1. D'accord merci Mr ça marche aussi bien ici !!
      0
  3. 2 erreurs détectées
    1) ajouter en toute première ligne (tout en haut) du module la ligne suivante
    Option Compare Text
    2)Votre feuille s'appelle "Trame commande " il y a un espace après commande, soit vous supprimez l'espace ou bien vous le rajouté dans la ligne de commande.
    0
    1. J'ai toujours un Bugue Mr, j'ai bien rejoué cette ligne mais ça marche toujours pas en fait,

      voici le programme:

      Option Compare Text

      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

      'selection de l'onglet
      Sheets("commandes").Select
      'selection de la derniere ligne non vide dans colonne A, recherche du bas vers le haut
      Range("A" & Rows.Count).End(xlUp).Select
      'numero de la ligne non vide en début de macro
      ligne = ActiveCell.Row
      'numero de la derniere commande
      num_commande_old = ActiveCell.Value
      ' numero de la nouvelle commande
      num_commande_new = num_commande_old + 1
      'inscription du nouveau numero de commande dans la liste
      Range("A" & (ligne + 1)).Value = num_commande_new
      'année en cours
      annee_en_cours = Year(Date)
      'nom de la commande
      nom_commande = ("PM_" & CStr(annee_en_cours) & "_" & CStr(num_commande_new))
      'selection de l'onglet
      Sheets("trame commande").Select
      'inscrit le numero de la commande sur la commande
      Range("G22:N22").Value = nom_commande

      'copie des infos d'une feuille vers l'autre
      ' Worksheets("commandes").Range("I" & (ligne + 1)).Value = Worksheets("trame commande").Range("AX24:BD24").Value 'date de la commande

      'nom du fournisseur
      Worksheets("commandes").Range("B" & (ligne + 1)).Value = Worksheets("trame commande").Range("AR13:BN13").Value
      ' TOTAL HT
      Worksheets("commandes").Range("C" & (ligne + 1)).Value = Worksheets("trame commande").Range("AS66:AZ67").Value
      ' Worksheets("commandes").Range("H" & (ligne + 1)).Value = Worksheets("trame commande").Range("AS72:AZ73").Value ' Montant TTC

      ' copie de formules de trame commande de ligne F28-BA55

      'réation du fichier excel de la commande
      Set objworkbooksource = ActiveWorkbook
      Worksheets(1).Copy
      Set objWorkbookCible = ActiveWorkbook

      'change le nom de l'onglet
      Sheets(1).Name = nom_commande
      Sheets(1).Cells.Copy
      Sheets(1).Cells.PasteSpecial Paste:=xlPasteValues
      'ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True 'active la protection
      'ActiveWorkbook.SaveAs Filename:="T:\Vincent\document\" & nom_commande & "test.xls" 'sauvegarde de la commande - modifier le chemin

      Suite:

      'efface les données de la trame commande
      Windows("COMMANDE-OUTIL-MANUELTemo.xlsm").Activate
      Worksheets("trame commande").Activate
      'efface le numero de la commande
      Range("G22:N22").Value = ""
      'efface la référence commande
      Range("G24:N24").Value = ""
      'Effacer la quantité
      Range("AL28:AN55").Value = ""
      'effacer date
      Range("AR24:BB24").Value = ""

      Sheets("Fournisseur").[S1] = Sheets("Fournisseur").[C2]

      Sheets("Trame commande").[B28:B55] = Sheets("Trame commande").[AL55]

      ActiveWorkbook.Save
      ActiveWorkbook.Close

      ActiveSheet.Unprotect 'desactive la protection

      For i = 1 To 1000 'Supprime les boutons
      On Error Resume Next
      ActiveSheet.Shapes.Range(Array("Picture 1" & i)).Select
      If Err.Number = 0 Then
      Selection.Delete
      GoTo Suite
      End If
      On Error GoTo 0
      Next i

      End Sub

      cldt
      0
  4. Voilà
    https://www.cjoint.com/c/FEyiUMZODck
    Dommage que votre tableau soit rempli de cellules fusionnées, on aurait fait plus court.
    Cdlt
    0
    1. Oui ça c'est sûre!!!

      J'ai un Bugue de ma macro générer la commande à la ligne " Sheets("trame commande").Select" en fait!!

      cldt
      0
    2. En gros c'est la macro complete que Bugue.
      0
  5. Bonjour
    Dans le module du classeur "ThisWorkBook" , allez dans les listes déroulantes (surlignées en jaune) et sélectionnez les choix comme l'image ci-dessous. et copiez toutes vos lignes de formules dans la macro proposée. A chaque ouverture du classeur, les formules seront recrées..
    Cdlt
    0
    1. Bonjour Mr,

      Je viens de faire ce que vous m'avez recommandé mais quand je ferme mon outil et que je l'ouvre, j'ai toujours comme valeur affiché dans les champs cela "#Valeur" et quand je tape il y a aucune formule, pourtant je bien suivi vos recommandations!!

      cldt
      0
    2. @MANUELTTemoVous pouvez m'envoyer votre fichier?
      Merci
      0
  6. Bonjour
      Sheets("Fournisseur").[A3] = 1

    Mais dans votre macro il faut mettre cette ligne avant
        ActiveWorkbook.Save
        ActiveWorkbook.Close

    Pour ce qui est de vider les feuilles à la fermeture, rajouter ceci. A adapter à votre convenance
    Sub Auto_Close()
        Application.ScreenUpdating = False
        'on efface le contenu de la feuille "Fournisseurs"
        Sheets("Fournisseur").Select
        Range("M3:R10000").ClearContents
        'on efface le contenu de la feuille "Filtre"
        Sheets("Filtre").Select
        Range("A3:G10000").ClearContents    
        'On sélectionne la feuille "Trame commande" pour qu'on arrive sur cette feuille à l'ouverture du fichier
        Sheets("Trame commande").Select
        ActiveWorkbook.Save
    End Sub

    Vous pouvez inclure toutes les lignes suivantes de votre macro dans celle ci-dessus
       'efface les données de la trame commande
        Windows("COMMANDE-OUTIL.xlsm").Activate
        Worksheets("trame commande").Activate
        Range("G22:N22").Value = "" 'efface le numero de la commande
        Range("G24:N24").Value = "" 'efface la référence commande
        Range("AL28:AN55").Value = "" 'Effacer la quantité
        Range("AR24:BB24").Value = ""   'effacer date
        Sheets("Fournisseur").[A3] = 1

    Cdlt
    0
    1. ça marche très bien merci Mr!!

      Maintenant je souhaite en fait faire une copie de toutes mes formules de ligne F28-AK55, AO28-AR55 et BA28-BN55 de la trame commande.

      Le but en fait c'est de copier les formules si au fur à et mesure j'ai pas une référence et que je souhaite taper directement sur ma cellule et que j'écrase les formules inscris sr ces champs et puis générer ma commande.

      quand je veux rouvrir mon fichier que la macro générer la commande puisse remettre les formules dans les bone endroit et pour cela j'ai rajouté ceci dans ma macro après la ligne Worksheets("commandes").Range("C" & (ligne + 1)).Value = Worksheets("trame commande").Range("AS66:AZ67").Value:

      ' copie de formules de trame commande de ligne F28-BA55

      Sheets("Trame commande").[F28:AK28] = Sheets("Trame commande").[=SI($B$28="";"";RECHERCHEV($B$28;Filtre!$A$3:$G8;4;0)]
      Sheets("Trame commande").[F31:AK31] = Sheets("Trame commande").[=SI($B$31="";"";RECHERCHEV($B$31;Filtre!$A$3:$G8;4;0))]
      Sheets("Trame commande").[F34:AK34] = Sheets("Trame commande").[=SI($B$34="";"";RECHERCHEV($B$34;Filtre!$A$3:$G8;4;0))]
      Sheets("Trame commande").[F37:AK37] = Sheets("Trame commande").[=SI($B$37="";"";RECHERCHEV($B$37;Filtre!$A$3:$G8;4;0))]
      Sheets("Trame commande").[F40:AK40] = Sheets("Trame commande").[=SI($B$40="";"";RECHERCHEV($B$40;Filtre!$A$3:$G8;4;0))]
      Sheets("Trame commande").[F43:AK43] = Sheets("Trame commande").[=SI($B$43="";"";RECHERCHEV($B$43;Filtre!$A$3:$G8;4;0))]
      Sheets("Trame commande").[F46:AK46] = Sheets("Trame commande").[=SI($B$46="";"";RECHERCHEV($B$46;Filtre!$A$3:$G8;4;0)) ]
      Sheets("Trame commande").[F49:AK49] = Sheets("Trame commande").[=SI($B$49="";"";RECHERCHEV($B$49;Filtre!$A$3:$G8;4;0))]
      Sheets("Trame commande").[F52:AK52] = Sheets("Trame commande").[=SI($B$52="";"";RECHERCHEV($B$52;Filtre!$A$3:$G8;4;0))]
      Sheets("Trame commande").[F55:AK55] = Sheets("Trame commande").[=SI($B$55="";"";RECHERCHEV($B$55;Filtre!$A$3:$G8;4;0))]

      Sheets("Trame commande").[AO28:AR28] = Sheets("Trame commande").[=SI($B$28="";"";RECHERCHEV($B$28;Filtre!$A$3:$G$8;5;0))]
      Sheets("Trame commande").[AO31:AR31] = Sheets("Trame commande").[=SI($B$31="";"";RECHERCHEV($B$31;Filtre!$A$3:$G$8;5;0))]
      Sheets("Trame commande").[AO34:AR34] = Sheets("Trame commande").[=SI($B$34="";"";RECHERCHEV($B$34;Filtre!$A$3:$G$8;5;0))]
      Sheets("Trame commande").[AO37:AR37] = Sheets("Trame commande").[ =SI($B$37="";"";RECHERCHEV($B$37;Filtre!$A$3:$G$8;5;0))]
      Sheets("Trame commande").[AO40:AR40] = Sheets("Trame commande").[=SI($B$40="";"";RECHERCHEV($B$40;Filtre!$A$3:$G$8;5;0))]
      Sheets("Trame commande").[AO43:AR43] = Sheets("Trame commande").[=SI($B$43="";"";RECHERCHEV($B$43;Filtre!$A$3:$G$8;5;0))]
      Sheets("Trame commande").[AO46:AR46] = Sheets("Trame commande").[=SI($B$46="";"";RECHERCHEV($B$46;Filtre!$A$3:$G$8;5;0))]
      Sheets("Trame commande").[AO49:AR49] = Sheets("Trame commande").[=SI($B$49="";"";RECHERCHEV($B$49;Filtre!$A$3:$G$8;5;0)) ]
      Sheets("Trame commande").[AO52:AR52] = Sheets("Trame commande").[=SI($B$52="";"";RECHERCHEV($B$52;Filtre!$A$3:$G$8;5;0))]
      Sheets("Trame commande").[AO55:AR55] = Sheets("Trame commande").[=SI($B$55="";"";RECHERCHEV($B$55;Filtre!$A$3:$G$8;5;0)) ]

      Sheets("Trame commande").[BA28:BN28] = Sheets("Trame commande").[=SI($B$28<>0;RECHERCHEV($B$28;Filtre!$A$3:$G$8;6;0);"")]
      Sheets("Trame commande").[BA31:BN31] = Sheets("Trame commande").[=SI($B$31="";"";RECHERCHEV($B$31;Filtre!$A$3:$G$8;6;0))]
      Sheets("Trame commande").[BA34:BN34] = Sheets("Trame commande").[ =SI($B$34="";"";RECHERCHEV($B$34;Filtre!$A$3:$G$8;6;0))]
      Sheets("Trame commande").[BA37:BN37] = Sheets("Trame commande").[=SI($B$37="";"";RECHERCHEV($B$37;Filtre!$A$3:$G$8;6;0))]
      Sheets("Trame commande").[BA40:BN40] = Sheets("Trame commande").[=SI($B$40="";"";RECHERCHEV($B$40;Filtre!$A$3:$G$8;6;0))]
      Sheets("Trame commande").[BA43:BN43] = Sheets("Trame commande").[=SI($B$43="";"";RECHERCHEV($B$43;Filtre!$A$3:$G$8;6;0))]
      Sheets("Trame commande").[BA46:BN46] = Sheets("Trame commande").[=SI($B$46="";"";RECHERCHEV($B$46;Filtre!$A$3:$G$8;6;0))]
      Sheets("Trame commande").[BA49:BN49] = Sheets("Trame commande").[=SI($B$49="";"";RECHERCHEV($B$49;Filtre!$A$3:$G$8;6;0))]
      Sheets("Trame commande").[BA52:BN52] = Sheets("Trame commande").[=SI($B$52="";"";RECHERCHEV($B$52;Filtre!$A$3:$G$8;6;0))]
      Sheets("Trame commande").[BA55:BN55] = Sheets("Trame commande").[=SI($B$55="";"";RECHERCHEV($B$55;Filtre!$A$3:$G$8;6;0))]

      Et que ça marche pas, genre quand j'ouvre mon fichier, il m'affiche dans les cellules
      F28-AK55, AO28-AR55 et BA28-BN55 #valeur et j'ai pas les formules.

      est-ce que pourriez-vous revoir où mon problème svp!!

      cldt
      0
  7. Vous n'avez pas suivi mes recommandations Pourquoi ne pas changer la cellule liée de la liste déroulante des entreprises?. Dans le format de contrôle indiquez une cellule liée autre que A3
    Je vous renvoi le fichier, avec déplacement de la cellule liée de la liste déroulante des entreprises en S1 de Fournisseur.
    Cette modification nécessite de corriger la formule "Index" qui devient
    [R4].FormulaR1C1 = "=INDEX(R3C3:R" & [C10000].End(xlUp).Row & "C3,R1C19-1,0)" 

    https://www.cjoint.com/c/FEvqT0jHz1w
    Essayez
    0
    1. Oui c'est ok!! mais on a toujours pas résolu le problème de forçage de la cellule, il y en a un autre problème que je viens de constater aussi genre, si je sélectionne mon fournisseur et me remplissant mes lignes et que génère la commande, quand je vais rouvrir mon fichier il garde les données du precedent fournisseur et que je voudrais que tout sois vierge en fait!!!

      cldt
      0
  8. Pourquoi ne pas changer la cellule liée de la liste déroulante des entreprises?. Dans le format de contrôle indiquez une cellule liée autre que A3, c'est tout.

    Attention à modifier aussi la plage d'entrée; elle commence en C3 et non pas en C2(sur l'image , je l'ai déjà changé)
    Cdlt
    0
    1. En fait j'ai mit C2 car je souhaite avoir la 1er ligne vide quand je viens sélectionner mes fournisseurs et vu que j'ai rien sur ce champs donc je peux sélectionner sans qu'il m'affiche rien sur ma trame commande!!

      cldt
      0
    2. Et aussi ma macro elle a arrêté de fonctionner il filtre plus en fait
      0
  9. Bonjour
    Sheets("Fournisseur").[A3] = Sheets("Fournisseur").[C2] OUI
    Pour le reste, pouvez-vous remettre le fichier en pièce jointe SVP? .merci
    0
    1. Bonjour Mr,

      Voici le lien du fichier

      https://www.cjoint.com/c/FEvlH6pTy0x

      Je souhaite en fait, qu'en sortant de mon fichier, que tout soit vide et quand l'ouvrant pareil, pour la partie où je viens sélectionner mes ref articles dans ma trame c'est deja ok!!.

      Maintenant je veux forcer cette partie Sheets("Fournisseur").[A3] = Sheets("Fournisseur").[C2] je l'ai mit en mode commenter car j'arrive pas l'affecter.

      Le problème en fait c'est que, si vous tapez un nombre quelconque dans la cellule A3, il sélectionne le fournisseur dû au nombre tapez et il me remplie la trame commande et je souhaite pas avoir un résultat comme cela, c'est pour cela que souhaite en fait la forcer à un champs vide dans ce C2 de la feuille fournisseur, merci

      cldt
      0
  10. Bonsoir
     Sheets("Fournisseur").[A3] = a

    Cdlt
    0
    1. je met juste cette partie et c'est tout????
      0
    2. @MANUELTemoBonjour
      En remplacement de
      range.fournisseur"a3".value=a 

      Cdlt
      0
    3. Bonjour M,

      Est-ce-t-il possible au lieu de faire

      Dim a as string
      a=""
      Sheets("Fournisseur").[A3] = a
      range.fournisseur"a3".value=a

      Faire directement

      Sheets("Fournisseur").[A3] = Sheets("Fournisseur").[C2]

      ????

      Et j'ai aussi un probleme genre quand j'affecte sur ma macro ce que vous venez de me donner, la feuille Filtre ni Article marche plus, il filtre plus en fait!!!

      cldt
      0
  11. Voilà
    Sub Filtrage()
        Application.ScreenUpdating = False
        Set f1 = Sheets("Fournisseur")  ' Activation feuille Fournisseur
        Set f2 = Sheets("Article")           ' Activation feuille Article
        Set f3 = Sheets("Filtre")              ' Activation feuille filtre
        Set f4 = Sheets("Trame commande") ' Activation feuille Trame commande
        f3.Range("A3:H" & [A10000].End(xlUp).Row).ClearContents
        f1.Select                                          ' Sélection feuille Fournisseur
        
        [R4].FormulaR1C1 = "=INDEX(R3C3:R" & [C10000].End(xlUp).Row & "C3,R3C1,0)" 'Affectation de la formule Index permetant de filtrer le fournisseur
        Entreprise = f1.[R4]                       ' Affectation fournisseur et la cellule
        Sheets("Article").Select               ' Sélection de la feuille article
        ActiveSheet.AutoFilterMode = False
        
        Rows(1).AutoFilter                         ' ligne 2 de la feuille article
        ActiveSheet.Range("A1:G" & [C10000].End(xlUp).Row).AutoFilter Field:=3, Criteria1:=Entreprise
       
        NbCol = [IV1].End(xlToLeft).Column
        Range("_FilterDataBase").Resize(, NbCol).SpecialCells(xlCellTypeVisible).Copy
        f3.Select
        [A2].Select
        ActiveSheet.Paste
        f1.AutoFilterMode = False
        f2.AutoFilterMode = False
        f4.Select
    End Sub
    0
    1. ok merci ça marche très bien!!!
      0
    2. une autre question Mr,

      je voudrais forcer une valeur à 1 dans ma macro Trame commande et je vois pas quel fonction utiliser.

      je voudrais en fait dire que dans la feuille fournisseur, A3=C2

      j'ai essayé de procéder comme cela:

      Dim a as string
      a="c3"
      range.fournisseur"a3".value=a

      mais ça marche pas

      cldt
      0
  12. 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
  13. 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 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
    2. 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
    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. 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
      2. 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
      3. 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. 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
        • 1
        • 2