Macro excel
Fermé
pluschaud
Messages postés
8
Date d'inscription
jeudi 2 septembre 2010
Statut
Membre
Dernière intervention
9 septembre 2010
-
2 sept. 2010 à 14:36
pluschaud Messages postés 8 Date d'inscription jeudi 2 septembre 2010 Statut Membre Dernière intervention 9 septembre 2010 - 9 sept. 2010 à 11:30
pluschaud Messages postés 8 Date d'inscription jeudi 2 septembre 2010 Statut Membre Dernière intervention 9 septembre 2010 - 9 sept. 2010 à 11:30
A voir également:
- Macro excel
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Liste déroulante excel - Guide
- Si et excel - Guide
- Word et excel gratuit - Guide
- Aller à la ligne excel - Guide
7 réponses
gbinforme
Messages postés
14946
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 712
Modifié par gbinforme le 6/09/2010 à 09:52
Modifié par gbinforme le 6/09/2010 à 09:52
bonjour
Voici un exemple de macro que tu peux mettre en place pour réaliser ton projet :
à toi d'adapter les noms des onglets et des classeurs bien sûr :)
ps : le fait d'utiliser UsedRange implique qu'il ne doit pas y avoir de colonne vide avant D dans ta base.
Toujours zen
Voici un exemple de macro que tu peux mettre en place pour réaliser ton projet :
Public Sub compare_copie() Dim lig As Long Dim col As Integer Dim b_sel As Range Dim e_sel As Range Dim wb As Worksheet Dim we As Worksheet Set wb = Workbooks("base.xls").Sheets("f_base") ' classeur base Set we = Workbooks("extraction.xls").Sheets("extrac") ' classeur extraction col = 24 ' colonne comparée X = 24 For Each b_sel In wb.UsedRange.Columns("D").Cells lig = 1 Set e_sel = we.Columns(col).Cells.Find(What:=b_sel.Value, After:=we.Cells(lig, col), LookIn:=xlValues, LookAt:=xlWhole) While Not e_sel Is Nothing And b_sel.Value <> "" we.Cells(e_sel.Row, col + 1).Value = b_sel.Offset(0, 3).Value 'maj colonne Y lig = e_sel.Row Set e_sel = we.Columns(col).Cells.Find(What:=b_sel.Value, After:=we.Cells(lig, col), LookIn:=xlValues, LookAt:=xlWhole) If e_sel.Row < lig Then Set e_sel = Nothing Wend Next b_sel End Sub
à toi d'adapter les noms des onglets et des classeurs bien sûr :)
ps : le fait d'utiliser UsedRange implique qu'il ne doit pas y avoir de colonne vide avant D dans ta base.
Toujours zen
pluschaud
Messages postés
8
Date d'inscription
jeudi 2 septembre 2010
Statut
Membre
Dernière intervention
9 septembre 2010
8 sept. 2010 à 15:24
8 sept. 2010 à 15:24
Salut gbinforme
J'ai essayé de comprendre et de compiler le code que tu as ecris. Je l'ai adapté à mes deux fichiers. J'ai ceci:
En fait les deux colonnes que je compare sont les colonnes B. Je copie ensuite dans la colonne C (laissée vide) de extract ce que je récupère dans A du fichier de Base.
Je constate qu'il n'y a rien qui se passe. On ne rentre pas dans la boucle While. La condition n'est pas remplie puisque e_sel toujours=Nothing. Je me familiarise encore avec les syntaxes et je suis un peu perdu.
Help please.
Merci pour le temps que tu as consacré à ce code gbinforme.
J'ai essayé de comprendre et de compiler le code que tu as ecris. Je l'ai adapté à mes deux fichiers. J'ai ceci:
Sub Macro_compare_et_copie() Dim lig As Long Dim col As Integer Dim b_sel As Range Dim e_sel As Range Dim wb As Worksheet Dim we As Worksheet Set wb = Workbooks("base.xls").Sheets("Feuil1") ' classeur base Set we = Workbooks("extract.xls").Sheets("cellules") 'classeur extraction col = 2 ' colonne comparée B = 2 For Each b_sel In wb.UsedRange.Columns("B").Cells lig = 1 Set e_sel = we.Columns(col).Cells.Find(What:=b_sel.Value, After:=we.Cells(lig, col), LookIn:=xlValues, LookAt:=xlWhole) While Not e_sel Is Nothing And b_sel.Value <> "" we.Cells(e_sel.Row, col + 1).Value = b_sel.Offset(0, -1).Value 'maj colonne Y lig = e_sel.Row Set e_sel = we.Columns(col).Cells.Find(What:=b_sel.Value, After:=we.Cells(lig, col), LookIn:=xlValues, LookAt:=xlWhole) If e_sel.Row < lig Then Set e_sel = Nothing Wend Next b_sel End Sub
En fait les deux colonnes que je compare sont les colonnes B. Je copie ensuite dans la colonne C (laissée vide) de extract ce que je récupère dans A du fichier de Base.
Je constate qu'il n'y a rien qui se passe. On ne rentre pas dans la boucle While. La condition n'est pas remplie puisque e_sel toujours=Nothing. Je me familiarise encore avec les syntaxes et je suis un peu perdu.
Help please.
Merci pour le temps que tu as consacré à ce code gbinforme.
gbinforme
Messages postés
14946
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 712
Modifié par gbinforme le 8/09/2010 à 22:38
Modifié par gbinforme le 8/09/2010 à 22:38
bonjour,
Ta première question a compliqué un peu le problème mais tu as parfaitement adapté le code.
Pour moi cela fonctionne, j'ai adapté les classeurs à ta macro modifiée et pour moi c'est correct comme résultat. Je te joins les 2 fichiers avec ta macro dans le fichier base pour comprendre pourquoi tu n'as pas de résultat.
http://www.cijoint.fr/cjlink.php?file=cj201009/cijF60CFXn.zip
Toujours zen
Ta première question a compliqué un peu le problème mais tu as parfaitement adapté le code.
Pour moi cela fonctionne, j'ai adapté les classeurs à ta macro modifiée et pour moi c'est correct comme résultat. Je te joins les 2 fichiers avec ta macro dans le fichier base pour comprendre pourquoi tu n'as pas de résultat.
http://www.cijoint.fr/cjlink.php?file=cj201009/cijF60CFXn.zip
Toujours zen
pluschaud
Messages postés
8
Date d'inscription
jeudi 2 septembre 2010
Statut
Membre
Dernière intervention
9 septembre 2010
9 sept. 2010 à 09:29
9 sept. 2010 à 09:29
Bonjour,
Merci déja pour ton aide.
Je crois que je vais m'arracher les cheveux de la tête. J'ai essayé le code sur tes fichers et ca marche.
Chez moi le problème est le même. Je joins les fichiers. Tu peux aller regarder . Je passe sûrement à côté d'un truc bête. Je comprends pas.Je veux copier la correspondance ID_pere dans la colonne C de extract. Une fois encore Merci
http://www.cijoint.fr/cjlink.php?file=cj201009/cijJOOl0FL.zip
Merci déja pour ton aide.
Je crois que je vais m'arracher les cheveux de la tête. J'ai essayé le code sur tes fichers et ca marche.
Chez moi le problème est le même. Je joins les fichiers. Tu peux aller regarder . Je passe sûrement à côté d'un truc bête. Je comprends pas.Je veux copier la correspondance ID_pere dans la colonne C de extract. Une fois encore Merci
http://www.cijoint.fr/cjlink.php?file=cj201009/cijJOOl0FL.zip
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
gbinforme
Messages postés
14946
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 712
9 sept. 2010 à 10:53
9 sept. 2010 à 10:53
bonjour
Tu as un problème tout bête car ta colonne B est précédée d'un espace et donc il n'y a pas de correspondance.
Soit tu supprimes l'espace initial.
Soit tu remplaces xlWhole par xlPart mais dans ce cas, si tu recherches BOIS tu vas trouver :
BOISBAN
BOISCERF
BOISDAVAUX
BOISGENOUD
BOISGENTIL
BOISMERMET
BOISSONNET
donc ce n'est pas très fiable.
Tu as un problème tout bête car ta colonne B est précédée d'un espace et donc il n'y a pas de correspondance.
Soit tu supprimes l'espace initial.
Soit tu remplaces xlWhole par xlPart mais dans ce cas, si tu recherches BOIS tu vas trouver :
BOISBAN
BOISCERF
BOISDAVAUX
BOISGENOUD
BOISGENTIL
BOISMERMET
BOISSONNET
donc ce n'est pas très fiable.
pluschaud
Messages postés
8
Date d'inscription
jeudi 2 septembre 2010
Statut
Membre
Dernière intervention
9 septembre 2010
9 sept. 2010 à 11:05
9 sept. 2010 à 11:05
Rebonjour,
ca marche. J'ai trouvé mon erreur. En fait c'est les espaces qui se trouvaient avant les termes que je recherchais qui empêchaient la boucle de fonctionner. Si tu regardes le fichier tu comprendras.
J'ai aussi modifié la dernière condition du If. Merci pour ton coup de main.
ca marche. J'ai trouvé mon erreur. En fait c'est les espaces qui se trouvaient avant les termes que je recherchais qui empêchaient la boucle de fonctionner. Si tu regardes le fichier tu comprendras.
J'ai aussi modifié la dernière condition du If. Merci pour ton coup de main.
pluschaud
Messages postés
8
Date d'inscription
jeudi 2 septembre 2010
Statut
Membre
Dernière intervention
9 septembre 2010
9 sept. 2010 à 11:30
9 sept. 2010 à 11:30
bonjour
Tu as un problème tout bête car ta colonne B est précédée d'un espace et donc il n'y a pas de correspondance.
Soit tu supprimes l'espace initial.
Soit tu remplaces xlWhole par xlPart mais dans ce cas, si tu recherches BOIS tu vas trouver :
BOISBAN
BOISCERF
BOISDAVAUX
BOISGENOUD
BOISGENTIL
BOISMERMET
BOISSONNET
donc ce n'est pas très fiable
oK.TU AS éTé RAPIDE. comme mentionné dans mon precedant message, j'avais vu le problème. J'ai supprimé les espaces, et j'ai changé la dernière sondition If.
Merci Beaucoup pour ta promtitude
Tu as un problème tout bête car ta colonne B est précédée d'un espace et donc il n'y a pas de correspondance.
Soit tu supprimes l'espace initial.
Soit tu remplaces xlWhole par xlPart mais dans ce cas, si tu recherches BOIS tu vas trouver :
BOISBAN
BOISCERF
BOISDAVAUX
BOISGENOUD
BOISGENTIL
BOISMERMET
BOISSONNET
donc ce n'est pas très fiable
oK.TU AS éTé RAPIDE. comme mentionné dans mon precedant message, j'avais vu le problème. J'ai supprimé les espaces, et j'ai changé la dernière sondition If.
Merci Beaucoup pour ta promtitude