Lire et écrire valeur d'une cellule [Résolu]

cs_Juju1988 70 Messages postés jeudi 8 janvier 2009Date d'inscription 21 juin 2011 Dernière intervention - 6 sept. 2010 à 13:48 - Dernière réponse : cs_Juju1988 70 Messages postés jeudi 8 janvier 2009Date d'inscription 21 juin 2011 Dernière intervention
- 8 sept. 2010 à 09:00
Actuellement je fais cette procédure de copier/coller :

ub RecupNumLot()
    
    Windows("analyses.xls").Activate    'On active analyses.xls le classeur
    Sheets("Données Rapports").Activate 'On active la feuille Données Rapports où se situe les données qu'on veut récupérer
    Range(cNumLot).Select               'On sélectionne la cellule qu'on veut récupérer

    Selection.Copy                      'On la copie
    
    Windows("exemple.xls").Activate     'On active exemple.xls dans lequel on va stocker les données
    ActiveSheet.Paste                   'On colle le numéro de lot dans la cellule active
    
End Sub


J'aimerai faire la même chose mais plutôt qu'un copier coller, faire une lecture écriture ... je sais que ça existe mais comment ça marche? Si vous connaissez un tuto...
Cela me permettra d'éviter les erreurs de mise en forme...
Afficher la suite 

Votre réponse

10 réponses

Meilleure réponse
cs_Juju1988 70 Messages postés jeudi 8 janvier 2009Date d'inscription 21 juin 2011 Dernière intervention - 7 sept. 2010 à 09:13
3
Merci
J'ai modifié mon code qui à l'air de fonctionner :

Function RecupPartielle(typeAnalyse As String, formeAnalyse As Integer, varAnalyse As String, valAnalyse As String)

Dim recupVar As String
Dim recupVal As String
recupVar = ""
recupVal = ""

    Call Ouvre
    
    Windows("exemple.xls").Activate
    Range("A2").Select
    
    'Boucle pour se positionner sur la première cellule vide
    Do While Not (IsEmpty(ActiveCell))
        NbLigne = NbLigne + 1
        Selection.Offset(1, 0).Select
    Loop
    
    ActiveCell.Value = formeAnalyse
    
    ActiveCell.Offset(0, 1).Range("A1").Select
    Call RecupNumLot
    
    ActiveCell.Interior.Color = RGB(255, 255, 255)
    
    'Cellule suivante On récupère le type d'analyse
    ActiveCell.Offset(0, 1).Range("A1").Select
    ActiveCell.Value = typeAnalyse
            
    'Cellule suivante On récupère la variable d'analyse
    ActiveCell.Offset(0, 1).Range("A1").Select
    
    Windows("analyses.xls").Activate
    recupVar = Range(varAnalyse).Value
    Windows("exemple.xls").Activate
    ActiveCell.Value = recupVar

    ActiveCell.Offset(0, 1).Range("A1").Select
    
    Windows("analyses.xls").Activate
    recupVal = Range(valAnalyse).Value
    Windows("exemple.xls").Activate
    ActiveCell.Value = recupVal
    ActiveCell.Interior.Color = RGB(255, 255, 255)

    'Sauvegarde et fermeture du fichier "exemple.xls"
    Windows("exemple.xls").Activate
    ActiveWorkbook.Save
    ActiveWorkbook.Close

End Function


Voilà à quoi il ressemble... Cependant le traitement est peut être plus long et moins transparent pour l'utilisateur j'ai l'impression...

Merci cs_Juju1988 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de cs_Juju1988
NHenry 14260 Messages postés vendredi 14 mars 2003Date d'inscription 16 septembre 2018 Dernière intervention - 6 sept. 2010 à 14:05
0
Merci
Bonjour,

Enregistre une macro avec Excel (Outils -> Macros -> Enregistrer)
Et regardes le code généré.

Mon site
Commenter la réponse de NHenry
cs_Juju1988 70 Messages postés jeudi 8 janvier 2009Date d'inscription 21 juin 2011 Dernière intervention - 6 sept. 2010 à 14:12
0
Merci
Gloups j'ai pas copié la bonne fonction :

