VBA - recopier la ligne précédente avec condition

Bonjour à tous !

N'ayant pas trouvé de moyen pour parvenir à réaliser ce que je voulais, j'ai décidé de me lancer et d'essayer de faire un code VBA par moi même. Je suis donc débutante dans le domaine !

Voici mon problème :

J'aimerai qu'en tapant le numéro de commande sur une nouvelle ligne, toutes les informations qui sont entre "fournisseur" et "facture reçue" se recopie de la ligne précédente si le numéro de commande est le même. J'ai joint un fichier si besoin.

Je précise au cas où : impossible de mettre une simple formule si dans toute la colonne car j'utilise ensuite une fonction recherche de la dernière cellule remplie. Avec la fonction si entrée dans toute la colonne, ce ne sont plus les bonnes informations qui me sont renvoyées.

J'ai essayé d'y aller doucement et de tester si les valeurs de chaque variable étaient bien les bonnes qui étaient renvoyées en MsgBox. J'ai uniquement eu un problème avec "derniere_ligne_fournisseur", le bon rang est renvoyé mais pas la bonne valeur et je ne comprend pas pourquoi.

Pour le moment je tente de le faire fonctionner en recopiant uniquement la colonne fournisseur, je compléterais après.

Voila ce que j'ai fait :

Sub essai_recopier()

Dim derniere_ligne_commande As Long
Dim avant_derniere_ligne_commande As Long
Dim derniere_ligne_fournisseur As Long
Dim premiere_ligne_vide_fournisseur As Long

derniere_ligne_commande = Range("A" & Rows.Count).End(xlUp).Row
'donne le contenu de la dernière cellule remplie de la colonne A, soit le N° de cde

avant_derniere_ligne_commande = Range("A" & derniere_ligne_commande - 1).Value
'donne le contenu de l'avant derniere cellule remplie de la colonne A, soit les N° de cde

derniere_ligne_fournisseur = Range("E" & Rows.Count).End(xlUp).Row
'donne le contenu de la derniere cellule remplie de la colonne E, soit le fournisseur
'ATTENTION : NE FONCTIONNE QU'EN ROW ET PAS EN VALUE

premiere_ligne_vide_fournisseur = Range("E" & derniere_ligne_fournisseur + 1).Value
'donne le contenu de la premiere cellule vide de la colonne fournisseur en partant du bas

If derniere_ligne_commande = avant_derniere_ligne_commande Then
premiere_ligne_vide_fournisseur = derniere_ligne_fournisseur

Else: premiere_ligne_vide_fournisseur = 0

End If

End Sub

Merci d'avance à tous ceux qui m'accorderont du temps pour m'aider !

Bonjour et bienvenue,

Ton profil indique que tu utilises Excel 2003 (.xls) et tu joins un fichier Excel 2007+ (.xlsx) ?

Quelle version utilises-tu ?

Cdlt.

Exact ! Le code me serait utile dans le cadre professionnel où c'est Excel 2003 qui est utilisé. Cela dit ils devraient passer à une version plus récente dans les mois à venir. Avant de publier le sujet j'ai refait un fichier de base chez moi où j'utilise Excel 2007, voila pourquoi

Re,

Un essai donc pour Excel 2007+ !...

Cdlt.

28commandes-test.xlsm (22.68 Ko)

Re,

Merci beaucoup, ça me donne exactement ce que j'attendais !!

Cela dit... Je vais faire la pénible haha... comme je le comprend cela risque de ne pas fonctionner pour la version 2003 (je testerai tout de même demain !). Si c'est le cas, pensez vous qu'une solution serait applicable à excel 2003 en attendant le changement ?

Dans tous les cas je garde votre solution très précieusement et vous remercie encore !

Bonsoir lelea, Jean-Eric,

lelea a écrit :

je testerai tout de même demain !

Comme c'est pour demain, donc urgent, j'ai téléchargé le fichier de Jean-Eric ; j'ai vu dans le code VBA aucune instruction spéciale qui ne puisse être exécutée par VBA 2003 ; j'ai donc juste converti le fichier en version "Classeur Excel 97 - 2003" ; cependant, lors de la tentative d'enregistrement, j'ai eu cette fenêtre d'avertissement :

screen

J'ai quand même enregistré le fichier, qui contient donc quelques références converties en références de cellules.

Je crois que ça devrait marcher tel que, mais à vérifier très soigneusement !

9commandes-test.zip (10.58 Ko)

dhany

Re,

Voir Feuille Excel 2003.

A tester !...

Cdlt.

Bonjour !

Dhany : non ça ne fonctionne pas, c'est la ligne Set rng = .ListColumns(1).DataBodyRange qui a l'air de poser probleme ! Mais merci beaucoup pour votre temps et votre réponse !

Jean-eric : testé et approuvé ! Ça marche parfaitement !! Histoire de chipoter, est il possible que lorque le numéro de commande est déjà existant, il soit recopier dans la colonne N° commande comme vous l'avez fait pour les numéros inconnu ? Cela dit c'est un detail Merci encore !!

Passez une bonne journée !

Bonjour,

Un numéro de commande n'est-il pas unique ?

Cdlt.

Re,

Dans ma base il y a une ligne pour un article mais une commande peut comporter plusieurs articles, le numéro de commande est donc le facteur qui me permet de regrouper tous les articles de la même commande grâce à une recherche multiple afin de générer la feuille de commande finale !

Cordialement

Re,

Voir fichier en retour.

Vérifier le bon fonctionnement pour les 2 versions Excel (2003 et 2007+).

Cdlt.

21commandes-test.xlsm (27.44 Ko)

Re,

Merci beaucoup pour votre temps, je ne vous embête pas plus, tout est parfait !!

Rechercher des sujets similaires à "vba recopier ligne precedente condition"