Transfert de Valeurs EXCEL/VBA

Fermé
holaaaa - 1 avril 2008 à 18:59
LePierre Messages postés 249 Date d'inscription samedi 8 mars 2008 Statut Membre Dernière intervention 2 août 2012 - 2 avril 2008 à 21:51
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,
A voir également:

1 réponse

LePierre Messages postés 249 Date d'inscription samedi 8 mars 2008 Statut Membre Dernière intervention 2 août 2012 338
1 avril 2008 à 20:17
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
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
LePierre Messages postés 249 Date d'inscription samedi 8 mars 2008 Statut Membre Dernière intervention 2 août 2012 338 > holaaaa
2 avril 2008 à 13:28
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
holaaaa > LePierre Messages postés 249 Date d'inscription samedi 8 mars 2008 Statut Membre Dernière intervention 2 août 2012
2 avril 2008 à 13:45
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
LePierre Messages postés 249 Date d'inscription samedi 8 mars 2008 Statut Membre Dernière intervention 2 août 2012 338 > holaaaa
2 avril 2008 à 21:51
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