|
|
|
|
[Excel VBA]Tranfert de valeurs
Dernière réponse le 17 aoû 2006 à 13:48:50 ks13, le 9 aoû 2006 à 13:30:19Bonjour,
J'ai plusieurs feuilles contenant des chiffres de tous genres, et j'ai une feuille qui les regroupe tous. Les differentes feuilles servent, comme vous l'aurez compris a faciliter l'edition de ces chiffres. Quant a la page les regroupant, elle est utilisee comme une sorte de base de donnee pour un site. Voila le contexte. Le probleme est que je n'ai jamais touche a VBA et que pour eviter de grosses pertes de temps avec l'editions des chiffres, je voudrais creer une macro qui regroupe automatiquement tous ces chiffres. J'ai cherche sur le net, et j'ai reussi a creer une petite macro de test. Mais pendant les tests l'editeur de macros me dit que ma commande pour assigner une valeur a une cellule n'est pas valide. Voila la macro :
Sub test()
Set Sheet = ActiveWorkbook.ActiveSheet
Dim listePartenaires As Variant
listePartenaires = Array("feuille1", "feuille2", "feuille3", "feuille4", "feuille5", _
"feuille6", "feuille7", "feuille8", "feuille9", "feuille10", "feuille11")
For i = 0 To 10
Sheet.Range("A" & i).Select
Sheet.Selection.Value = listePartenaires(i)
Next i
End Sub
Comme je debute en VBA, et que j'ai a peu pres suivi les indications de certains sites, je ne vois pas trop bien ou j'ai commis une ou des erreurs. Et si possible je voudrais savoir si il est possible d'avoir une variable egale au nombre d'arguments du tableau, un peu comme nbarg = myArray.Argumets.Length en javascript. Merci d'avance.
Configuration: Microsoft Office Excel 2003
Ok, je viens de trouver mon erreur : il me manque la declaration de la variable Sheet. Avec ceci resolu je vais pouvoir avancer un peu. Je voudrais par contre savoir s'il est possible de verifier le nombre d'arguments d'un Array, comme je l'ai demande plus haut, ceci m'aiderais beaucoup dans le developpement de la macro. Merci |
Hello ks13,
|
Okay....a vrai dire le probleme du i = 0 a ete resolu aussi, c'est pas moi qui l'ai trouve apres avoir precipitament poste sur le forum, mais un ami qui est venu m'aider un peu apres que j'ai poste....
|
Comme je ne suis pas sûr de bien comprendre, il se peut que je réponde à côté de la plaque...
Dim NbrF As Integer Dim TabF(50) As String Dim Feuille As Worksheet NbrF = 0 For Each Feuille In Worksheets If Feuille.Name <> "Récap" Then NbrF = NbrF + 1 TabF(NbrF) = Feuille.Name End If NextJ'utilise, en début de module, Option Base 1, qui permet d'indicer le tableau en partant de la valeur 1 et non pas zéro. Le tableau des noms de feuilles est dimensionné à 50. On le remplit avec le nom des feuilles existantes autres que Récap (nom à adapter), et NbrF contient le nombre de feuilles stockées en table. Pour ta question idType(i) = Range("A" & i).Value, je ne comprends pas bien le PB. Ça te donne la valeur de la cellule Ai. mais que veux-tu obtenir exactement ? |
Alors,
|
Pour aider, pourrais-tu éventuellement mettre un exemple de classeur, avec au moins 1 ou 2 modèles de feuilles détail, et idem pour la feuille récap.
|
Oki, voici le fichier. pour info, il a ete tres, tres lourdement allegé ^^
|
Hello ks13,
|
O_O O_o ¬_¬;;
|
Ooops, j'ai mis trop de temps pour ecrir la modification de mon dernier message u_u;
|
Répondre à ks13
|
Voici ce que j'utilise pour le nom de la feuille, j'ai du supprimmer les "/" car le programme les accepte pas dans les noms des feuilles
|
Ooops, il me semble qu'il y a eu un melange de messages o_O
|
Alors, voici le code tel quel dans le fichier, desole mais je ne peut pas montrer le fichier original, normalement je n'aurais meme pas du montrer l'autre, meme s'il a ete allege et modifié ^^;. par consequent je ne peut que mettre le code de la macro.
|
Je pense que le PB se situait au niveau de la sélection des feuilles partenaires. En travaillant par exclusion, il y a une feuille "non partenaire" qui a dû être sélectionnée à tort et qui a mis le souk.
For Each Feuille In Worksheets
Select Case Feuille.Name
Case "BF", "DisL", "DisM", "DisR", "Med", "Fin"
Feuille.Activate
NbrLig = Feuille.Cells(65536, 1).End(xlUp).Row
Feuille.Range(Cells(1, 1), Cells(NbrLig, 1)).EntireRow.Copy
Sheets("Global").Activate
Cells(NumLig, 1).Select
ActiveSheet.Paste
NumLig = NumLig + NbrLig
End Select
NextTu peux remplacer ce bout de code.
Par ailleurs, on peut simplifier le calcul de la définition de la date : 'On definit la date au format jj-mm-aaaa pour dater la feuille generale Dim fdate As String fdate = "ImportRate_" & Mid(Date, 1, 2) & "-" & Mid(Date, 4, 2) & "-" & Mid(Date, 7) 'Fin definitionEssaie et vois si c'est mieux. A+ |
En fait, j'y ais deja pensé mais, le probleme c'est qu'il se peut qu'on ajoute d'autres feuilles sur lequelles prelever des donees et le programme doit les reconnaitre aussi, or comme avec cette idee il fo modifier la macro, donc ajouter les nouvelles feuilles manuellement, je ne pense pas que c'est une aussi bonne idee....mais, est-ce qu'il est possible de faire un truc comme :
|
Je suggère autre chose. Comme pour tout ensemble à définir, on a 2 solutions :
Select Case Feuille.Name Case "BF", "DisL", "DisM", "DisR", "Med", "Fin" ..... End Selectpar If Left(Feuille.Name, 2) = "P-" Then ..... End IfEst-ce que ça t'irait ? |

