Récupérer Cellules dans un fichier Excel pour les copier dans un autre [Résolu]

Messages postés
70
Date d'inscription
jeudi 8 janvier 2009
Dernière intervention
21 juin 2011
- 19 juil. 2010 à 10:46 - Dernière réponse :
Messages postés
70
Date d'inscription
jeudi 8 janvier 2009
Dernière intervention
21 juin 2011
- 29 juil. 2010 à 11:44
Bonjour,

Je suis actuellement en stage et amenée à développer en VBA. Je m'exerce un peu avant de me lancer sur le travail confié et j'aurais besoin de votre aide...

Je dispose d'un fichier "analyses.xls" et j'aimerai récupérer dans ce fichier la cellule se situant juste après celle contenant "N° lot" ...

Et ensuite copier le contenu de cette cellule dans mon fichier "essai vba.xls" à un emplacement précis.

J'essaie avec la fonction Find ... mais j'avoue que je bloque un peu beaucoup ...

Pourriez vous m'aider?

Merci d'avance,
Afficher la suite 

Votre réponse

49 réponses

Meilleure réponse
Messages postés
70
Date d'inscription
jeudi 8 janvier 2009
Dernière intervention
21 juin 2011
- 20 juil. 2010 à 14:09
3
Merci
Voici le code complet qui fonctionne :

Sub Ouvre()

    Dim ClasseurSource As Workbook, ClasseurCible As Workbook, CheminClasseur As String
    
    CheminClasseur = "C:\Documents and Settings\STAG3\Bureau\analyses.xls"
    
    If VerifOuvertureClasseur(CheminClasseur) Then
        MsgBox "Classeur déja ouvert." 'Que faire si déjà ouvert?
    Else
        Set ClasseurSource = Application.Workbooks.Open(CheminClasseur)
    End If
End Sub

Function VerifOuvertureClasseur(Fichier As String) As Boolean
    Dim x As Integer

    On Error Resume Next
    x = FreeFile()

    Open Fichier For Input Lock Write As #x 'préciser les options d'accès au fichier, ici verouillé en écriture...
    Close x

    If Err.Number 0 Then VerifOuvertureClasseur False
    If Err.Number 70 Then VerifOuvertureClasseur True

    On Error GoTo 0
End Function


Sub RecupNumLot()

Dim newlettre, lettre, s As String
Dim numero As Integer

Call Ouvre


With ActiveWorkbook.Worksheets("Données Rapports").Range("A1:P108")
            Set c = .Find("n° lot:", LookIn:=xlValues)
            
    If Not c Is Nothing Then ' si c n'est pas vide
        firstAddress = c.Address
    End If
    
End With
    s = Replace(firstAddress, "$", "")
    For i = 1 To Len(s)
        If IsNumeric(Mid(s, i, i)) Then
            lettre = Mid(s, 1, i - 1)
            numero = Mid(s, i, Len(s))
        GoTo suit
        End If
    Next
suit:
    newlettre = Chr(Asc(lettre) + 1)
    Windows("analyses.xls").Activate
    Range(newlettre & numero).Select

    Selection.Copy
    Windows("essai vba.xls").Activate
    Range("B1").Select

    ActiveSheet.Paste
    Windows("analyses.xls").Activate
    'ActiveWindow.Close

End Sub



Merci cs_Juju1988 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 86 internautes ce mois-ci

Commenter la réponse de cs_Juju1988
Messages postés
70
Date d'inscription
jeudi 8 janvier 2009
Dernière intervention
21 juin 2011
- 19 juil. 2010 à 11:40
0
Merci
Sub Ouvre()

    Dim ClasseurSource As Workbook, ClasseurCible As Workbook, CheminClasseur As String
    
    CheminClasseur = "C:\Documents and Settings\STAG3\Bureau\analyses.xls"
    
    If VerifOuvertureClasseur(CheminClasseur) Then
        MsgBox "Classeur déja ouvert." 'Que faire si déjà ouvert?
    Else
        Set ClasseurSource = Application.Workbooks.Open(CheminClasseur)
    End If
End Sub

Function VerifOuvertureClasseur(Fichier As String) As Boolean
    Dim x As Integer

    On Error Resume Next
    x = FreeFile()

    Open Fichier For Input Lock Write As #x 'préciser les options d'accès au fichier, ici verouillé en écriture...
    Close x

    If Err.Number 0 Then VerifOuvertureClasseur False
    If Err.Number 70 Then VerifOuvertureClasseur True

    On Error GoTo 0
