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 :

récupération de données à partir d'un tableau sur une autre feuille [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 47
    Par défaut récupération de données à partir d'un tableau sur une autre feuille
    Bonjour

    Tout d'abord merci à tous ceux qui prendront un peu de temps pour lire mon problème et m'aider.
    Je vous explique :
    Sous Excel, j'ai deux feuilles, la première dans laquelle se trouve un tableau avec en colonne des indicateurs et en ligne des villes. Lorsque ma ville a un indicateur, je mets une croix. Je voudrais faire, sur une autre feuille, reprendre les détails d'une ville mais il faut que ca reste variable. Donc si je change ou j'ajoute un indicateur, il faut que les modifs se fassent sur mon autre feuille. Il est important de signaler que mes indicateur sont en colonne et que je les veux en ligne sur la feuille de ma ville.

    Voici le bout de code que j'ai commencé à faire mais il y a de nombreux problèmes il me semble :

    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
    Sub Axat()
     
    Dim cel_deb As String
    cel_deb = cell("c5")
     
    Dim cel_fin As String
    cel_fin = cell("y5")
     
    Dim i As String
     
    For i = cel_deb To cel_fin
        If i.Value = "x" Then
            'Je cherche à rendre variable les colonnes, si l'indicateur est coché, je 'copie/colle le nom de cette instruction sur la feuille qui appartient à la ville
            Sheets("Fonctionnement").Range("K3,W3,Y3").Select
            Sheets("Fonctionnement").Range("Y3").Activate
            Selection.Copy
            Sheets("Axat").Select
            Range("B6").Select
            Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
                False, Transpose:=True
            Application.CutCopyMode = False
        End If
    Next i
     
        With Selection
            .HorizontalAlignment = xlCenter
            .VerticalAlignment = xlCenter
            .WrapText = False
            .Orientation = 0
            .AddIndent = False
            .IndentLevel = 0
            .ShrinkToFit = False
            .ReadingOrder = xlContext
            .MergeCells = False
        End With
    End Sub
    Merci beaucoup pour votre aide.

    Bonne journée

  2. #2
    Membre expérimenté
    Inscrit en
    Août 2009
    Messages
    284
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Août 2009
    Messages : 284
    Par défaut
    Voici ce que je ferai
    Si tu nomme la feuille de la ville avec son nom tu peux faire:

    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
     
    sub Axat()
    dim i as integer,j as integer
    dim feuille as sheets
    dim nom as string
     
    i=2 'on supose que l'en tête est en ligne 1
    do until cells(i,1).value="" 'on va jusqu'au bout du tableau en considérant que la 1ère colonne est le nom de la ville
     
    nom=cells(i,1).value
    set feuillle=sheets(nom)
     
    j=2  'on va boucler sur les colonnes
    do until j=5 'dernière colonne
    if cells(i,j).value="X" then feuille.cells(n° ligne, n° colonne).value="X" 
    'pour le numero de ligne je trouverai une corespondance entre j et le numero
    de ligne de destination
    'par exemple si tu mets j en n° de ligne tu passe des colonnes en ligne(je crois que c'est ce que tu veux faire)
    j=j+1
    loop
    i=i+1
    loop
    end sub
    tu met ça dans un module et pour que ça se mette à jour tout seul tu met dans le code de la feuille:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Private Sub Worksheet_change(ByVal target As Range)
    If 2 < target.Column < 5 Then 'les colonne contenant les indicateurs
    Select Case target.Row
    Case 2,3,4,5,6,7,8,9,10,11,12,13,14 '... les lignes ou il y a des infos sur les villes
    Call Axat End Select
    End If
    end sub

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 47
    Par défaut
    Voici les quelques modifications que j'ai faites pour que je ne me perde pas trop.
    Mais il y a des petites choses que je ne comprend pas vraiment. Alors peut être que je n'ai pas été suffisamment clair dans mes explications.

    Je navigue entre deux feuilles : "Fonctionnement" où il y a mon tableau avec toutes mes données et la feuille "Axat" qui reprend les données seulement pour Axat.

    Ensuite, je n'ai pas trop compris cette histoire de remplacement de ligne par colonne... Il ne me faut pas les changer. dans mon tableau initial, les indicateurs sont en colonne et je les veux en ligne. Donc oui d'une certaine manière je veux les inverser mais je ne comprend pas pourquoi tu mets ="x" alors que ca je ne le veux pas mais juste le nom de mon indicateur.

    Est ce que tu m'as bien comprise ?
    je me doute que ce ne doit pas être évident...

    Je te remercie beaucoup

    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
     
    Sub Axat()
     
    Dim i As Integer, j As Integer
    Dim feuille As Sheets
    Dim nom As String
     
    i = 4
    'l'entête est en ligne 3
    Do Until Cells(i, 1).Value = ""
    'on va jusqu'au bout du tableau en considérant que la 1ère colonne est le nom de la ville
     
    nom = Cells(i, 1).Value
    Set feuillle = Sheets(nom)
     
    j = 2
    'on va boucler sur les colonnes
    Do Until j = 23
        'dernière colonne
        If Cells(i, j).Value = "x" Then feuille.Cells(j, i).Value = "X"
        'pour le numero de ligne je trouverai une corespondance entre j et le numero
        'de ligne de destination
        'par exemple si tu mets j en n° de ligne tu passe des colonnes en ligne(je crois que c'est ce que tu veux faire)
        j = j + 1
        Loop
        i = i + 1
    Loop
    End Sub
    je l'ai donc testé et j'ai un problème à cette ligne :
    If Cells(i, j).Value = "x" Then feuille.Cells(j, i).Value = "X"
    et le débogeur me dit qu'il y a une erreur de compilation à .Cells

    Merci de ton aide

  4. #4
    Membre expérimenté
    Inscrit en
    Août 2009
    Messages
    284
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Août 2009
    Messages : 284
    Par défaut
    Pour mettre en code tu selectionne la partie qui est du code est tu clic sur le dièse (#)

    Si tu ne veux pas récupérer la croix mais juste le nom de l'indicateur coché
    Pour l'erreur je pense que cela venait de la déclaration dim feuille as sheets
    ya pas de s certainement

    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
    Sub Axat()
     
    Dim i As Integer, j As Integer
    Dim feuille As Sheet
    Dim nom As String
     
    i = 4
    'l'entête est en ligne 3
    Do Until Cells(i, 1).Value = ""
    'on va jusqu'au bout du tableau en considérant que la 1ère colonne est le nom de la ville
     
    nom = Cells(i, 1).Value
     
    Set feuillle = Sheets(nom)
     
    j = 2
    'on va boucler sur les colonnes
    Do Until j = 23
    'dernière colonne
    if cells(i,j).value="x" then feuille.cells(n° ligne, n° colonne).value=cells(3,j).value 'au lieu de X tu auras l'en t^te de la colonne
     
    j = j + 1
    Loop
    i = i + 1
    Loop
    End Sub
    Si tu ne veux rappatrier que les infos pour la ville axat tu peux faire.

    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
    Sub axat()
    dim plage as range
    dim trouve as range
    dim nligne as integer
     
    set plage=range("A3","A1000") 'tu recherche axat dans la colonne des villes
    set trouve=plage.find("Axat",plage.cells(1), xlValues, xlWhole, xlByColumns, xlNext)
    i=trouve.row
     
    j = 2
    'on va boucler sur les colonnes
    Do Until j = 23
    'dernière colonne
    if cells(i,j).value="x" then sheets("Axat").cells(n° ligne, n° colonne).value=cells(3,j).value 'au lieu de X tu auras l'en t^te de la colonne
     
    j = j + 1
    Loop
     
    end sub

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 47
    Par défaut
    Je viens d'essayer de trafiquer un peu mais toujours pas de résultats...
    Je souhaite juste rapatrier le nom des indicateurs qui sont les entêtes des colonnes.

    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 Axat()
    Dim plage As Range
    Dim trouve As Range
    Dim nligne As Integer
    Dim i As Integer
     
     
    Set plage = Range("A4", "A47") 'recherche axat dans la colonne des villes
    Set trouve = plage.Find("Axat", plage.Cells(1), xlValues, xlWhole, xlByColumns, xlNext)
    i = trouve.Row
     
    j = 2
    'on va boucler sur les colonnes
    Do Until j = 23
    'dernière colonne
    If Cells(i, j).Value = "x" Then Sheets("Axat").Cells(7, 2).Value = Cells(3, j).Value
    'au lieu de X tu auras l'en tête de la colonne
     j = j + 1
    Loop
     
    End Sub
    Je crois que c'est presque ca mais lorsque je lance le programme, le débogeur me dit "variable objet ou variable de bloc With non définie" et voici la ligne : i = trouve.Row

    i n'avait pas été défini donc je l'ai fait, et c'est bien un integer qu'il renvoit ??? Je pense que l'erreur doit venir de la.

    Merci

  6. #6
    Membre expérimenté
    Inscrit en
    Août 2009
    Messages
    284
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Août 2009
    Messages : 284
    Par défaut
    Si ça plante à cet endroit c'est qu'il ne trouve pas le nom de la ville il faut que dans la colonne A figure dans une des cases ou tu fais la recherche exactement Axat,
    j'ai tester ce code et il marche pour moi:
    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
    Sub Axat()
    Dim plage As Range
    Dim trouve As Range
    Dim nligne As Integer
    Dim i As Integer
     
     
    Set plage = Range("A4", "A47") 'recherche axat dans la colonne des villes
    Set trouve = plage.Find("Axat", plage.Cells(1), xlValues, xlWhole, xlByColumns, xlNext)
    If trouve Is Nothing Then
    MsgBox ("Il n'y a pas de ville appelée Axat dans le tableau")
    GoTo fin
    Else: i = trouve.Row
    End If
     
    j = 2
    a = 3 'premiere ligne ou tu veux ecrire le nom de l'indicateur
    'on va boucler sur les colonnes
    Do Until j = 23
    'dernière colonne
     
    If Cells(i, j).Value = "X" Then
    Sheets("Axat").Cells(a, 2).Value = Cells(3, j).Value
    a = a + 1
    End If
    'au lieu de X tu auras l'en tête de la colonne
     j = j + 1
    Loop
    fin:
    End Sub

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 20/06/2015, 10h18
  2. [XL-2007] Rechercher l'occurrence d'un mot situé dans un tableau sur une autre feuille (VBA).
    Par tontonTom dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/02/2015, 21h35
  3. Réponses: 5
    Dernier message: 25/09/2014, 08h16
  4. Réponses: 2
    Dernier message: 16/12/2011, 19h20
  5. [XL-2003] Reporter la valeur d'une textbox à un tableau de donné sur une autre feuille
    Par deamonRav dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 25/03/2010, 17h13

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