Copiage de cellule dans une sheet appelée par une variable

perenthian

XLDnaute Nouveau
Bonjour,

je débute en VBA et je séché sur ce code> Je vais essayer de le commenter afin de vous faire voir ce que je veux faire et le problème auquel je suis confronte.
Le voici :

Code:
Sub resultats()

'Creation d'une nouvelle sheet nommée resultats
Dim shtoto As Worksheet
Set shtoto = Sheets.Add(After:=Sheets("Tous_fichiers"))
shtoto.Name = "resultats"

  Dim onglet As Worksheet
 
'Remplissage de la sheet aux cellules A1 A3 - méthode pas maligne mais due a des modifications de 'raisonnement, mais ca marche
  For Each onglet In Worksheets
  Application.DisplayAlerts = False
        If onglet.Name = "resultats" Then onglet.Range("A1") = "Hs"
        If onglet.Name = "resultats" Then onglet.Range("A3") = "m"
        
'Comptage du nombre de ligne non vide d'une autre sheet
        Sheets("Tous_fichiers").Select
        Range("A1").Select
        Do While Not (IsEmpty(ActiveCell))
            Line = Line + 1
            Selection.Offset(1, 0).Select
        Loop

'Recuperation d'une variable indic qui se trouve être le nom changeant d'un onglet
        For lgn = 2 To Line
        Sheets("Tous_fichiers").Select
        indic = Cells(lgn, 1).Value
        
'Remplissage de colonne de la sheet resultat a partir d'une colonne de la sheet Tous_fichiers -> ça marche
        Sheets("resultats").Range("A" & lgn + 2) = Sheets("Tous_fichiers").Range("B" & lgn).Value
        
'Remplissage d'une cellule de la sheet resultat a partir d'une cellule de la sheet Tous_fichiers -> ça marche
        Sheets("resultats").Range("L" & lgn + 2) = Sheets("Tous_fichiers").Range("H46").Value / 9810

'Remplissage de colonne de la sheet resultat a partir d'une cellule des tous les sheet indic -> le code bug 'mais les résultats s’affichent quand meme dans excel
        Sheets("resultats").Range("M" & lgn + 2) = Sheets(indic).Range("H47").Value / 9810
        
'meme chose que précédemment
        Sheets("resultats").Range("V" & lgn + 2) = Sqr((Sheets(indic).Range("H22").Value) ^ 2 + (Sheets(indic).Range("H26").Value) ^ 2) / 9810
        
        Next lgn

        Cells.HorizontalAlignment = xlCenter
        Cells.EntireColumn.AutoFit

  Next
  Application.DisplayAlerts = True
  
Sheets("resultats").Select

End Sub

Voila je ne sais pas d’où provient le problème...
Merci
 

perenthian

XLDnaute Nouveau
Re : Copiage de cellule dans une sheet appelée par une variable

Bon je me réponds a moi même...
J'ai voulu modifier mon bout de code "pas malin" pour que ce soit plus propre, et hoo miracle ça marche !
Le code ci-dessous.

Par contre, si quelqu'un peut m'expliquer la boulette de celui d'avant...

Code:
Sub resultats()

Dim shtoto As Worksheet
Set shtoto = Sheets.Add(After:=Sheets("Tous_fichiers"))
shtoto.Name = "resultats"

Sheets("resultats").Select
    Range("A1") = "Hs"
    Range("A3") = "m"
        
    Sheets("Tous_fichiers").Select
    Range("A1").Select
    Do While Not (IsEmpty(ActiveCell))
        Line = Line + 1
        Selection.Offset(1, 0).Select
    Loop

    For lgn = 2 To Line
    Sheets("Tous_fichiers").Select
    indic = Cells(lgn, 1).Value
        
    Sheets("resultats").Range("A" & lgn + 2) = Sheets("Tous_fichiers").Range("B" & lgn).Value
    Sheets("resultats").Range("L" & lgn + 2) = Sheets(indic).Range("H46").Value / 9810
    Sheets("resultats").Range("M" & lgn + 2) = Sheets(indic).Range("H47").Value / 9810
        
    Next lgn

Sheets("resultats").Select
Cells.HorizontalAlignment = xlCenter
  
Sheets("resultats").Select

End Sub
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Copiage de cellule dans une sheet appelée par une variable

Bonjour Perenthian et bienvenu, bonjour le forum,

Une autre méthode :
Code:
Sub Macro1()
Dim dl As Integer 'déclare la variable dl (Dernière Ligne)
Dim indic As String 'déclare la variable indic (nom d'onglet)
Dim i As Integer 'déclare la variable i (incrément)

Sheets.Add after:=Sheets("Tous_fichiers") 'ajoute un onglet après l'onglet "Tous_fichiers"
ActiveSheet.Name = "resultats" 'nomme le nouvel onglet
Range("A1") = "Hs" 'place Hs en A1
Range("A3") = "m" 'place m en A3
With Sheets("Tous_fichiers") 'prend en compte l'onglet "Tous_fichiers"
    dl = .Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée de la colonne A
    For i = 2 To dl 'boucle de 2 à la dernière ligne éditée dl
        indic = .Cells(i, 1).Value 'définit la variable indic
        Sheets("resultats").Cells(i + 2, 1).Value = .Cells(i, 2).Value 'récupère la valeur de la cellule
        Sheets("resultats").Cells(i + 2, 12).Value = CDbl(Sheets(indic).Range("H46").Value) / 9810 'place la valeur de H46 (convertie en Double) divisée par 9810
        Sheets("resultats").Cells(i + 2, 13).Value = CDbl(Sheets(indic).Range("H47").Value) / 9810 'place la valeur de H47 (convertie en Double) divisée par 9810
    Next i 'prochaine ligne de la boucle
End With 'fin de la prise en compte de l'onglet "Tous_fichiers"
With Sheets("resultats") 'prend en compte l'onglet "resultats"
    .Cells.HorizontalAlignment = xlCenter 'centrage horizontal de toutes les cellules de l'onglet
    .Select 'sélectionne l'onglet
End With 'fin de la prise en compte de l'onglet "resultats"
End Sub
 

Discussions similaires