Mettre en place un tableau à deux dimension

Bonjour,

A partir du fichier de base "donnees" le code va récapituler les infos. et les renvoyer dans le fichier "program" en indiquant combien de société différente sont à tel ou tel endroit à tel ou tel année. bref jusque là c'est parfait, il le fait très bien!

Seulement maintenant j'aimerais pré-configurer certain nom de ville : par exemple si paris vient à s'afficher dans le fichier "program" je voudrais que la colonne 'X' , 'L' et 'T' prennent des valeurs que j'aurais prédéfini moi même dans le code VBA.

Pour ce faire j'aimerais déclarer un tableau à deux dimensions dans le code vba du fichier de base ("donnees") et lui dire que si par exemple 'Paris' est renvoyé au fichier 'program' et à la feuille "data" alors mettre tel valeur à la colonne X, L et T...

j'avais déjà réussi à faire cela en utilisant le code suivant :

Dim table(1 To 100, 1 To 4) As Variant

 table(1, 1) = "paris"
 table(1, 2) = "NI"
 table(1, 3) = 0
 table(1, 4) = 0

 '... CODE ...

 With Workbooks("program").Worksheets("data")
     Set cell_ori = .Range("A1")
     For i = 1 To UBound(table)
         For j = 1 To .Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row
              If table(i, 1) = cell_ori.Offset(j, 0) Then

                 cell_ori.Offset(j, 1) = table(i, 2)
                 cell_ori.Offset(j, 2) = table(i, 3)
                 cell_ori.Offset(j, 3) = table(i, 4)

            End If
         Next j
     Next i
 End With

mais c'était avec d'autres variables et desormais je n'arrive plus à l'intégrer à nouveau dans le code du fichier "donnes" actuel.

si quelqu'un pourrait me l'intégrer dans le code du fichier "donnees" afin qu'il devient fonctionnel ce serait impecable!!

Merciii

8donnees.zip (18.74 Ko)
11program.zip (20.69 Ko)

Bonjour,

C'est quoi les valeurs que tu veux renvoyer ? Elles sont propre à chaque villes ?

Hervé.

Oui , exactement j'ai 3 valeurs à définir pour chaque ville,

ce sera des valeurs bien définies que moi même je donnerais pour chacune des villes , c'est d'ailleurs pour ça que l'idée du tableau a deux dimension est parfait pour cela :

table(1, 1) = "paris" ==> si la premiere ligne premiere colonne est paris

table(1, 2) = "NI" ==> alors à la premiere ligne et a la deuxieme colonne il y aura marqué "NI"

table(1, 3) = 0 ==> puis la valeur 0 à la troisieme colonne

table(1, 4) = 0 ==> et 0 à la colonne 4

Re,

Tu pourrais utiliser une feuille cachée où tu entrerais les différentes valeurs pour chaque ville en colonne A le nom de la ville, en colonne B le code de la ville, en colonne C et D les valeurs, ensuite, tu nomme cette plage disons "ListeVilles" (sélection de la plage et dans la zone de nom tu inscris ListeVilles puisappuis sur la touche Entrée) que tu affecte ensuite au tableau en début de code plutôt que de le remplir dans le code, enfin, c'est une idée ! Voir l'exemple ci-dessous :

Sub Tableau()

    Dim Tbl As Variant
    Dim Plage As Range
    Dim Cel As Range
    Dim Adr As String
    Dim I As Integer

    With Worksheets("Feuil1")

        'en colonne B à partir de B2
        Set Plage = .Range(.Cells(2, 2), .Cells(.Rows.Count, 2).End(xlUp))

    End With

    'dim 1 les lignes
    'dim 2 les colonnes
    Tbl = Range("ListeVilles")

    'boucle sur le tableau
    For I = 1 To UBound(Tbl, 1)

        'recherche les noms de villes correspondants
        Set Cel = Plage.Find(Tbl(I, 1), , xlValues, xlWhole)

        'si trouvé, mémorise l'adresse et boucle en inscrivant
        'les valeurs inscrites dans la plage nommée qui correspondent
        'à la ville en cours
        If Not Cel Is Nothing Then

            Adr = Cel.Address

            Do

                Cel.Offset(0, 1) = Tbl(I, 2)
                Cel.Offset(0, 2) = Tbl(I, 3)
                Cel.Offset(0, 3) = Tbl(I, 4)

                Set Cel = Plage.FindNext(Cel)

            Loop While Adr <> Cel.Address

        End If

    Next I