End Function

' Recherche des éléments nécessaires dans le fichier Excel d'analyses

Sub FindNumLot()


Call Ouvre

Workbooks("analyses.xls").Activate



With ActiveWorkbook.Worksheets("Données Rapports").Range("A1:P108")
            Set c = .Find("n° lot:", LookIn:=xlValues)
            
    If Not c Is Nothing Then ' si c n'est pas vide
        firstAddress = c.Address 'Maintenant problème passer à l'adresse suivante ...
        Debug.Print (c.Value)
        
    End If
End With
End Sub


J'ai fait ce début de code, maintenant je récupère bien ma cellule contenant "N° lot" mais comment faire pour récupérer la cellule juste après...
Ou dans mon code comment incrémenté la l'adresse de la variable c de 1 ? d'une cellule vers la droite ...

Merci d'avance
Commenter la réponse de cs_Juju1988
Messages postés
34
Date d'inscription
jeudi 10 juillet 2003
Dernière intervention
29 juillet 2010
- 19 juil. 2010 à 11:55
0
Merci
salut voila une idée si j'ai bien compris ton besoin

    Cells.Find(What:="N° lot""", After:=ActiveCell).Activate 'chercher le texte "N° lot" dans le fichier xls
    s = Replace(ActiveCell.Address, "$", "") 'recuperer l'adresse de l'active cellule
    For i = 1 To Len(s)
    If IsNumeric(Mid(s, i, i)) Then  'separer l'alpha et les numeric
    letre = Mid(s, 1, i - 1)
    numero = Mid(s, i, Len(s))
    GoTo suit
    End If
    Next
suit:
    Range(letre & numero + 1).Select ' si vous voulez le champs suivant dans la même colonne
    Range(Chr(Asc(letre) + 1) & numero).Select ' si vous voulez le champs suivant dans la même ligne
    




en plus tu peu récupérer la valeur dans un variable puis ouvrir votre fichier d'essaiVB et sélectionner la cellule de destination
bon courage
Commenter la réponse de cs_abdellatyif
Messages postés
70
Date d'inscription
jeudi 8 janvier 2009
Dernière intervention
21 juin 2011
- 19 juil. 2010 à 14:28
0
Merci
Désolée mais je débute en vba, peux tu m'expliquer :

Range(Chr(Asc(letre) + 1) & numero).Select


Je voudrais récupérer le contenu de la cellule dans une variable... et je n'arrive pas à comprendre comment faire sans comprendre votre code ...

J'ai essayé de mettre la dernière ligne dans une variable string mais ça ne fonctionne pas ...
J'essaie donc de comprendre le code...

Par contre pour la cellule de destination je veux le faire en code aussi ... si je la sélectionne ça ne sera pas codé.. Avez vous une solution ?
Commenter la réponse de cs_Juju1988
Messages postés
70
Date d'inscription
jeudi 8 janvier 2009
Dernière intervention
21 juin 2011
- 19 juil. 2010 à 14:42
0
Merci
Petite précision je code depuis "essais vba.xls" et depuis ce document j'ouvre "analyses.xls" et j'aimerai récupérer dans "analyses" la cellule suivante à celle contenant "N° lot:" et coller ce que je récupère dans une cellule précise de "essais vba.xls"...

Si vous pouviez m'aider aussi sur le fait de :
- jongler entre les deux fichiers
- passer à la cellule suivante
- trouver ce que je recherche dans "analyses.xls"
- coller le résultat de ma recherche dans le document "essai vba.xls"
Commenter la réponse de cs_Juju1988
Messages postés
34
Date d'inscription
jeudi 10 juillet 2003
Dernière intervention
29 juillet 2010
- 19 juil. 2010 à 14:46
0
Merci
explique bien votre besoin,
0--> ouvrir le fichier excel 1.
1--> chercher le mot N° lots dans un fichier excel
2--> récupérer la valeur du champ a coté de la cellule trouvé dans étape 1
4--> ouvrir le fichier excel 2
5--> sélectionner une cellule
3--> copie la valeur récupérer dans l'étape 2 dans le fichier excel 2

????
Commenter la réponse de cs_abdellatyif
Messages postés
70
Date d'inscription
jeudi 8 janvier 2009
Dernière intervention
21 juin 2011
- 19 juil. 2010 à 14:51
0
Merci
0--> Je code dans le fichier Excel 2
1--> Depuis ce fichier j'ouvre le fichier Excel 1
2--> Recherche du mot "N° lot:" dans le fichier Excel 1
3--> Récupérer la valeur du champ à côté de la cellule trouvée dans l'étape 2
4--> Coller cette valeur dans la cellule B1 du fichier Excel 2

