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 :

Fusion/consolidation BDD


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2010
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 11
    Points : 12
    Points
    12
    Par défaut Fusion/consolidation BDD
    Bonjour à tous,

    Mes jeunes notions de vba ne sont pas du tout assez avancées pour comprendre le code de cette macro pour l'adapter à ma situation…

    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
    Sub FusionConso()
      [A2:C1000].ClearContents
      Application.ScreenUpdating = False
      For s = 2 To Sheets.Count
         Range(Sheets(s).[A2], Sheets(s).[A65000].End(xlUp).End(xlToRight)).Copy [A65000].End(xlUp).Offset(1, 0)
      Next s
      [A1:C1000].Sort Key1:=[A2], Order1:=xlAscending, Key2:=[B2], Order2:=xlAscending, Header:=xlGuess
      Set mondico = CreateObject("Scripting.Dictionary")
      For i = 2 To [A65000].End(xlUp).Row
        temp = Cells(i, "A") & "_" & Cells(i, "B")
        mondico(temp) = mondico(temp) + Cells(i, "C")
      Next
      [A2:C1000].ClearContents
      [A2].Resize(mondico.Count) = Application.Transpose(mondico.keys)
      [C2].Resize(mondico.Count) = Application.Transpose(mondico.items)
      Application.DisplayAlerts = False
      [A2:A1000].TextToColumns Destination:=Range("A2"), DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
            Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar:="_"
    End Sub
    Sans demander de me fournir une réponse complete mais quelques pistes (ou même la logique la plus simple à suivre pour répondre à ma problèmatique :

    Comme vous pouvez le voir sur mon fichier exemple j’ai deux tableaux dont la ligne 1 est identique.
    Ce que j’aimerais avec ma macro :

    1. Dans un troisième tableau récap sur une nouvelle feuille « vousêtesgéniaux » qui se crée : obtenir une liste de mes fournisseurs du tableau 1 (vert) + 2 (bleu) et la différence des données fournisseurs déjà présents. (soustraction des valeurs de cellule des doublons en faite…). Le but est de savoir ce que je leur doit.

    2. Mon problème est que des fournisseurs se rajoutent et donc que ca me décale tout. Il faudrait que le tableau 3 me fasse donc la différence des fournisseurs déjà présent + me rajoute ceux qui sont dans le tableau 1 ou 2 avec la différence.

    Mes macros actuelles me permettent de construire automatiquement les deux tableaux 1 et 2 mais des décalages se produisent je ne peux donc pas faire un e simple synthese avec une formule de soustration, j'imagine qu'il faudrait replacer les lignes communes en face. Effectuer ensuite une soustration etc...

    Guillaume

    [Edit] Désolé pour le style "flagorneur" du précédent message qui ne se voulait que d'un ton décontracté teinté de dépit... A l'avenir je respecterai scrupuleusement les règles du forum.

  2. #2
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    à adapter
    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
    Sub Macro1()
    Dim Sht As Worksheet, aSht As Worksheet
    Dim Plage1 As Range, Plage2 As Range, c As Range
    Dim Srce1 As String, Srce2 As String
     
    Application.ScreenUpdating = False
    Set aSht = Sheets("récaprécap")
    On Error Resume Next
    Set Sht = Sheets("vousêtesgéniaux")
    On Error GoTo 0
    If Sht Is Nothing Then
       Set Sht = Sheets.Add
       Sht.Name = "vousêtesgéniaux"
    End If
     
    With aSht
       Set Plage1 = .Range("A1:F" & .Range("A1").End(xlDown).Row)
       Set Plage2 = .Range("G1:L" & .Range("G1").End(xlDown).Row)
    End With
    For Each c In Plage2
       If IsNumeric(c.Value) Then c.Value = -1 * c.Value
    Next c
     
    Srce1 = "'" & aSht.Name & "'!" & Plage1.Address(True, True, xlR1C1)
    Srce2 = "'" & aSht.Name & "'!" & Plage2.Address(True, True, xlR1C1)
    Sht.Range("A1").Consolidate Sources:=Array(Srce1, Srce2), Function:=xlSum, TopRow:=True, LeftColumn:=True
    For Each c In Plage2
       If IsNumeric(c.Value) Then c.Value = -1 * c.Value
    Next c
     
    End Sub

  3. #3
    Membre à l'essai
    Inscrit en
    Juillet 2010
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 11
    Points : 12
    Points
    12
    Par défaut
    Impressionnant... Ca marche parfaitement avec très peu de modifications... Si tu as le temps quelques explications sur la lecture du code donné m'interesseraient beaucoup (pour pouvoir le concevoir moi même dans le futur).

    Encore une fois merci.

    Guillaume

  4. #4
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    C'est la traduction de Consolider existante dans excel (Menu Données dans excel 2003), avec une petite adaptation. ( consolider ne prends pas en compte la différence entre tableaux)
    au départ on a plage1 et plage2 qu'on multiplie par -1
    on fait la consolidation des données (sans liaison) et en re multiplie plage2 par -1 pour revenir à l'état initial des données.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sht.Range("A1").Consolidate Sources:=Array(Srce1, Srce2), Function:=xlSum, TopRow:=True, LeftColumn:=True
    Sélectionne .Consolidate et fais F1

  5. #5
    Membre à l'essai
    Inscrit en
    Juillet 2010
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 11
    Points : 12
    Points
    12
    Par défaut
    Merci pour tes explications.

    Bonne continuation.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Fusion de BDD
    Par SNY77 dans le forum Requêtes
    Réponses: 97
    Dernier message: 10/01/2013, 14h57
  2. [WD-2007] syntaxe champ de fusion (champ bdd de type float)
    Par Botzouk dans le forum Word
    Réponses: 2
    Dernier message: 10/12/2010, 23h17
  3. [WD-2003] fusion publipostage bdd excel
    Par kikim66 dans le forum Word
    Réponses: 5
    Dernier message: 08/04/2009, 15h22
  4. Consolidation/aggrégation de BdD
    Par 40eme dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 11/09/2006, 09h52
  5. Fusion BDD SQL Server
    Par nadja dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 04/07/2006, 16h03

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