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
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
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
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!