Je suis claire ou pas??
Commenter la réponse de cs_Juju1988
Messages postés
34
Date d'inscription
jeudi 10 juillet 2003
Dernière intervention
29 juillet 2010
- 19 juil. 2010 à 15:33
0
Merci
salut
vérifier si ça marche mnt

    Workbooks.Open Filename:="C:\Documents and Settings\STAG3\Bureau\analyses.xls"

    Cells.Find(What:="N° lot", After:=ActiveCell).Activate
    s = Replace(ActiveCell.Address, "$", "")
    For i = 1 To Len(s)
    If IsNumeric(Mid(s, i, i)) Then
    letre = Mid(s, 1, i - 1)
    numero = Mid(s, i, Len(s))
    GoTo suit
    End If
    Next
suit:

    Range(Chr(Asc(letre) + 1) & numero).Select
    Selection.Copy
    Windows("essais vba.xls").Activate
    Range("B1").Select
    ActiveSheet.Paste
Commenter la réponse de cs_abdellatyif
Messages postés
70
Date d'inscription
jeudi 8 janvier 2009
Dernière intervention
21 juin 2011
- 19 juil. 2010 à 15:42
0
Merci
J'ai testé le code mais j'ai une erreur :

Erreur d'éxecution 91 : Variable objet ou variable de bloc With non définie


J'ai essayé de mettre un bloc With comme dans mon précédent code mais cela ne fonctionne pas, qu'elle est la syntaxe exacte svp ?

Merci d'avance :)
Commenter la réponse de cs_Juju1988
Messages postés
70
Date d'inscription
jeudi 8 janvier 2009
Dernière intervention
21 juin 2011
- 19 juil. 2010 à 16:01
0
Merci
Sub Ouvre()

    Dim ClasseurSource As Workbook, ClasseurCible As Workbook, CheminClasseur As String
    
    CheminClasseur = "C:\Documents and Settings\STAG3\Bureau\analyses.xls"
    
    If VerifOuvertureClasseur(CheminClasseur) Then
        MsgBox "Classeur déja ouvert." 'Que faire si déjà ouvert?
    Else
        Set ClasseurSource = Application.Workbooks.Open(CheminClasseur)
    End If
End Sub

Function VerifOuvertureClasseur(Fichier As String) As Boolean
    Dim x As Integer

    On Error Resume Next
    x = FreeFile()

    Open Fichier For Input Lock Write As #x 'préciser les options d'accès au fichier, ici verouillé en écriture...
    Close x

    If Err.Number 0 Then VerifOuvertureClasseur False
    If Err.Number 70 Then VerifOuvertureClasseur True

    On Error GoTo 0
End Function


Sub RecupNumLot()

Call Ouvre


    Cells.Find(What:="n° lot:", After:=ActiveCell).Activate
    s = Replace(ActiveCell.Address, "$", "")
    For i = 1 To Len(s)
        If IsNumeric(Mid(s, i, i)) Then
            lettre = Mid(s, 1, i - 1)
            numero = Mid(s, i, Len(s))
        GoTo suit
        End If
    Next
suit:

    Range(Chr(Asc(lettre) + 1) & numero).Select
    Selection.Copy
    Windows("essai vba.xls").Activate
    Range("B1").Select
    ActiveSheet.Paste

End Sub



Voici la totalité de mon code ...
Commenter la réponse de cs_Juju1988
Messages postés
34
Date d'inscription
jeudi 10 juillet 2003
Dernière intervention
29 juillet 2010
- 19 juil. 2010 à 16:15
0
Merci
dis moi c'est quoi le non des fichier excel.??

et c'est quoi la linge qui vous donne le message d'erreur
Commenter la réponse de cs_abdellatyif
Messages postés
70
Date d'inscription
jeudi 8 janvier 2009
Dernière intervention
21 juin 2011
- 19 juil. 2010 à 16:20
0
Merci
Le fichier 2 = essai vba.xls
Le fichier 1 = analyses.xls

La ligne qui fait l'erreur est :

Cells.Find(What:="n° lot:", After:=ActiveCell).Activate
    s = Replace(ActiveCell.Address, "$", "")


