IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Code VBA reporter montant en fonction d'une spécificité


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    comptable
    Inscrit en
    Juillet 2017
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : comptable

    Informations forums :
    Inscription : Juillet 2017
    Messages : 59
    Par défaut Code VBA reporter montant en fonction d'une spécificité
    Bonjour à tous,

    Cela fait quelques temps que j'essaye d'écrire un programme VBA me permettant de reporter un montant en fonction de sa spécificité dans une feuille Excel.

    Je m'explique :
    Les spécificités se trouvent en colonne B de la Feuil1 du fichier Excel. A chacune des spécificités, est affecté un montant. Ce montant se trouve en colonne G de la Feuil1.
    La Feuil2 est un tableau de répartition des dépenses en fonction des spécificités de la Feuil1.
    La spécificité est composé d’un nombre à huit chiffres
    - Les 4 premiers chiffres désignent la ligne du tableau de la Feuil2 du fichier Excel. Pour retrouver la ligne, il faut comparer les 4 premiers chiffres de la spécificité en colonne B de la Feuil1 d'Excel avec la colonne A de la Feuil2 du même fichier d'Excel.
    - Si le 5ème chiffre de la spécificité est un 1 et que le 7ème chiffre de la spécificité est un 1 alors il faut placer le montant qui se trouve en colonne G de la Feuil1 d'Excel en colonne C de la Feuil2 d'Excel en fonction des 4 premiers chiffres de la spécificité qui détermine la ligne sur la Feuil2 d'Excel
    - Si le 5ème chiffre de la spécificité est un 1 et que le 7ème chiffre de la spécificité est un 2 alors il faut placer le montant qui se trouve en colonne G de la Feuil1 d'Excel en colonne D de la Feuil2 d'Excel en fonction des 4 premiers chiffres de la spécificité qui détermine la ligne sur la Feuil2 d'Excel
    - Si le 5ème chiffre de la spécificité est un 2 ou un 4 et que le 6ème chiffre de la spécificité est un 1 et que le 7ème chiffre de la spécificité est un 1 et que le 8ème chiffre de la spécificité est un 1 alors il faut placer le montant qui se trouve en colonne G de la Feuil1 d'Excel en colonne G de la Feuil2 d'Excel en fonction des 4 premiers chiffres de la spécificité qui détermine la ligne sur la Feuil2 d'Excel
    - Si le 5ème chiffre de la spécificité est un 2 ou un 4 et que le 6ème chiffre de la spécificité est un 1 et que le 7ème chiffre de la spécificité est un 1 et que le 8ème chiffre de la spécificité est un 2 ou un 4 ou un 8 alors il faut placer le montant qui se trouve en colonne G de la Feuil1 d'Excel en colonne H de la Feuil2 d'Excel en fonction des 4 premiers chiffres de la spécificité qui détermine la ligne sur la Feuil2 d'Excel
    - Si le 5ème chiffre de la spécificité est un 2 ou un 4 et que le 6ème chiffre de la spécificité est un 1 et que le 7ème chiffre de la spécificité est un 2 alors il faut placer le montant qui se trouve en colonne G de la Feuil1 d'Excel en colonne I de la Feuil2 d'Excel en fonction des 4 premiers chiffres de la spécificité qui détermine la ligne sur la Feuil2 d'Excel
    - Si le 5ème chiffre de la spécificité est un 2 ou un 4 et que le 6ème chiffre de la spécificité est un 2 et que le 8ème chiffre de la spécificité est un 2 ou un 4 ou un 8 alors il faut placer le montant qui se trouve en colonne G de la Feuil1 d'Excel en colonne F de la Feuil2 d'Excel en fonction des 4 premiers chiffres de la spécificité qui détermine la ligne sur la Feuil2 d'Excel
    - Si le 5ème chiffre de la spécificité est un 2 ou un 4 et que le 6ème chiffre de la spécificité est un 2 et que le 8ème chiffre de la spécificité est un 1 alors il faut placer le montant qui se trouve en colonne G de la Feuil1 d'Excel en colonne E de la Feuil2 d'Excel en fonction des 4 premiers chiffres de la spécificité qui détermine la ligne sur la Feuil2 d'Excel
    - Si le 5ème chiffre de la spécificité est un 3 alors il faut placer le montant qui se trouve en colonne G de la Feuil1 d'Excel en colonne J de la Feuil2 d'Excel en fonction des 4 premiers chiffres de la spécificité qui détermine la ligne sur la Feuil2 d'Excel

    Voici un exemple : la spécificité en cellule B40 de la Feuil1 d'Excel est 59914111. Le montant affecté à cette spécificité est 255 000 € et se trouve en cellule G40. Le montant de 255 000 € sera reporter en cellule G139 de la Feuil2 d'Excel.

    Classeur1.xlsm

    Merci beaucoup au personne qui m'aideront et aux autres également

  2. #2
    Membre chevronné
    Homme Profil pro
    Formateur bureautique
    Inscrit en
    Janvier 2021
    Messages
    302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Formateur bureautique
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2021
    Messages : 302
    Par défaut Demande d'info
    Bonjour
    dans votre exemple, tout en bas, vous parlez de B40 en Feuil1 puis G139 dans feuil2. Ce ne serait pas plutôt B39 et G138 ?

  3. #3
    Membre averti
    Homme Profil pro
    comptable
    Inscrit en
    Juillet 2017
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : comptable

    Informations forums :
    Inscription : Juillet 2017
    Messages : 59
    Par défaut
    Citation Envoyé par Fab_de_chez_PERFORM Voir le message
    Bonjour
    dans votre exemple, tout en bas, vous parlez de B40 en Feuil1 puis G139 dans feuil2. Ce ne serait pas plutôt B39 et G138 ?
    Bonjour,

    Effectivement vous avez raison. Désolé pour cette erreur.

  4. #4
    Membre chevronné
    Homme Profil pro
    Formateur bureautique
    Inscrit en
    Janvier 2021
    Messages
    302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Formateur bureautique
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2021
    Messages : 302
    Par défaut Controle
    Re
    Pourriez vous SVP controler ce que j'ai mis en latéral Feuil1

    Ce sont des formules pour réussir à identifier la cellule où reporter l'info.
    Si j'ai bien compris seules les cellules avec montant en G sont à traiter (voir colonnes W et X)

    Pourriez vous aussi controler la cellule W65 en feuil1. J'ai une correspondance en Feuil 2 en ligne 44 mais je n'ai pas de lettre de colonne déterminée par l'une de vos 8 conditions.

    Si ce que j'ai fait semble OK, ce sera + facile de faire la macro
    Fichiers attachés Fichiers attachés

  5. #5
    Membre averti
    Homme Profil pro
    comptable
    Inscrit en
    Juillet 2017
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : comptable

    Informations forums :
    Inscription : Juillet 2017
    Messages : 59
    Par défaut
    Citation Envoyé par Fab_de_chez_PERFORM Voir le message
    Re
    Pourriez vous SVP controler ce que j'ai mis en latéral Feuil1

    Ce sont des formules pour réussir à identifier la cellule où reporter l'info.
    Si j'ai bien compris seules les cellules avec montant en G sont à traiter (voir colonnes W et X)

    Pourriez vous aussi contrôler la cellule W65 en feuil1. J'ai une correspondance en Feuil 2 en ligne 44 mais je n'ai pas de lettre de colonne déterminée par l'une de vos 8 conditions.

    Si ce que j'ai fait semble OK, ce sera + facile de faire la macro
    Tout d'abord, merci énormément pour cette aide !!
    Ensuite, dans la feuil2, en colonne A nous avons les lignes budgétaire. Cependant, certaines lignes disposent que de 3 voir 2 chiffres. Pour que le montant s'affecte au bonne endroit il faut regarder la racine. Par exemple, lorsque la spécificité est 11112221, cette spécificité est rattaché à la ligne 20 de la feuil2. Le montant de 500 000 € sera mis en cellule I20 de la feuil 2.

    De plus, seules les montants inscrits dans la colonne G doivent être reporter dans la feuil 2.

    Enfin concernant la condition pour la cellule W65, il me semblait l'avoir écrit dans l'une des conditions :
    Si le 5ème chiffre de la spécificité est un 2 ou un 4 et que le 6ème chiffre de la spécificité est un 1 et que le 7ème chiffre de la spécificité est un 1 et que le 8ème chiffre de la spécificité est un 1 alors il faut placer le montant qui se trouve en colonne G de la Feuil1 d'Excel en colonne G de la Feuil2 d'Excel en fonction des 4 premiers chiffres de la spécificité qui détermine la ligne sur la Feuil2 d'Excel.

    Je vous remercie encore une fois pour le temps que vous m'accordez.

  6. #6
    Membre chevronné
    Homme Profil pro
    Formateur bureautique
    Inscrit en
    Janvier 2021
    Messages
    302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Formateur bureautique
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2021
    Messages : 302
    Par défaut Exemple
    Bonjour
    voici un petit code VBA pour reporter les données comme demandé

    Après j'ai noté une bizarrerie sur les codes 19922112 et 19924112 qui sont présents 2x chacun sur la feuille 1. Le problème c'est que la macro ne reportera finalement que le dernier en G43 de la feuille 2.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    Sub Report_Montant()
     
    's'il y a un montant dans la colonne G de la feuil1, le reporter suivant les consignes données
    'voir feuille mémo répartition
     
    Dim Nom_Feuille_1 As String
    Dim Nom_Feuille_2 As String
    Nom_Feuille_1 = "Feuil1" 'à ajuster au besoin
    Nom_Feuille_2 = "Feuil2" 'à ajuster au besoin
     
    Dim c As Range
    For Each c In Sheets(Nom_Feuille_1).Range("G2:G" & Sheets(Nom_Feuille_1).Range("A" & Rows.Count).End(xlUp).Row)
     
     
        If c.Value > 0 And Right(Sheets(Nom_Feuille_1).Range("B" & c.Row), 4) <> "0000" Then 'pour chaque cellule de la colonne G en Feuil1, je vérifie si montant et si code ne termine pas par 0000
     
            'Je récup le code spécificité équivalent en B et le décompose
            Dim Spécificité As String
            Spécificité = Sheets(Nom_Feuille_1).Range("B" & c.Row)
     
            Dim Racine As String
            Racine = Left(Spécificité, 4)
     
            Dim Cinq As Integer
            Dim Six As Integer
            Dim Sept As Integer
            Dim Huit As Integer
     
            Cinq = Right(Left(Spécificité, 5), 1)
            Six = Right(Left(Spécificité, 6), 1)
            Sept = Right(Left(Spécificité, 7), 1)
            Huit = Right(Left(Spécificité, 8), 1)
     
                Dim Ma_Col As String
     
                'Cas 1 : 5=1 et 7=1 => Col. C
                If Application.And(Cinq = 1, Sept = 1) Then
                Ma_Col = "C"
                End If
     
                 'Cas 2 : 5=1 et 7=2 => Col. D
                If Application.And(Cinq = 1, Sept = 2) Then
                Ma_Col = "D"
                End If
     
                'Cas 3 : 5=2 ou 4 et 6=1 et 7=1 et 8=1 => Col. G
                If Application.And(Application.Or(Cinq = 2, Cinq = 4), Six = 1, Sept = 1, Huit = 1) Then
                Ma_Col = "G"
                End If
     
                'Cas 4 : 5=2 ou 4 et 6=1 et 7=1 et 8= 2 ou 4 ou 8 => Col. H
                If Application.And(Application.Or(Cinq = 2, Cinq = 4), Six = 1, Sept = 1, Application.Or(Huit = 2, Huit = 4, Huit = 8)) Then
                Ma_Col = "H"
                End If
     
                'Cas 5 : 5=2 ou 4 et 6=1 et 7=2 => Col. i
                If Application.And(Application.Or(Cinq = 2, Cinq = 4), Six = 1, Sept = 2) Then
                Ma_Col = "i"
                End If
     
                'Cas 6 : 5=2 ou 4 et 6=2 et 8=1 => Col. E
                If Application.And(Application.Or(Cinq = 2, Cinq = 4), Six = 2, Huit = 1) Then
                Ma_Col = "E"
                End If
     
                'Cas 7 : 5=2 ou 4 et 6=2 et 8= 2 ou 4 ou 8 => Col. F
                If Application.And(Application.Or(Cinq = 2, Cinq = 4), Six = 2, Application.Or(Huit = 2, Huit = 4, Huit = 8)) Then
                Ma_Col = "F"
                End If
     
                'Cas 8 : 5=3 => Col. J
                If Cinq = 3 Then
                Ma_Col = "J"
                End If
     
        'report de l'info si la ligne existe
            Dim Ligne_Equiv_Feuil2 As String
                If WorksheetFunction.IfError(Application.Match(Racine, Sheets(Nom_Feuille_2).Range("A:A"), 0), "N EXISTE PAS") <> "N EXISTE PAS" Then
                Ligne_Equiv_Feuil2 = Application.Match(Racine, Sheets(Nom_Feuille_2).Range("A:A"), 0) 'ca me permet d'avoir la ligne equiv en feuille 2
                    'j'ai déterminé la colonne et la ligne donc je reporte l'info en Feuille 2
                    Sheets(Nom_Feuille_2).Range(Ma_Col & Ligne_Equiv_Feuil2).Formula = "=" & Sheets(Nom_Feuille_1).Name & "!" & c.Address 'c etant la cellule testée au départ
                Else
                MsgBox ("Le montant de " & c.Value & " € présent en G" & c.Row & " n'a pas été reporté car le code est absent en " & Nom_Feuille_2 & " => [ " & Sheets(Nom_Feuille_1).Range("C" & c.Row).Value & " ]"), , "Report de cette info annulé"
                End If
     
        End If
     
     
     
    Next
     
    End Sub
    Je vous joins mon fichier test
    djebalves.xlsm

    Petite remarque constructive : Pour une éventuelle prochaine fois sur le forum, dans votre énoncé de départ, il aurait mieux valu mettre un petit schéma moins indigeste comme celui là :
    Nom : 2023-02-15_07h24_48.png
Affichages : 96
Taille : 10,9 Ko

Discussions similaires

  1. Réponses: 1
    Dernier message: 24/11/2015, 12h20
  2. [XL-2002] Code VBA pour remplacer la fonction RECHERCHEV
    Par NoodleDS dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 24/07/2013, 09h58
  3. [XL-2007] Code VBA pour le transfert automatique d'une feuille à l'autre
    Par parky67 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 22/07/2012, 16h21
  4. Réponses: 2
    Dernier message: 14/02/2011, 19h30
  5. [VBA-E]couper en fonction d'une valeur
    Par captaine93 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 06/06/2006, 12h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo