Résolu Excel VBA : Une telle macro est-elle possible

outilsetprocess

Expert
Bonjour à tous j'espère que vous passez une bonne journée

J'ai un problème sur excel

Je vous explique mais c'est très compliqué

J'ai un fichier nommé "Données de Mr X"
J'ai un autre fichier nommé "Suivi des crédits"

Sur le fichier "Données de Mr X" se trouvent plusieurs noms d'entreprises (ex : ALARMES SOCIETE TOULOUSE" ou encore "TRANSPORT LEGUMES LILLE"
Chaque nom de dossier regroupe plusieurs factures avec plusieurs dates et plusieurs sommes

Ex :

ALARMES SOCIETE TOULOUSE 13/06/2016 45 €
ALARMES SOCIETE TOULOUSE 1706/2016 32 €
ALARMES SOCIETE TOULOUSE 26/06/2016 71 €

TRANSPORT LEGUMES LILLE 12/06/2016 10.30 €
TRANSPORT LEGUMES LILLE 14/06/2016 14.5 €

Le nom de la société est dans la colonne D
Celui des dates dans la colonne H
Celui des montants dans la colonne I


Sur l'autre fichier nommé "Suivi des Crédits", j'ai plusieurs tableaux, chacun correspondant à une entreprise, dans lequel j'enregistre les montants des factures avec leur date
Le nom de l'entreprise est dans la colonne C, la date dans la colonne D et le montant dans la colonne G

Alors je vous demande si une telle macro est possible à réaliser :

On cherche dans la colonne D du fichier "Données de Mr X" tous les noms d'entreprise
Si le nom de l'entreprise apparait dans le colonne C du fichier "Suivi des crédits", j'aimerais pouvoir insérer 1 ligne au dessus et 1 colonne à droite du nom de l'entreprise la date dans la colonne D, le chiffre 2 dans la colonne E, et le montant dans la colonne G

Et comme dans le fichier "Données de Mr X" il y a plusieurs fois le nom de l'entreprise avec plusieurs factures, j'aimerais qu'elles s'insèrent dans le fichier "Suivi des crédits" l'une en dessous de l'autre (dans le tableau de "leur" entreprise)

J'aimerais également que cette "mise à jour" sur le dossier "suivi des crédits" se fasse automatiquement à chaque fois que j'ouvre le fichier "données de mr x" mais une fois que le transfert des données a été fait, si je l'ouvre à nouveau qu'il ne le refasse pas pour ceux qui ont été fait