End Sub

Hervé.

Merci pour l'idée !

j'ai suivi ton idée , j'ai mis dans la feuil2 du fichier "donnees" le nom des villes associés à leur caracréristiques ....

ensuite j'ai maqué cette "feuil2"

j'ai essayé d'intégrer ce code dans le fichier "donnees" (cf ce que j'ai fais dans le code de la piece jointe au niveau VBA) et là impossible d'executer ce code code sans probleme!

Si quelqu'un pourrait remédier à cela SVP....

MERCIIII

7donnees.zip (19.66 Ko)

Peut tu me faire une petite démonstration de ce que tu me dit stp avec n'importe quel valeurs pour les caractéristiques...

je n'arrive pas à intégrer ton code de tableau au code original du fichier "donnees"

mercii

Bonjour Theze,

pouvez vous vérifier ce que j'ai fait svp ,

j'ai bien nommé la plage "listeville" à la feuille 2 (voir image "listeville") puis mis le code du tableau en début du code mais lors de l'execution il me différencies 2 macros comme dans l'image "probleme execution" et lorsque j'éxecute ça me remplis pas les colonnes X , L et T du fichier 'program'.

pouvez vous m'aider svp pour pouvoir y remédier

probleme execution codeville
4donnees.zip (20.85 Ko)
5program.zip (21.04 Ko)

Bonjour,

Je n'ai pas trop de temps maintenant, mais la plage "ListeVilles" doit englober aussi les valeurs qui lui sont attachées c'est à dire, que dans ton exemple, la plage doit aller de A2 à D5 de façon à récupérer toutes les valeurs dans le tableau où elles sont ensuite distribuées dans la partie de code suivante correspondant à la ville trouvée :

Cel.Offset(0, 1) = Tbl(I, 2)
Cel.Offset(0, 2) = Tbl(I, 3)
Cel.Offset(0, 3) = Tbl(I, 4)

Hervé.

bonjour ,

mais le code :

Sub Tableau()

    Dim Tbl As Variant
    Dim Plage As Range
    Dim Cel As Range
    Dim Adr As String
    Dim I As Integer

        With Worksheets("Feuil2")

        'en colonne B à partir de B2
        Set Plage = .Range(.Cells(2, 2), .Cells(.Rows.Count, 2).End(xlUp))

    End With

    'dim 1 les lignes
    'dim 2 les colonnes
    Tbl = Range("listeville")

    'boucle sur le tableau
    For I = 1 To UBound(Tbl, 1)

        'recherche les noms de villes correspondants
        Set Cel = Plage.Find(Tbl(I, 1), , xlValues, xlWhole)

        'si trouvé, mémorise l'adresse et boucle en inscrivant
        'les valeurs inscrites dans la plage nommée qui correspondent
        'à la ville en cours
        If Not Cel Is Nothing Then

            Adr = Cel.Address

            Do

                Cel.Offset(0, 1) = Tbl(I, 2)
                Cel.Offset(0, 2) = Tbl(I, 3)
                Cel.Offset(0, 3) = Tbl(I, 4)

                Set Cel = Plage.FindNext(Cel)

            Loop While Adr <> Cel.Address

        End If

    Next I

End Sub

tu le met où exactement?

dans le fichier "donnees" ? ou dans le fichier 'program'?

Bonjour,

Tu le mets dans un module standard du classeurs "données" là où se trouve la feuille cachée et la feuille où tu souhaite inscrire les valeurs.

Hervé.

Merci beaucoup

pb résolu!

Rechercher des sujets similaires à "mettre place tableau deux dimension"