Transfert de Valeurs EXCEL/VBA

holaaaa -  
LePierre Messages postés 249 Statut Membre -
Bonjour,
J'ai un problème sous Excel/VBA, où je souhaite transférer une valeur d'une feuille vers autre via une macro.
Voici mon code :

Sub bla()
For Each feuille In Worksheets

If feuille.Name <> "Recapitul" Then

feuille.Activate
feuille.Range(Cells(45, 79)).Copy
Sheets("Recapitul").Activate
Cells(4, 5).Select
ActiveSheet.Paste
End If
Next

End Sub

En gros, on va chercher dans chaque feuille une cellule (celle à la ligne 45/colonne 79) et l'on fait un récapitulatif dans la feuille "Recapitul".

Apparament il y aurait une erreur avec la ligne "feuille.Range(Cells(45, 75)).Copy". Je ne comprends vraiment pas où est mon problème.

Merci d'avance à tous ceux qui pourront m'aider!
Bien cordialement,

1 réponse

  1. LePierre Messages postés 249 Statut Membre 338
     
    bonjour

    voici ton code modifié et testé :

    Sub bla()
        Lig = 4
        For Each feuille In Worksheets
        
            If feuille.Name <> "Recapitul" Then
            
                feuille.Select
                feuille.Cells(45, 79).Copy
                Sheets("Recapitul").Activate
                Cells(Lig, 5).Select
                ActiveSheet.Paste
                Lig = Lig + 1
            End If
        Next
    End Sub


    j'ai ajouté la gestion des lignes dans la feuille "Recapitul".

    à plus
    0
    1. holaaaa
       
      Salut,
      Merci de ton aide. Bon, ça ne marche pas encore, mais grâce à toi j'ai trouvé l'erreur... c'est déjà ça!! Je t'explique :

      En fait, je mets cette macro depuis un bouton qui se situe sur une autre feuille encore, qu'on appelera "accueil".
      Donc quand je clique sur ce bouton dans la feuille "accueil", ton code fonctionne jusqu'à la ligne "Cells(Lig, 5).Select", où là ça bug !!! A mon avis, le programme ne "comprend" pas que je souhaite écrire sur la feuille "recapitul". Tu vois ce que je veux dire ?

      Par ailleurs, je souhaiterais copier plusieurs cases et non une seule ; c'est pour cela que j'avais mis :
      "feuille.Range.(Cells(45, 79), Cells(52, 86)).Copy"

      Donc deux problèmes : Ton code fonctionne bien si je ne mets pas de bouton dans une autre feuille (j'ai essayé : cela marche avec le bouton situé dans la feuille "recapitul") ; et le fait que je souhaiterais copier plusieurs cellules (au moins 3 si c'est possible).

      Mon code actuel est donc le suivant :

      Private Sub CommandButton1_Click()
      Lig = 4
      For Each feuille In Worksheets

      If feuille.Name <> "Recapitul" Then

      feuille.Select
      feuille.Range(Cells(45, 79, Cells(52, 86)).Copy
      Sheets("Recapitul").Activate
      Cells(Lig, 5).Select
      ActiveSheet.Paste
      Lig = Lig + 1
      End If
      Next
      End Sub

      En souligné : les lignes qui ne fonctionnent pas !

      Merci beaucoup de ton aide... ou de votre aide si d'autres personnes pensent avoir la solution!!
      ++
      0
      1. LePierre Messages postés 249 Statut Membre 338 > holaaaa
         
        bonjour

        effectivement ça ne peut pas fonctionner car le "coller" de la deuxième feuille efface les données récupérées de la cellule (52,86) de la première feuille.
        de plus il manque une parenthèse après (45,79
        il faut : feuille.Range(Cells(45, 79), Cells(52, 86)).Copy

        colle ce code dans un module et affecte la macro "bla" à ton bouton. J'ai testé et ça fonctionne.
        par contre je colle la deuxième valeur à côté de la première. Ce n'est peut être pas ça que tu veux ?

        souhaites-tu vraiment copier ces cellules ou simplement récupérer le contenu de ces cellules ? Si tu ne veux que la valeur contenue le code est plus facile à réaliser.

        Sub bla()
            Lig = 4
            For Each feuille In Worksheets
            
                If feuille.Name <> "Recapitul" And feuille.Name <> "accueil" Then
                
                    feuille.Select
                    feuille.Cells(45, 79).Copy
                    Sheets("Recapitul").Activate
                    Cells(Lig, 5).Select
                    ActiveSheet.Paste
                    
                    feuille.Select
                    feuille.Cells(52, 86).Copy
                    Sheets("Recapitul").Activate
                    Cells(Lig, 6).Select
                    ActiveSheet.Paste
                    
                    Lig = Lig + 1
                End If
            Next
        End Sub


        à plus
        0
      2. holaaaa > LePierre Messages postés 249 Statut Membre
         
        En fait tu as raison, j'ai oublié de te préciser cela dans mon précédent message : je souhaite recopier la valeur (numérique) (et si possible le format (car j'ai affecté des unités particulières à mes valeurs (format personnalisé))).
        Le truc c'est que dans certaines cellules que je copie, le contenu est : =I13+J13 par exemple!! Or, moi je ne veux pas copier cette formule, mais la valeur numérique (résultat qui s'affiche dans la case!!).
        Dans ces conditions, tu dis que le code est différent ? et plus simple ?

        Sinon pour ta question : ce n'est pas grave si les cellules "collées" sont à côté ! Si jamais je ne le souhaite pas, je devrai créer un deuxième compteur lig2 !? non ?

        En tout cas merci pour toute cette aide ! Je vais essayer de faire fonctionner ton code mais je crains que je vais avoir le problème de contenu/valeur dont on a parlé !!

        En tout cas je suis obligé de fonctionner par VBA (meme si je ne veux que les valeurs des cellules (et les formats!)), car je souhaite par la suite ajouter des feuilles dans mon fichier Excel et que ma feuille "recapitul" ajoute toute seule les nouvelles données!

        Merci merci!!
        0
      3. LePierre Messages postés 249 Statut Membre 338 > holaaaa
         
        bonsoir

        tu peux préparer ta feuille "Recapitul" en copiant manuellement tes formats particuliers et en les collant aux bons emplacements (colonnes 5 et 6 dans cet exemple).
        Ensuite tu récupéres simplement les valeurs.

        voici le nouveau code de récupération :

        Sub bla2()
            Lig = 4
            For Each feuille In Worksheets
            
                If feuille.Name <> "Recapitul" And feuille.Name <> "accueil" Then
        
                    Valeur1 = feuille.Cells(45, 79).Value
                    Valeur2 = feuille.Cells(52, 86).Value
                    Sheets("Recapitul").Activate
                    Cells(Lig, 5).Value = Valeur1
                    Cells(Lig, 6).Value = Valeur2
                    
                    Lig = Lig + 1
                End If
            Next
        End Sub
        

        à plus
        0