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 :

Listing automatisé, liste personnalisée


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 32
    Par défaut Listing automatisé, liste personnalisée
    Bonjour à tous!

    Je me présente: Niveau 0 en VBA
    Etudiante en logistique en contrat pro
    Dans le cadre de mon projet en entreprise on m'a sollicité pour créer un tableau simple en apparence ...
    La difficulté de ce tableau réside dans le fait que la saisie doit être automatique ...je m'explique :

    1/ je dispose d'un ordre bien précis de données comme suit:

    • A1
    • A8
    • A22
    • A4
    • A6
    • A18
    • A30


    2/ Je dois créer un tableau qui en entrant la données de la première cellule me donne automatiquement les données pour le reste de la colonne.
    Exemple: en cellule 1 je renseigne A6 l’ordre des cellules est alors :

    • A6
    • A18
    • A30
    • A1
    • A8
    • A22
    • A4


    Ma question est la suivante :
    Existe-t-il un moyen de programmer cela sur Excel et si oui …y-a-t-il une âme charitable pour m’aider sur cette partie de mon projet ?

    Merci par avance d’avoir lu ce « pavé » !

  2. #2
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonjour, ci-dessous le code pour le fichier joint, donc à 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
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Tbdonnees, TbResultat(), y As Long
    Dim Dc As Range, x As Long, tr As Range
    y = 1
    If Target.Address = "$B$2" Then
      Set Dc = Range("A" & Rows.Count).End(xlUp)
      Tbdonnees = Range("A2", Dc)
      ReDim tbresult(1 To UBound(Tbdonnees))
      Set tr = Range("A1", Dc).Find(Target.Value)
      If Not tr Is Nothing Then
        For x = tr.Row - 1 To UBound(Tbdonnees)
          tbresult(y) = Tbdonnees(x, 1)
          y = y + 1
        Next x
        For x = 1 To tr.Row - 2
          tbresult(y) = Tbdonnees(x, 1)
          y = y + 1
        Next x
      End If
      Range("B2").Resize(UBound(tbresult)) = Application.Transpose(tbresult)
    End If
    End Sub
    Fichiers attachés Fichiers attachés
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  3. #3
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 32
    Par défaut
    Un énorme merci à vous!

    Je vais tenter ce que vous m'avez conseillé!

    Merci pour votre réactivité

  4. #4
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Je me présente: Niveau 0 en VBA
    Afin de pouvoir adapter, je remets le code avec ses explications
    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
    Private Sub Worksheet_Change(ByVal Target As Range) 'donc dans l'évènement "Change" de la feuille
    'on déclare les variables
    Dim Tbdonnees, TbResultat(), y As Long
    Dim Dc As Range, x As Long, tr As Range
    y = 1 'on donne la valeur 1 à la variable y
    If Target.Address = "$B$2" Then 'si la valeur est entrée en B2
      Set Dc = Range("A" & Rows.Count).End(xlUp) 'Dc = dernière cellule utilisée en col A
      Tbdonnees = Range("A2", Dc) 'on remplit le tableau avec les valeurs de la col A
      ReDim tbresult(1 To UBound(Tbdonnees)) 'on redimensionne le tableau qui recevra les données
      Set tr = Range("A1", Dc).Find(Target.Value) 'on cherche la valeur de B2 dans la col A
      If Not tr Is Nothing Then 'si aucune erreur on continue
        For x = tr.Row - 1 To UBound(Tbdonnees) 'on boucle à partir de la position de la _
        valeur en A jusqu'à la fin du tableau et on donne les valeurs restantes au resultat
          tbresult(y) = Tbdonnees(x, 1)
          y = y + 1
        Next x
        'ci-dessous, une nouvelle boucle pour reprendre les autres valeurs
        For x = 1 To tr.Row - 2
          tbresult(y) = Tbdonnees(x, 1)
          y = y + 1
        Next x
      End If
      'ci-dessous, on rend le resultat à la colonne B
      Range("B2").Resize(UBound(tbresult)) = Application.Transpose(tbresult)
    End If
    End Sub
    Ne pas oublier de cliquer sur si c'est le cas
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  5. #5
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 32
    Par défaut
    Merci infiniment!

    Avec les explications c 'est génial, je suis entrain d'essayer d'adapter tout ceci au format final de mon tableau .
    Je vous tiens au courant.

  6. #6
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 32
    Par défaut
    Youpi ça marche nickel!!!

    J'ai pu grâces à vos explications adapter cela à mes données .

    Juste une petite interrogation demeure: si je souhaite sur la meme feuille excel et de manière complètement indépendante des premiers résultats insérer un autre listing automatisé quel serait la procédure sur VBA (encore désolé de mon ignorance totale )?

  7. #7
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Tu verras dans ce code une légère variante, on cherche la valeur dans le tableau mais plus avec "Find", de plus je ne tiens plus compte des majuscules/minuscules
    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
    Private Sub Worksheet_Change(ByVal Target As Range) 'donc dans l'évènement "Change" de la feuille
    'on déclare les variables
    Dim Tbdonnees, TbResultat(), y As Long
    Dim Dc As Range, x As Long, Tr As Long 'Tr deviens "Long" et non "Range"
    Tr = 0
    y = 1 'on donne la valeur 1 à la variable y
    If Target.Address = "$B$2" Then 'si la valeur est entrée en B2
      Set Dc = Range("A" & Rows.Count).End(xlUp) 'Dc = dernière cellule utilisée en col A
      Tbdonnees = Range("A2", Dc) 'on remplit le tableau avec les valeurs de la col A
      ReDim tbresult(1 To UBound(Tbdonnees)) 'on redimensionne le tableau qui recevra les données
      'ci-dessous autre façon de trouver la valeur dans le tableau
      For x = 1 To UBound(Tbdonnees)
        'ci-dessous, j'ajoute "Ucase" pour ne pas tenir compte des majuscules/minuscules
        If UCase(Tbdonnees(x, 1)) = UCase(Target.Value) Then Tr = x: Exit For
      Next x
      If Tr > 0 Then 'si aucune erreur on continue
        For x = Tr To UBound(Tbdonnees) 'on boucle à partir de la position de la _
        valeur en A jusqu'à la fin du tableau et on donne les valeurs restantes au resultat
          tbresult(y) = Tbdonnees(x, 1)
          y = y + 1
        Next x
        'ci-dessous, une nouvelle boucle pour reprendre les autres valeurs
        For x = 1 To Tr - 1
          tbresult(y) = Tbdonnees(x, 1)
          y = y + 1
        Next x
      Else
        MsgBox "aucune donnée ne correspond"
      End If
      'ci-dessous, on rend le resultat à la colonne B
      Range("B2").Resize(UBound(tbresult)) = Application.Transpose(tbresult)
    End If
    End Sub
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  8. #8
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Dans le même évènement, changer l'adresse de cette ligne de code (condition)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Target.Address = "$B$2" Then
    et rédiger la procédure, toujours dans l'évènement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub Worksheet_Change(ByVal Target As Range)
    suivant ce que tu veux faire, peut-être auras-tu besoin d'appliquer ces lignes en début et fin de procédure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Application.EnableEvents = False
    '.......
    Application.EnableEvents = True
    A voir !!!!
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  9. #9
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 32
    Par défaut
    Mince...j'ai tenté..c'est loupé!
    J 'ai joins une partie des tableaux.

    Je suis dans la mouise...
    Fichiers attachés Fichiers attachés

  10. #10
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    il ne fallait pas t'embéter à changer les noms des variables, mets ce code à la place de l'autre, sinon as-tu regardé ma derniere proposition
    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
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Tbdonnees, tbresult(), y As Long
    Dim Dc As Range, x As Long, tr As Range
    y = 1
    If Target.Address = "$B$2" Then
      Set Dc = Range("A" & Rows.Count).End(xlUp)
      Tbdonnees = Range("A2", Dc)
      ReDim tbresult(1 To UBound(Tbdonnees))
      Set tr = Range("A1", Dc).Find(Target.Value)
      If Not tr Is Nothing Then
        For x = tr.Row - 1 To UBound(Tbdonnees)
          tbresult(y) = Tbdonnees(x, 1)
          y = y + 1
        Next x
        For x = 1 To tr.Row - 2
          tbresult(y) = Tbdonnees(x, 1)
          y = y + 1
        Next x
      End If
      Range("B2").Resize(UBound(tbresult)) = Application.Transpose(tbresult)
    End If
    y = 1
    If Target.Address = "$E$2" Then
      Set Dc = Range("D" & Rows.Count).End(xlUp)
      Tbdonnees = Range("D2", Dc)
      ReDim tbresult(1 To UBound(Tbdonnees))
      Set tr = Range("D1", Dc).Find(Target.Value)
      If Not tr Is Nothing Then
        For x = tr.Row - 1 To UBound(Tbdonnees)
          tbresult(y) = Tbdonnees(x, 1)
          y = y + 1
        Next x
        For x = 1 To tr.Row - 2
          tbresult(y) = Tbdonnees(x, 1)
          y = y + 1
        Next x
      End If
      Range("E2").Resize(UBound(tbresult)) = Application.Transpose(tbresult)
    End If
    End Sub
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  11. #11
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 32
    Par défaut YOUPI
    Super!
    j'ai cru qu'il fallait tout adapter au final je n'ai guère contribué à ce tableau!
    Merci pour le travail accomplie !

    C 'est ma première discussion dans ce forum et permettez moi de vous dire que c'est génial autant d'attention et merci pour le temps que vous consacrés bénévolement .

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 01/07/2010, 19h45
  2. [1.x] Admin generator - liste affichant requête personnalisée
    Par dawamiko dans le forum Symfony
    Réponses: 11
    Dernier message: 02/12/2009, 15h58
  3. Regrouper une liste en liste de listes
    Par West01 dans le forum Prolog
    Réponses: 12
    Dernier message: 14/03/2008, 14h07
  4. acceder au n iéme element d'une liste std::list
    Par sorari dans le forum SL & STL
    Réponses: 4
    Dernier message: 23/03/2005, 15h21
  5. [langage] tri avancé, liste de listes
    Par schnecke dans le forum Langage
    Réponses: 6
    Dernier message: 29/03/2004, 14h00

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