As tu essayé de rajouter un With??
Commenter la réponse de cs_Juju1988
Messages postés
70
Date d'inscription
jeudi 8 janvier 2009
Dernière intervention
21 juin 2011
- 19 juil. 2010 à 16:28
0
Merci
En rajoutant un bloc With de cette manière là cela me fait toujours la même erreur je ne comprend pas ... :

Sub RecupNumLot()

Call Ouvre

With ActiveWorkbook.Worksheets("Données Rapports").Range("A1:P108")
    Cells.Find(What:="n° lot:", After:=ActiveCell).Activate
    s = Replace(ActiveCell.Address, "$", "")
    For i = 1 To Len(s)
        If IsNumeric(Mid(s, i, i)) Then
            lettre = Mid(s, 1, i - 1)
            numero = Mid(s, i, Len(s))
        GoTo suit
        End If
    Next
suit:

    Range(Chr(Asc(lettre) + 1) & numero).Select
    Selection.Copy
    Windows("essai vba.xls").Activate
    Range("B1").Select
    ActiveSheet.Paste
End With
End Sub

Commenter la réponse de cs_Juju1988
Messages postés
34
Date d'inscription
jeudi 10 juillet 2003
Dernière intervention
29 juillet 2010
- 19 juil. 2010 à 16:40
0
Merci
j'ai testé ce code et ç marche
With ActiveWorkbook.Worksheets("Données Rapports").Range("A1:P108")
            Set c = .Find("n° lot:", LookIn:=xlValues)
            
    If Not c Is Nothing Then ' si c n'est pas vide
        firstAddress = c.Address 
       
    End If
End With


    s = Replace(firstAddress, "$", "")
    For i = 1 To Len(s)
        If IsNumeric(Mid(s, i, i)) Then
            lettre = Mid(s, 1, i - 1)
            numero = Mid(s, i, Len(s))
        GoTo suit
        End If
    Next
suit:

    Range(Chr(Asc(lettre) + 1) & numero).Select
    Selection.Copy
    Windows("essai vba.xls").Activate
    Range("B1").Select
    ActiveSheet.Paste
Commenter la réponse de cs_abdellatyif
Messages postés
70
Date d'inscription
jeudi 8 janvier 2009
Dernière intervention
21 juin 2011
- 19 juil. 2010 à 16:47
0
Merci
Pff on va pas s'en sortir lol ...

J'ai mis ton code en place il y a un miuex cependant cela me met cette erreur cette fois ci :

Erreur d'éxecution 1001 Erreur définie par l'application ou par l'objet


Cela me le fait sur cette ligne :

Range(Chr(Asc(lettre) + 1) & numero).Select


...
Commenter la réponse de cs_Juju1988
Messages postés
34
Date d'inscription
jeudi 10 juillet 2003
Dernière intervention
29 juillet 2010
- 19 juil. 2010 à 17:12
0
Merci
peu tu me donnée la lettre de colonne ou se trouve le mot N° lot:
Commenter la réponse de cs_abdellatyif
Messages postés
70
Date d'inscription
jeudi 8 janvier 2009
Dernière intervention
21 juin 2011
- 19 juil. 2010 à 17:16
0
Merci
N° de lot se trouve en colonne D
Par contre la colonne suivante est E et F mais cela ne forme qu'une cellule qui je pense est E...
Est ce que je suis claire? Sinon je vous envoi un imprim écran de mon fichier à cet endroit là...
Commenter la réponse de cs_Juju1988
Messages postés
34
Date d'inscription
jeudi 10 juillet 2003
Dernière intervention
29 juillet 2010
- 19 juil. 2010 à 17:18
0
Merci
non c'est claire
Commenter la réponse de cs_abdellatyif
Messages postés
70
Date d'inscription
jeudi 8 janvier 2009
Dernière intervention
21 juin 2011
- 20 juil. 2010 à 09:19
0
Merci
Je viens d'arriver et j'ai relancé mon code et donc lancé mes fichiers Excel qui m'ont demandé de mettre à jour les liaisons entre les deux fichiers ce que j'ai fait et apparemment quelques liaisons n'ont pas pu être mises à jour ... Est ce que cela peut venir de là? Je vais regarder la valeur des variables ...
Commenter la réponse de cs_Juju1988
Messages postés
70
Date d'inscription
jeudi 8 janvier 2009
Dernière intervention
21 juin 2011
- 20 juil. 2010 à 09:49
0
Merci
Toutes les valeurs des variables sont également correctes ... mais ça bloque toujours à la même ligne :

Range(Chr(Asc(lettre) + 1) & numero).Select

Ce serait pas le fait d'ajouter + 1 à une lettre??
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.