Je vous demande pas de le faire (je vous l'interdis pas non plus ^^)
Mais vous pensez que c'est réalisable ?
Quelqu'un aurait la foi de m'aider sachant que je m'y connais très peu en VBA ?

Merci

J'aurais beaucoup aimé vous partager des petits fichiers facile pour exemple mais je ne vois pas l'option joindre un fichier

 

drul

Obscur pro du hardware
Staff
Salut, rien ne me semble impossible ici.
Tu as déjà essayer qqch ?
La partie la plus difficile est de ne pas recopier les données une 2ème fois à chaque ouverture de X, mais ça semble possible vu tes données (en gros si la ligne existe déjà, alors on la copie pas).
Tu peux nous faire un exemple (fictif) avec quelques printscreen de l'état initial de "Suivi des crédits", une page "Mr X" avec plusieures dates, et la résultat escompté sur "Suivi des crédits" ?
 

outilsetprocess

Expert
Alors voilà les deux fichiers en question

Et en fait j'aimerais aussi par exemple que s'il trouve une société dans le fichier "Données de Mr X" dont le tableau n'existe pas dans "suivi des crédits", il copie un tableau de "Suivi des crédits", il le met à la suite des autres, mais à la 1ère colonne et 3ème ligne de ce tableau il mette le nom qui n'est pas dans le fichier "suivi des crédits"
Et après les factures avec la date, code et montant se mettent seuls





 

drul

Obscur pro du hardware
Staff
Je vais pas avoir de temps tout de suite pour regarder ça ...
Tu as déjà essayer qqch ?
 

outilsetprocess

Expert
J'ai essayé des formules avec des "SI" des "ET" mais j'y arrive pas faut passer par les macro ça m'embête un peu

En fait ce qui m'énerve c'est que j'ai l'algorithme littéraire dans ma tête mais j'arrive pas à le "vba-iser"
 

outilsetprocess

Expert
J'aimerais connaitre les range, cells etc par cœur alors à chaque fois j'appuie sur f11 et je lis, j'essaye des trucs ça fonctionne, mais quand ca devient à ce stade y'a toujours un truc qui foire rien que dans la compilation, alors j'imagine que même si mon code est bon syntaxiquement et sémantiquement parlant, y'aura toujours quand même un truc qui ira pas ...
 

outilsetprocess

Expert
Macro Copier_Données

Lire les données de la colonne D du fichier Données de Mr X ;


Si le nom d'entreprise du ficher "Données de Mr x" =/ nom d'entreprise du fichier "suivi des crédits" Alors

recopier le tableau de C3 à G12 du fichier "Suivi des crédits" 3 lignes en dessous de la dernière cellule non vide à partir de la colonne C
remplacer la 4ème ligne du tableau dans la première colonne par le nom d'entreprise qui n'existait pas dans le fichier "suivi des crédits" ;

Pour chaque nom d'entreprise du ficher "Données de Mr x" (colonne D) = nom d'entreprise du fichier "suivi des crédits" (colonne C)

Selectionner cette ligne et copier la date (colonne H) et le montant (colonne I) ;

Si une ligne au dessus et une colonne à droite de là où le nom entreprise du fichier "suivi des crédits"= nom entreprise du fichier "Données de mr X" Alors

Coller une ligne au dessus et une colonne à droite de là où le nom entreprise du fichier "suivi des crédits"= nom entreprise du fichier "Données de mr X" la date (colonne D), le chiffre 2 (colonne E) et le montant colonne G ;

Sinon

Coller une colonne à droite et une ligne en dessous de celle non-vide ;

Fin du si

Fin du pour

Fin du si

Fin macro
 

drul

Obscur pro du hardware
Staff
Ok, on va y allé petit à petit:

un premier jet qui devrait gérer : "si MrX n'est pas pas dans suivi". lit bien les quelques commentaires

Code:
Option Explicit
Sub test()
Dim shMrx As Worksheet
Dim wbSuivi As Workbook
Dim shSuivi As Worksheet
Dim derLigneMrx As Long
Dim derLigneSuivi As Long
Dim i As Long
Dim j As Long
Dim mrX As String
Dim SocieteTrouvee As Boolean
'initialisation
Set shMrx = ThisWorkbook.Sheets("feuille1")
'on cherche la dernière société présente dans le tableau mrX
derLigneMrx = shMrx.Cells(Rows.Count, "D").End(xlUp).Row


'j'admet qu'il faut ouvrir le fichier de suivi et qu'il est dans le même répertoire.
Set wbSuivi = Workbooks.Open("Suivi des crédits.xlsx")
Set shSuivi = wbSuivi.Sheets("feuille1")


For i = 1 To derLigneMrx
    'on cherche la dernière ligne dans le tableau de suivi (autre stratégie ici car end ne regarde que le contenu de la celulle, pas le format)
    'on le fait dans la boucle for, car la feuille de suivit va se moidifer au fil du temps ...
    derLigneSuivi = shSuivi.UsedRange.Row + shSuivi.UsedRange.Rows.Count - 1
    SocieteTrouvee = False
    
    mrX = shMrx.Cells(i, "D").Value
    If mrX <> "" Then
        For j = 1 To derLigneSuivi
            If mrX = shSuivi.Cells(j, "C").Value Then
                ' youpie on a trouvé une société !
                ' on traitera ce cas plus tard
                SocieteTrouvee = True
                Exit For
            End If
        Next
        If Not SocieteTrouvee Then
            ' société non présente dans le suivis !
            shSuivi.Range("C3:G12").Copy shSuivi.Cells(derLigneSuivi + 3, "C")
            shSuivi.Cells(derLigneSuivi + 7, "C") = mrX
        End If
    End If
Next

End Sub
 

outilsetprocess

Expert
Je viens de le lire merci beaucoup super sympa franchement !!!
Du coup je vais le tester ; je le C/C sur la feuille 1 de "Données de Mr X" ?
 

drul

Obscur pro du hardware
Staff
Ouaip, et faut bien sur la lancer à la main pour le moment (on y reviendra plus tard) ;)
 

outilsetprocess

Expert
C'est bizarre je fais exécuter une boite de dialogue s'ouvre "L'indice n'appartient pas à la sélection" :/
 

drul

Obscur pro du hardware
Staff
Remplace "feuille1" par "feuil1" :pt1cable:, j'ai excel en anglais, et j'ai écris faux ...
 

outilsetprocess

Expert






Alors j'avais juste créé les tableaux avec ALARME SOCIETE TOULOUSE, TRANSPORT LEGUME LILLE et CONCESSIONNAIRE BMW dans le document "Suivi des crédits" (jusqu'à la ligne 40)

Et là ça en a créé deux autres
 

outilsetprocess

Expert


Il a créé deux tableaux (le dernier que j'ai moi-même fait étant celui de concessionnaire bmw)
 

outilsetprocess

Expert
Et maintenant alors que j'ai rien touché par rapport à tout à l'heure quand j'exécute la macro il y a un message d'erreur avec écrit tout simplement "400"
 

drul

Obscur pro du hardware
Staff
Ok, déjà 1 faut mettre +6 au lieu de +7 ici:
shSuivi.Cells(derLigneSuivi + 7, "C") = mrX

Ensuite, faut croire qu'il y a une différence dans la façon dont est écrit "TRANSPORT LEGUMES LILLES" dans MrX et dans Suivit, (un espace en plus ?)
Enlève tous tes tableaux (ligne 14 et suivante) après le premier et laisse faire la macro.
Exécute la plusieures fois pour t'assurer qu'elle ne crée plus de tableaux à partir de la 2eme fois.
 

drul

Obscur pro du hardware
Staff
N.B. pour l'erreur 400, essaie juste de fermer "suivi" avant chaque execution
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 129
Messages
6 717 853
Membres
1 586 373
Dernier membre
https://forum.tomshardwar
Partager cette page
Haut