VBA
MANUELTemo
Messages postés
25
Date d'inscription
Statut
Membre
Dernière intervention
-
Frenchie83 Messages postés 2240 Date d'inscription Statut Membre Dernière intervention -
Frenchie83 Messages postés 2240 Date d'inscription Statut Membre Dernière intervention -
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>
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
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
Bonsoir
Cdlt
Sheets("Fournisseur").[A3] = a
Cdlt
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
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
Bonjour
Sheets("Fournisseur").[A3] = Sheets("Fournisseur").[C2] OUI
Pour le reste, pouvez-vous remettre le fichier en pièce jointe SVP? .merci
Sheets("Fournisseur").[A3] = Sheets("Fournisseur").[C2] OUI
Pour le reste, pouvez-vous remettre le fichier en pièce jointe SVP? .merci
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
https://www.cjoint.com/c/FEvqT0jHz1w
Essayez
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
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
cldt
Bonjour
Mais dans votre macro il faut mettre cette ligne avant
Pour ce qui est de vider les feuilles à la fermeture, rajouter ceci. A adapter à votre convenance
Vous pouvez inclure toutes les lignes suivantes de votre macro dans celle ci-dessus
Cdlt
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
ç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
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
Voilà
https://www.cjoint.com/c/FEyiUMZODck
Dommage que votre tableau soit rempli de cellules fusionnées, on aurait fait plus court.
Cdlt
https://www.cjoint.com/c/FEyiUMZODck
Dommage que votre tableau soit rempli de cellules fusionnées, on aurait fait plus court.
Cdlt
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.
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.
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
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
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.
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.
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
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
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
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
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