VBA Echange données tableau fixe/tableau variable
Bonjour le forum
Là je souffre il est 2 h du mat
Il s'agit d'echanger des données entre un tableau contenant des données variables pour les envoyer dans un tableau
contenant des données figées
le lien entre les Deux tableaux est le n° d'agence
Le mieux est de voir le fichier explicatif
Merci de l'aide
Bisous
Cordialement
Muriel
Bonsoir,
Voici une proposition pour te dépanner :
Sub MAJ()
'Pour le 1er tableau, à répéter pour les 30 tableaux, changer les plages
Call MAJ_Tablo(Feuil1.Range("V1:V18"), Feuil1.Range("L22:L31"))
End Sub
Sub MAJ_Tablo(pTab1 As Range, pTab2 As Range)
'pTab1 est la plage contenant les agences dans la colonne V
'pTab2 est la plage contenant les agensces dans la colonne L
Dim c1 As Range, c2 As Range
For Each c1 In pTab1
For Each c2 In pTab2
If c2 = c1 Then
'on additionne les effectifs
c1.Offset(0, 2) = c1.Offset(0, 2) + c2.Offset(0, 1)
End If
Next c2
Next c1
End SubNote : la macro n'est pas optimisée si tes tableaux ont plusieurs (centaines de) lignes et risque de prendre plusieurs secondes à rouler. Il y a moyen de faire mieux mais en 5 minutes c'est tout ce que je peux offrir pour l'instant.
A+
bonjour le forum
Bonjour Grand Chaman ==> bisous
Bravo, génial et tu as fais ça en 5 minutes, bigre
Du coup forte de tes enseignements ( j'ai apprécié tes commentaires) j'ai rajouté
1) l'analyse des champs Caht, intérims, et le transfert des données et ca marche
2) une cellule de calcul pour lancer la procédure
3) un tableau des plages des nombreux tableaux identiques ' environ 30)
Là il et 2h suis naze je bloque sur le renvois des plages à cause d'un "vilain"
mais malgé ce vilain grace à vous je progresse bien, je m'attendais pas 3 semaines découverte de VBA à comprendre les programmes et à en construire.
Merci à tous de m'aider pour finir cette procédure, suit la procédure et le fichier explicatif
bisous
Cordialement
Muriel
ps Gd Chaman j'ai vu ton site j'y reviendrai
Sub MAJ()
'Pour les emplacements servant à répéter pour les 30 tableaux
Call MAJ_Tablo(Feuil1.Range("$D$15"), Feuil1.Range("$F$15"), Feuil1.Range("C17:C24"))
End Sub
' D12 cellule de calcul lance la procédure
Sub MAJ_Tablo(pTab1 As Range, pTab2 As Range, pTab3 As Range)
'pTab1 est la plage contenant les agences dans la colonne V
'pTab2 est la plage contenant les agences dans la colonne L
Dim c1 As Range, c2 As Range, c3 As Range, c4 As Integer
If Range("$D$12") = 1 Then
For c4 = 1 To 10
Range("$C$15").Formula = c4
For Each c3 In pTab3
Range("$A$15").Formula = c3
If c3 = c4 Then
'Selection de la première "plage" de tableaux à mettre en D15 et F15
c4.Offset(0, 1) = c3.Offset(0, 1)'problème avec c4 => qualificateur incorrect ??
c4.Offset(0, 3) = c3.ofsset(0, 3)
End If
For Each c1 In pTab1
For Each c2 In pTab2
If c2 = c1 Then
'on additionne les effectifs, les caht, les intérims
c1.Offset(0, 2) = c1.Offset(0, 2) + c2.Offset(0, 1)
c1.Offset(0, 4) = c1.Offset(0, 4) + c2.Offset(0, 2)
c1.Offset(0, 6) = c1.Offset(0, 6) + c2.Offset(0, 3)
End If
Next c2
Next c1
Next c3
Next c4
' Pour que le compteur pointe la première plage de tableaux
c4 = 1
End If
End Sub
Bonsoir,
Je n'ai malheureusement pas beaucoup de temps ce soir alors je te donne une piste pour commencer. J'y reviendrai demain probablement.
Tu ne peux pas utiliser .offset avec c4 car c4 est défini comme une variable de type "Integer" (0,1,2,....).
.Offset fonctionne uniquement avec des variables de types "Range" et ça permet de décaler de x lignes, y colonnes (.offset(x,y)).
c4.Offset(0, 1) = c3.Offset(0, 1)'problème avec c4 => qualificateur incorrect ??
c4.Offset(0, 3) = c3.ofsset(0, 3)A vérifier...
Edit : Finalement j'ai eu un peu de temps pour regarder ton code. J'ai conservé ton principe de nommer les plages mais j'ai corrigé la macro pour que ça fonctionne.
PS : Pour mon site, c'est encore embryonnaire et plus un passe-temps pour le moment. Tant mieux si tu y trouves des infos utiles...
bonjour le forum
bisous gd Chaman
Genial ca marche super
Sache que j'ai pensé que c4 declaré integer ne convenait pas aussi et j'ai pensé utiliser une astuce en declarant c4 for Each identique à c3 et ca marche mais de façon bizare (perte de temps de c3 qui attend c4 aprés Next c3) car il faudrait que je puisse déclarer en même temps Next c4, c3 et ça je pense que ce n'est pas possible ?? M'enfin je cherche plus...
Aussi; je vais intégrer ton dernier programme dans le projet apres avoir ajouté le déclenchement par une cellule de calcul
Merci pour tout c'est super...
Gros bisous
A bientôt
Cordialement
Muriel