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 :

Retraitement de données avec VBA codes


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Inscrit en
    Mars 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 10
    Par défaut Retraitement de données avec VBA codes
    Bonjour à tous.

    Je me trouve confronté à un problème de retraitement de donnée et j'aimerai le résoudre avec un code VBA.

    Le problème est le suivant: J'ai des données concernant des actions avec des dates, leurs rendement et le nbre d'actions. Mes données concernant mes actions sont les unes sous les autres. Et j'aimerais pouvoir les avoir les unes à côtés des autres.

    Sur 4 colonnes (identifiant, date, rendement, nbre d'action), j'ai d'abord toutes les données concernant Microsoft (par exemple), puis toutes les données concernant yahoo, etc. Donc au lieu d'avoir ces données verticalement, je voudrais les avoir horizontalement (une sorte de transposée)

    Je sais que c'est pas hyper clair, alors c'est pour cela que j'ai joint un fichier pour illustrer mon problème. Qlq un aurait-il une idée sur le code VBA que je pourrais utiliser?

    Merci beaucoup
    Fichiers attachés Fichiers attachés

  2. #2
    Membre Expert Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Par défaut
    Ce que je verrai c'est utiliser un filtre selon le numéro sur la colonne puis la copie
    des cellules visibles :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Thisworksheet.Cells.SpecialCells(xlCellTypeVisible).Copy

  3. #3
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 122
    Par défaut
    Salut et Bienvenu a toi
    Voici comment je procéderais.

    Initialisation de 2 variables (long ou entier selon besoin) X = 0 Y = -1
    Une Boucle qui suis les case une a une en colonne A
    Si valeur dans caseA <> X Alors
    X = Valeur CaseA
    Y = Y + 1
    Fin Si
    caseA + les 3 cases suivantes copiées vers colonne n° 7 (colonne G) + (Y*4) à la suite des données deja existantes
    Boucle

    Voila c'est une boucle simple, a toi de réfléchir a sa mise en œuvre.
    Si tu as un problème n'hésites pas a proposer ton code.

    A++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  4. #4
    Membre du Club
    Inscrit en
    Mars 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 10
    Par défaut
    Merci bcp pour votre aide à vous deux.

    J'ai donc réussi à implémenter ce que je voulais. Je donne le code au cas ou qlq un en aurait besoin

    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
    Sub Retraitement_données()
    '18th March 2009
     
    Cells(5, 7) = Cells(5, 1).Value
    Cells(5, 8) = Cells(5, 2).Value
    Cells(5, 9) = Cells(5, 3).Value
    Cells(5, 10) = Cells(5, 4).Value
    x = 0
    s = 0
    v = 0
    j = 0
    For i = 1 To 43
    If Cells(5 + i, 1) - Cells(4 + i, 1) = x Then
    Cells(5 + i - s, 7 + v) = Cells(5 + i, 1).Value
    Cells(5 + i - s, 8 + v) = Cells(5 + i, 2).Value
    Cells(5 + i - s, 9 + v) = Cells(5 + i, 3).Value
    Cells(5 + i - s, 10 + v) = Cells(5 + i, 4).Value
     
     
    ElseIf Cells(5 + i, 1) - Cells(4 + i, 1) <> x Then
    j = j + 4
    Cells(5, 7 + j) = Cells(5 + i, 1).Value
    Cells(5, 8 + j) = Cells(5 + i, 2).Value
    Cells(5, 9 + j) = Cells(5 + i, 3).Value
    Cells(5, 10 + j) = Cells(5 + i, 4).Value
     
    v = j
    s = i
     
    End If
     
    Next i
     
    End Sub

  5. #5
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 122
    Par défaut
    Salut
    C'est une possibilité, en voici une autre

    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
    Sub FlipFlap()
    Dim TheCell As Range
    Dim X As Long, Y As Long
    Dim Entete As Range
     
    'J'avais oublié les entet de colonne
    Set Entete = Range("A4:D4")
    'Initialisation de 2 variables (long ou entier selon besoin) X = 0 Y = -1
    X = 0
    Y = -1
    'Une Boucle qui suis les cases une a une en colonne A
    For Each TheCell In Range("A5", Cells(Rows.Count, "A").End(xlUp))
    'Si valeur dans caseA <> X Alors
        If TheCell <> X Then 'On crée une nouvelle colonne de valeur
            X = TheCell 'X = Valeur CaseA
            Y = Y + 1 'Y = Y + 1
            Entete.Copy Cells(3, 7 + Y * 4)
        End If 'Fin Si
    'caseA + les 3 cases suivantes copiées vers colonne n° 7 (colonne G) + (Y*4) à la suite des données deja existantes
    TheCell.Resize(1, 4).Copy Cells(Rows.Count, 7 + Y * 4).End(xlUp).Offset(1, 0)
    Next 'Boucle
    End Sub
    J'avais oublié dans mon code littéral la gestion des entête de colonnes.
    Comme disait toujours mon prof d'electro, il y a autant de câblages possibles que d'élève dans la classe, c'était pas très vrai... mais par contre pour le code c'est une chose sur

    a++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  6. #6
    Membre du Club
    Inscrit en
    Mars 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 10
    Par défaut
    Merci pour cette autre version de code.

    Comme t'as pu le constater, je débute en programmation . Mon code est moins simple que le tiens. Mais bon, l'important c'est qu'il fonctionne.

    je pense d'ailleurs que je vais utiliser ton code pour résoudre la deuxième partie de mon problème. il faut maintenant que je fasse correspondre les dates. Un petit fichier excel s'impose afin d'illustrer ma problèmatique.

    Je crée manuellement une colonne avec des dates allant de 1986 à 2007 par exemple. Il faudrait que mes données concernant mes actions soient alignées sur les dates correspondantes.

    J'espère que le fichier joint aidera à mieux comprendre la problématique
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. Connexion base de donnée avec un code C#
    Par yochima dans le forum C#
    Réponses: 12
    Dernier message: 20/05/2017, 19h12
  2. [ACC97] - Pilotage IE avec vba - code masqué dans fichier adx
    Par samuelsiffert dans le forum VBA Access
    Réponses: 0
    Dernier message: 23/07/2014, 20h20
  3. [AC-2003] gérer une base de données avec des codes barres
    Par franklin59 dans le forum Modélisation
    Réponses: 1
    Dernier message: 09/12/2009, 15h21
  4. extraction de données avec vba vers excel
    Par SandyF dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 07/08/2009, 15h37
  5. Réponses: 1
    Dernier message: 19/06/2007, 11h56

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