Passage de paramètre

Passage de paramètre - VB/VBA/VBS - Programmation

Marsh Posté le 18-04-2007 à 11:28:08    

Bonjour,  
J'ai créé une macro qui pour un fichier Excel donné (le fichier courant) crée une référence pour chaque cellules sélectionnées.
J'explique: j'ai un fichier source avec plein de cellules..je sélectionne les cellules pour lesquelles je veux créer un lien, je crée un fichier ds lequel je vais mettre le contenu des cellules sélecionnées et dc des liens. Comme ça qd je modifie le fichier de lien ça modifie automatiquement le fchier source. Tout march ebien sauf que maintenant je veux améliorer cette macro.
Je voudrais tout simplement que l'utilisateur entre le nom du fichier qui va être créé pour contenir les liens...et je galère! Visiblement il y a juste une problème qd je passe le paramètre (qui est le nom du fichier créé pour les liens) je vous montre le code:

Code :
  1. //ça c'est le userform pour entrer entre autre le nom du fichier à créer: Textbox1.value
  2. Private Sub CommandButton1_Click()
  3.     Dim path As String
  4.     Dim activeWB As String
  5.     Dim activeSheet As String
  6.     Static wbExcel As Excel.Workbook
  7.     Static wsExcel As Excel.Worksheet
  8.     CommandButton1.Caption = "OK"
  9. //là je récupère le nom du fichier et de la feuille courante
  10.     activeWB = Application.ActiveWorkbook.name
  11.     activeSheet = Application.ActiveWorkbook.activeSheet.name
  12.     currentPath = Application.ActiveWorkbook.path   
  13.     isExistDirectory
  14.     If (TextBox1.Value = "" Or (CheckBox3.Value = False And CheckBox4.Value = False)) Then
  15.         MsgBox "Please fill all fields!"
  16.        
  17.     ElseIf (CheckBox4.Value = True) Then
  18.         filename = TextBox1.Value
  19.         full_name = filename & ".xls"
  20.         //création du fichier
  21.         Set wbExcel = Workbooks.Add
  22.         path = currentPath & "\Links\" & full_name
  23.         wbExcel.SaveAs (path)
  24.        
  25.         Set wsExcel = wbExcel.Worksheets(1)
  26.         wsExcel.name = filename
  27. //je me replace ds le fichier source et j'appelle ma fonction avec en paramètre le nom du fichier créé
  28.         Application.Workbooks(activeWB).Worksheets(activeSheet).Activate
  29.         replace_by_link_normalCells (wbExcel.name)
  30.         Unload Userform1


et voici le code de ma fonction:

Code :
  1. Sub replace_by_link_normalCells(full_name As String)
  2. Dim Mycell As Range, Mysheet As Worksheet, MyName$
  3. Dim Row, Column As Integer
  4. MysheetName = ActiveWorkbook.activeSheet.name
  5. MyWorkBookName = ActiveWorkbook.name
  6. Application.Workbooks(MyWorkBookName).Sheets(MysheetName).Select
  7. For Each Mycell In Selection
  8.     MyName = Mycell.Value
  9.     MyRow = Mycell.Row
  10.     MyColumn = Mycell.Column
  11.     If MyName <> "" Then
  12.         Application.Workbooks(full_name).Worksheets(1).Activate
  13.         Range("A1" ).Select
  14.         Selection.Range("A65536" ).End(xlUp).Offset(1, 0).Value = Mycell.Value
  15.         Linkrow = Selection.Range("A65536" ).End(xlUp).Offset(1, 0).Row
  16.         LinkColumn = Selection.Range("A65536" ).End(xlUp).Offset(1, 0).Column
  17.    
  18.         Application.Workbooks(MyWorkBookName).Sheets(MysheetName).Activate
  19.         Cells(MyRow, MyColumn).Select
  20.         Row = Linkrow - MyRow - 1
  21.         Column = LinkColumn - MyColumn
  22.         ActiveCell.FormulaR1C1 = "=[full_name]full_name!R[" & Row & "]C[" & Column & "]"
  23.     End If
  24. Next Mycell
  25. End Sub


Et en fait qd j'execute ça y'a une boite de dialogue windows qui s'ouvre comme pour enregistrer le fichier ms c'est pour mettre à jour "full_name" apparement. La boîte s'intitule "Update full_name et je dois séletioner un fichier Excel. Donc je pense qu'il ne sais pas que full_name est static...ou alors c le passage de paramètre qui est faux il ne faut peut-être pas mettre full_name" as string...
Si vous avez compris mon explication et que vous avez la solution merci de me le dire!!!
Bonne journée.

Reply

Marsh Posté le 18-04-2007 à 11:28:08   

Reply

Marsh Posté le 18-04-2007 à 13:37:38    

Essayer en remplaçant :

       ActiveCell.FormulaR1C1 = "=[full_name]full_name!R[" & Row & "]C[" & Column & "]"

par :

       ActiveCell.FormulaR1C1 = "=[" & full_name & " ]" & "!R[" & Row & "]C[" & Column & "]"


Message édité par olivthill le 18-04-2007 à 13:38:06
Reply

Marsh Posté le 18-04-2007 à 13:44:55    

Je ne comprends pas ton problème
Tu expliques plein de trucs mais où est le problème ?

 

Pourquoi dis-tu « qu'il ne sait pas que full_name est Static » ? Ça veut dire quoi pour toi ? full_name n'est pas Static dans replace_by_link_normalCells() et pas déclaré dans CommandButton1_Click()

 

C'est le contenu du paramètre full_name qui est faux à l'exécution?
As-tu lancé ta macro en pas-à-pas ?

 

edit: olivthill a peut-être bien vu


Message édité par tegu le 18-04-2007 à 13:46:05
Reply

Marsh Posté le 18-04-2007 à 14:58:54    

Bon désolée je voulais être précise avec mes détails ms je vois que ça a  l'effet inverse...
En fait j'ai l'impression que le "full_name" change aors qu'il ne devrait pas, c'est une valeur qui doit rester fixe pdt toute la procédure.

Reply

Marsh Posté le 18-04-2007 à 16:06:41    

Eh oui, communiquer des idées n'est pas simple :)
 
Ce qu'il faut c'est exécuter ta macro en mode pas-à-pas pour connaître les valeurs successives de full_name, avec l'ajout d'espions conditionnels éventuellement, poser des points d'arrêt, etc.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed