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

Statistiques des forums

Discussions
314 450
Messages
2 109 730
Membres
110 553
dernier inscrit
loic55