Ouvrir feuille à partir d'une textbox

Résolu
Mister-t -  
lermite222 Messages postés 9042 Statut Contributeur -
Bonjour,

Je suis vraiment un débutant dans la programmation VBA + Excel et j'ai un problème

Je voudrais copier des cellules de la feuille "PV" dans un autre classeur "dimensi.1998 a 2008" contenant plusieurs feuilles. De plus des feuilles seront crées dans quelques temps c'est pourquoi je voudrais que les cellules se copient en fonction du nom de la feuille ecrite dans une textbox "h.value". J'ai commencé à faire une macro. Pour la copie des cellules il n'y a pas de problème mais pour la sélection de la feuille a partir de la textbox, je n'y arrive pas. Je vous joins ma macro. Il est possible qu'il y est d'autres erreurs (le debogueur indique le problème à la ligne "h.value =...
Un petit coup de main n'est pas de refus.

Dim wbk1 As Workbook
Dim wbk2 As Workbook

Set wbk1 = ThisWorkbook
Set wbk2 = Workbooks.Open(FileName:="dimensi.1998 a 2008")

h.Value = wbk1.Sheets("PV").UserForm1.TextBox2.Value
x.Value = wbk1.Sheets("h.value").Range("K6").Value
y.Value = 4
z.Value = x.Value + y.Value

wbk2.Sheets("h.value").Cells(z.Value, 1) = wbk1.Sheets("PV").Cells(6, 11)
wbk2.Sheets("h.value").Cells(z.Value, 1).Activate
Configuration: Windows XP

4 réponses

  1. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    bonjour,
    Tu veux faire référence à quoi avec
    h.Value =
    x.Value =
    y.Value =
    z.Value
    et si possible met ta macro en entier
    A+
    0
    1. Mister-t
       
      Salut a toi
      h.value est pour moi la valeur de la textbox pour laquel l'utilisateur va ecrire dans le but de copier mes cellules sur la feuille portant le nom qu'il a ecrit
      x.value est la valeur d'une cellule que l'utilisateur va taper (ceci nécessaire pour definir la ligne de la copie)
      y.value est une valeur qui indique la copie des cellules sur la première ligne
      z.value est la somme de la valeur de x et y pour designer la ligne de copie des cellules

      pour resumer
      h.value est le nom de la feuille
      x.value est une ligne de départ pour copier coller les cellules
      y.value correspond a une ligne pour copier coller les cellules
      z.value est le chiffre issue de l'addition de la valeur de x et y
      Ma macro est entière je n'ai que ça
      0
  2. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    ta macro n'est pas entière, met la à partir de Sub... jusque End Sub
    parece que je ne vois pas où tu déclare tes h,x etc..
    Quel est le nom du textbox

    0
    1. Mister-t
       
      Pour le nom de la textbox c'est l'utilisateur qui va l'ecrire c'est pour ça que je ne mets pas une feuille de type wbk2.sheets("nom de la feuille")

      voila la macro

      Sub macro1()
      Dim wbk1 As Workbook
      Dim wbk2 As Workbook


      Set wbk1 = ThisWorkbook
      wbk1.UserForm1.TextBox2.Value = h.Value
      Set wbk2 = Workbooks.Open(FileName:="dimensi.1998 a 2008")

      x.Value = wbk1.Sheets("h.value").Range("K6").Value


      y.Value = 4

      z.Value = x.Value + y.Value


      wbk2.Sheets("h.value").Cells(z.value, 1) = wbk1.Sheets("PV").Cells(6, 11)
      wbk2.Sheets("h.value").Cells(z.value, 1).Activate

      Selection.Borders(xlDiagonalDown).LineStyle = xlNone
      Selection.Borders(xlDiagonalUp).LineStyle = xlNone
      Selection.Borders(xlEdgeLeft).LineStyle = xlNone
      Selection.Borders(xlEdgeTop).LineStyle = xlNone
      Selection.Borders(xlEdgeBottom).LineStyle = xlNone
      Selection.Borders(xlEdgeRight).LineStyle = xlNone
      Selection.Borders(xlInsideVertical).LineStyle = xlNone
      Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
      With Selection
      .HorizontalAlignment = xlCenter
      .VerticalAlignment = xlCenter
      .WrapText = False
      .Orientation = 0
      .ShrinkToFit = False
      .MergeCells = False
      End With
      Selection.Font.Bold = False
      With Selection
      .HorizontalAlignment = xlCenter
      .VerticalAlignment = xlCenter
      .WrapText = False
      .Orientation = 0
      .IndentLevel = 0
      .ShrinkToFit = False
      .MergeCells = False
      End With
      With Selection.Font
      .Name = "Times New Roman"
      .Size = 10
      .Strikethrough = False
      .Superscript = False
      .Subscript = False
      .OutlineFont = False
      .Shadow = False
      .Underline = xlUnderlineStyleNone
      End With
      Selection.Font.ColorIndex = 0

      End Sub
      0
  3. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Bon, il n'y a aucune déclaration concernant tes variables..
    mais pour t'aiguillé il faut d'abors savoir le NOM DE LA TEXTBOX (pas ce qu'il y aurra dedant)
    voir dans Propriétés >> Name = ? : C'est avec ce nom que tu peu travailler
    Pour le nom de la textbox c'est l'utilisateur qui va l'ecrire Ca ce serra le nom du classeur ?
    0
  4. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    commence par déclarer tes variables
    Sub macro1()
    Dim wbk1 As Workbook
    Dim wbk2 As Workbook
    dim H as string
    Dim X as integer, Y as integer, Z as integer

    Pour avoir le nom de la feuille à employer qui se trouve dans ton textbox..
    H=textBox1.text

    Mais tu devras faire une détection d'erreur , le plus simple serrait de remplir un combobox
    avec tout les noms de fichier. Pour ouvrir un fichier du DD il faut avoir le chemin + le nom (exact) + l'extention (.xls)
    Ex C:\MonRepertoir\LeFichier.xls
    Ce serrait plus simple si tu montrais ton classeur..
    Tu le copie sur
    https://www.cjoint.com/
    et tu donne le lien dans le poste suivant.
    0
    1. Mister-t
       
      salut a toi et merci pour ce debut de reponse

      cependant je ne peux pas faire de combobox et lister toutes les feuilles car celle-ci seront crées l'année prochaine et je ne connais pas le nom quelles porteront. De ce fait la combobox est inutile a mon sens.

      Le but recherché est que lorsque la feuille est crée par l'utilisateur, la macro puisse fonctionner correctement avec n'importe quel nom de feuille. Toutefois je pense que les feuilles s'appelleront "2009","2010", etc...

      pour le nom de la textbox c'est tous simplement textbox2

      Pour la publication des classeurs, je ne peux pas puisque c'est des documents appartenant a l'entreprise d'ou interdiction

      Debut de modif de la macro: erreur 9 indice en dehors de la plage

      Sub macro1()
      Dim wbk1 As Workbook
      Dim wbk2 As Workbook
      Dim h As String
      Dim x, y, z As Integer


      Set wbk1 = ThisWorkbook
      h = UserForm1.TextBox2.Text
      Set wbk2 = Workbooks.Open(FileName:="dimensi.1998 a 2008")

      x = wbk1.Sheets(h).Range("K6").Value


      y = 4

      z = x + y


      wbk2.Sheets(h).Cells(z, 1) = wbk1.Sheets("PV").Cells(6, 11)
      wbk2.Sheets(h).Cells(z, 1).Activate

      Selection.Borders(xlDiagonalDown).LineStyle = xlNone
      Selection.Borders(xlDiagonalUp).LineStyle = xlNone
      Selection.Borders(xlEdgeLeft).LineStyle = xlNone
      Selection.Borders(xlEdgeTop).LineStyle = xlNone
      Selection.Borders(xlEdgeBottom).LineStyle = xlNone
      Selection.Borders(xlEdgeRight).LineStyle = xlNone
      Selection.Borders(xlInsideVertical).LineStyle = xlNone
      Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
      With Selection
      .HorizontalAlignment = xlCenter
      .VerticalAlignment = xlCenter
      .WrapText = False
      .Orientation = 0
      .ShrinkToFit = False
      .MergeCells = False
      End With
      Selection.Font.Bold = False
      With Selection
      .HorizontalAlignment = xlCenter
      .VerticalAlignment = xlCenter
      .WrapText = False
      .Orientation = 0
      .IndentLevel = 0
      .ShrinkToFit = False
      .MergeCells = False
      End With
      With Selection.Font
      .Name = "Times New Roman"
      .Size = 10
      .Strikethrough = False
      .Superscript = False
      .Subscript = False
      .OutlineFont = False
      .Shadow = False
      .Underline = xlUnderlineStyleNone
      End With
      Selection.Font.ColorIndex = 0

      End Sub
      0
      1. Mister-t > Mister-t
         
        C'est mon dernier post car mon problème est résolu

        Merci a toi Lermite222 pour m'avoir mis sur la voie.
        J'ai juste fais quelques manip sur la macro et hop le tour est joué

        Pour ceux que cela interesse je laisse ma macro

        Sub macro1()
        Dim wbk1 As Workbook
        Dim wbk2 As Workbook
        Dim h As String
        Dim x, y, z As Integer


        Set wbk1 = ThisWorkbook
        h = UserForm1.TextBox2.Text
        x = Cells(6, 11).Value
        Set wbk2 = Workbooks.Open(FileName:="dimensi.1998 a 2008")

        y = 4
        z = x + y


        wbk2.Sheets(h).Cells(z, 1) = wbk1.Sheets("PV").Cells(6, 11)

        Selection.Borders(xlDiagonalDown).LineStyle = xlNone
        Selection.Borders(xlDiagonalUp).LineStyle = xlNone
        Selection.Borders(xlEdgeLeft).LineStyle = xlNone
        Selection.Borders(xlEdgeTop).LineStyle = xlNone
        Selection.Borders(xlEdgeBottom).LineStyle = xlNone
        Selection.Borders(xlEdgeRight).LineStyle = xlNone
        Selection.Borders(xlInsideVertical).LineStyle = xlNone
        Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
        With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
        .WrapText = False
        .Orientation = 0
        .ShrinkToFit = False
        .MergeCells = False
        End With
        Selection.Font.Bold = False
        With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
        .WrapText = False
        .Orientation = 0
        .IndentLevel = 0
        .ShrinkToFit = False
        .MergeCells = False
        End With
        With Selection.Font
        .Name = "Times New Roman"
        .Size = 10
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        End With
        Selection.Font.ColorIndex = 0

        End Sub
        0
      2. lermite222 Messages postés 9042 Statut Contributeur 1 199 > Mister-t
         
        Tant mieux si ton problème est résolu mais tu a encore une petite faute,
        Dim x, y, z As Integer 'C'est pas suffisant.. faut faire
        Dim x as integer, y As Integer, z As Integer
        A+
        0