Function RecupPartielle(typeAnalyse As String, formeAnalyse As Integer, varAnalyse As String, valAnalyse As String)

    Call Ouvre
    
    Windows("exemple.xls").Activate
    Range("A2").Select
    
    'Boucle pour se positionner sur la première cellule vide
    Do While Not (IsEmpty(ActiveCell))
        NbLigne = NbLigne + 1
        Selection.Offset(1, 0).Select
    Loop
    
    ActiveCell.Value = formeAnalyse
    
    ActiveCell.Offset(0, 1).Range("A1").Select
    Call RecupNumLot
    
    ActiveCell.Interior.Color = RGB(255, 255, 255)
    
    ActiveCell.Offset(0, 1).Range("A1").Select
    ActiveCell.Value = typeA
    
    ActiveCell.Offset(0, 1).Range("A1").Select
    
    Windows("analyses.xls").Activate
    Range(varAnalyse).Select
    Selection.Copy                                    **
    Windows("exemple.xls").Activate
    ActiveSheet.Paste                                 **
    
    ActiveCell.Offset(0, 1).Range("A1").Select
    
    Windows("analyses.xls").Activate
    Range(valAnalyse).Select
    Selection.Copy                                     **
    Windows("exemple.xls").Activate
    ActiveSheet.Paste                                  **
    ActiveCell.Interior.Color = RGB(255, 255, 255)

    'Sauvegarde et fermeture du fichier "exemple.xls"
    Windows("exemple.xls").Activate
    ActiveWorkbook.Save
    ActiveWorkbook.Close

End Function


Je fais mes copier coller là où j'ai mis les étoiles. Etes vous sûr que je puisse réaliser cela en macro??
Commenter la réponse de cs_Juju1988
jordane45 22508 Messages postés mercredi 22 octobre 2003Date d'inscriptionContributeurStatut 18 septembre 2018 Dernière intervention - 6 sept. 2010 à 14:56
0
Merci
Bonjour,
Je n'ai pas regardé ton script complet.. mais déjà pour un début de réponse :
oui on peut lire une valeur puis la recopier ailleur.

Par exemple:

Pour lire la valeur d'une cellule: (on peut le faire avec range ou cells)
mavariable = Cells(2,"A").value
mavariable = Range("A2").value

et pour écrire:
Cells(2,"A").value = mavariable
Range("A2").value = mavariable

pour plus d'infos sur l'utilisation du VBA, tu peux rechercher sur le net des infos sur la manipulation des feuilles et des cellules.

Bonne continuation.

Cordialement,
Jordane,
______________________________________________________
Règles du forum à lire avant de poster une question : ICI
Commenter la réponse de jordane45
jordane45 22508 Messages postés mercredi 22 octobre 2003Date d'inscriptionContributeurStatut 18 septembre 2018 Dernière intervention - 7 sept. 2010 à 09:27
0
Merci
Bonjour,

pour accélerer le traitement, je propose que tu passes par des tableaux de variable pour stoker tes valeurs puis pour toutes les recopier d'un coup sur ton autre classeur.
Penses aussi à "désactiver" la mise à jour de l'affichage pendant l'éxécution de ta macro...ça te fera encore gagner un peu de temps (application.screenupdating = false).

Pour ce qui est de tenir l'utilisateur informé de l'avancement du programme, tu peux utiliser la barre d'état pour y afficher des messages ou sinon te créer une progressbar.
Par exemple, tu comptes ton nombre de ligne à parcourir et tu fais un pourcentage entre la ligne où tu es / nb Total.


Pour la recherche de la dernière ligne, regardes également sur le net, il existe des fonctions qui permettent de le faire "mieux" (on va dire plus vite et plus proprement) qu'une boucle..


NB: pour l'utilisation de TABLEAUX, je te propose se lien :
UTILISER LES TABLEAUX EN VBA

Cordialement,
Jordane,
______________________________________________________
Règles du forum à lire avant de poster une question : ICI
Commenter la réponse de jordane45
cs_Juju1988 70 Messages postés jeudi 8 janvier 2009Date d'inscription 21 juin 2011 Dernière intervention - 7 sept. 2010 à 11:03
0
Merci
J'ai retesté mon programme et en fait c'est juste en pas à pas que le traitement est plus donc ça va...

Mais j'ai regardé toutes tes suggestions et vais les garder sous le coude...

Que veux tu dire par désactiver la mise à jour de l'affichage pendant l'éxécution de ma macro... ? De quelle macro tu parles à quel moment?? Et il va falloir que je réactive à chaque fois non? Je comprend pas trop de quel moment tu parles...

Logiquement l'utilisateur n'a pas besoin d'être informé...

La dernière ligne vide tu veux dire? Ben j'ai trouvé le code mis sur le net en fait... J'ai rien trouvé (pour ma part) de mieux... Mais je débute en vba et je ne sais pas peut être pas bien distinguer tout ça lol
Commenter la réponse de cs_Juju1988
jordane45 22508 Messages postés mercredi 22 octobre 2003Date d'inscriptionContributeurStatut 18 septembre 2018 Dernière intervention - 7 sept. 2010 à 11:50
0
Merci
Bonjour,
Que veux tu dire par désactiver la mise à jour de l'affichage pendant l'éxécution de ma macro

pour l'affichage.. lorsque tu passes d'une feuille à une autre ou que tu t'y déplace, tu peux le voir à l'écran...cela ralentit un peu le programme.
En plaçant l'instruction
application.ScreenUpdating = false
au début de ton code permet de demander à ton programme de ne pas afficher ces "mouvements" pendant le traitement.
A la fin de ta macro, tu mets ensuite cette fonction à TRUE pour la réactiver.
Cela permet de faire gagner un peu de temps à ton programme.

Ensuite, pour "trouver" la dernière ligne de ton tableau, il existe différentes faço de procéder :
VOIR ICI

Pour ma part, j'utilise principalement :
Derniere_Ligne = Activesheet.Cells.Find("*", Range("A1"), , , xlByRows, xlPrevious).Row 'pour les lignes 


Bonne continuation et n'hésites pas à revenir poster sur le forum si tu as des soucis.

Cordialement,
Jordane,
______________________________________________________
Règles du forum à lire avant de poster une question : ICI
Commenter la réponse de jordane45
cs_Juju1988 70 Messages postés jeudi 8 janvier 2009Date d'inscription 21 juin 2011 Dernière intervention - 7 sept. 2010 à 16:58
0
Merci
Oh merci bien, j'ai utilisé l'instruction pour que les mouvements n'apparaissent pas et cela fonctionne à la perfection.
Par contre j'avoue ne pas trop comprendre ta ligne :
Derniere_Ligne = Activesheet.Cells.Find("*", Range("A1"), , , xlByRows, xlPrevious).Row 'pour les lignes 



J'ai pour ma part besoin de connaitre la première cellule vide de mon tableau comme tu as pu le voir dans mon code et à partir de là je remplis et passe à chaque fois à la cellule suivante (celle de droite). Ensuite je me replace à la première cellule vide (une ligne en dessous donc) et je recommence jusqu'à ce que je n'ai plus de valeurs pour le remplir ... Et je ne vois pas comment utilisé ton code où ceux de ton lien...
Commenter la réponse de cs_Juju1988
jordane45 22508 Messages postés mercredi 22 octobre 2003Date d'inscriptionContributeurStatut 18 septembre 2018 Dernière intervention - 8 sept. 2010 à 07:45
0
Merci
Bonjour,
cette ligne te permet de connaitre l'emplacement de la dernière ligne de ton tableau ( donc +1 pour avoir la première ligne vide).
Ca permet juste de ne pas avoir à parcourir tout ton tableau pour la trouver (surtout si il y a beaucoup de lignes dedans )

mais bon, c'était juste une proposition... ta boucle fonctionne aussi

Cordialement,
Jordane,
______________________________________________________
Règles du forum à lire avant de poster une question : ICI
Commenter la réponse de jordane45
cs_Juju1988 70 Messages postés jeudi 8 janvier 2009Date d'inscription 21 juin 2011 Dernière intervention - 8 sept. 2010 à 09:00
0
Merci
Lol ok c'est gentil merci
Commenter la réponse de cs_Juju1988

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.