> Tous les forums > Forum Bureautique
 Copie sous conditions Excel [VBA]Sujet résolu
Ajouter un message à la discussion
Page : [1] 
Page 1 sur 1
julp
  Posté le 18/06/2007 @ 15:13 
Aller en bas de la page 
Petit astucien

Bonjour à tous,

je bloque sur la réalisation d'une macro.

Dans mon document j'ai 3 tables: ("AccessImport", "DIFImport" et "Tabelle1")

Je souhaite comparer la colonne B de la "Tabelle1" si une valeur se situe dans la colonne A de la table "DIFImport" alors on copie la valeur de la colonne C de la "Tabelle1" (donc 1 cellule plus loin de la valeur qu'on souhaite comparer) et on colle cette valeur dans la colonne D de la table "DIFImport" (a coté de la valeur de comparée)

J'ai pris 2 screenshots: http://www.julp.info/excel/excel.JPG

http://www.julp.info/excel/excel1.JPG

Je m'engage à payer une bière à la personne qui arrivera à résoudre mon problème.

En vous remerciant par avance, je vous souhaite encore une agréable après midi!

Amicalement

Julien

PS: Galopin01, snif snif besoin de toi et des autres!



Modifié par julp le 18/06/2007 16:08
Publicité
galopin01
 Posté le 18/06/2007 à 21:58 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

bonjour,

une image n'est pas d'une grande utilité, elle ne renseigne pas sur la taille de tes feuilles. (Combien d'enregistrements dans "DIFImport" et combien d'enregistrements "Tabelle1")

Le principe est pourtant simple : Voici l'algo (en petit nègre...)

'Pour chaque occurence dans ColonneSource
For each o in "RangeSource"
'Trouver cette occurence dans colonne cible
Set isect = Find(o.Value, "RangeCible")
'Si trouvé est vrai alors trouvé décalé de 3 colonne = occurence décalée de 1 colonne !
If not isect is Nothing then
isect.offset(0,3)= o.offset(0,1)
'Et ainsi de suite...
Next

Voir l'aide de Find dans VBA éventuellement pour la syntaxe.
La seule option possible est si l'une des feuille à beaucoup moins d'enregistrements que l'autre. On fera la recherche à partir de each o in "LaFeuilleQuiALeMoinsdEnregistrements"

Essaie. Montre nous ce que tu es capable de pondre : on corrigera...

A+



Modifié par galopin01 le 18/06/2007 21:59
julp
 Posté le 19/06/2007 à 09:42 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Bonjour,

tout d'abord merci pour cette première réponse!

Pour information: la table DIFImport compte 320 enregistrements et AccessImport 1716... Cela peut augmenter plus ou moins.

J'avais pensé utiliser une mise en format conditionnelle mais sur plusieurs pages c'est pas possible je crois...

Bon ben je vais voir ce que j'arrive à faire...

Amicalement

Julien



Modifié par julp le 19/06/2007 11:34
galopin01
 Posté le 19/06/2007 à 13:21 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

bonjour,

On repart à zéro et on résume : Il ressort de ton premier énoncé que la table "AccessImport" ne sert à rien...

puisque la comparaison se fair entre la colonne B de la "Tabelle1" et la colonne A de la table "DIFImport" c'est pourquoi je te demande la taille de ces 2 feuilles et non celle de "AccessImprt" dont on n'à que faire...

De plus ça serait bien que tu nous donnes sur (cjoint) un extrait de ces deux feuilles avec juste les colonnes utiles : ça m'éviterai d'éviter de perdre mon temps à reconstituer deux feuilles identiques à tes images pour tester.

A+

julp
 Posté le 19/06/2007 à 15:39 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Bonjour,

ci-joint le fichier en question:

http://www.julp.info/excel/galopin01.xls

Ouais je me suis trompé, en effet comme tu as pu me reprendre: La colonne B de la Tabelle1 (1716 enregistrements) doit être comparée à la colonne A de DIFImport (320 enregistrements). On ne se préoccupe pas de la table AccessImport.

Par exemple, si une valeur colonne A [DIFImport] est trouvé dans la colonne B [Tabelle1] alors on copie le texte dans la colonne C [Tabelle1] et on le colle dans la colonne D [DIFImport].

En te remerciant déjà pour la peine que tu prends à m'aider.

Passe une agréable fin d'après midi!

Merci Merci

Amicalement

Julien

galopin01
 Posté le 19/06/2007 à 19:54 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Quel est le but du jeu :

- compléter les valeurs manquantes (on ne s'intéresse qu'aux lignes de "DifImport" ou il n'y a rien en colonne D)

- ou au contraire, il faut passer en revue toutes les lignes de "DifImport" et éventuellement remplacer certaines "valeurs" de la colonne D par de nouvelles valeurs issues de "Tabelle1"?

A+

galopin01
 Posté le 19/06/2007 à 20:19 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Bonsoir,

En l'absence d'indication j'ai fait dans les deux cas. Mais il faut noter que c'est important : Si on examine seulement les cas ou on a des cellules vides c'est beaucoup plus rapide que si on examine toutes les lignes...

La macro N° 1 examine seulement les lignes ou la référence la colonne D est vide.

Sub galopin1()
Dim iLR%, i%, ref$, isect, Ws1 As Worksheet, Ws2 As Worksheet
Set Ws1 = Worksheets("DIFImport")
Set Ws2 = Worksheets("Tabelle1")
iLR = Ws1.Range("A65536").End(xlUp).Row
For i = 1 To iLR
If Ws1.Cells(i, 4) = "" Then
ref = Ws1.Cells(i, 1)
Set isect = Ws2.Range("B1:B" & iLR).Find(ref, , xlValues)
If Not isect Is Nothing Then Ws1.Cells(i, 4).Value = isect.Offset(0, 1)
End If
Next
End Sub

La seconde macro passe toutes les lignes en revue.

Sub galopin2()
Dim iLR%, i%, ref$, isect, Ws1 As Worksheet, Ws2 As Worksheet
Set Ws1 = Worksheets("DIFImport")
Set Ws2 = Worksheets("Tabelle1")
iLR = Ws1.Range("A65536").End(xlUp).Row
For i = 1 To iLR
ref = Ws1.Cells(i, 1)
Set isect = Ws2.Range("B1:B" & iLR).Find(ref, , xlValues)
If Not isect Is Nothing Then Ws1.Cells(i, 4).Value = isect.Offset(0, 1)
Next
End Sub

A+

julp
 Posté le 20/06/2007 à 10:00 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Bonjour,

Ca a l'air de marcher... Galopin2() est optimal.

si je veux rajouter une condition. Genre je voudrais que le texte colonne A de la Tabelle1 remplace le texte colonne A de la table DIFImport. C'est possible?

Galopin, je te remercie encore. Tu viens de gagner dors et déjà ta bière. Maintenant pour la livraison faudra que tu me tiennes au courant.

Amicalement

Julien

galopin01
 Posté le 20/06/2007 à 12:22 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

bonjour,

Non testé...

Sub galopin2()
Dim iLR%, i%, ref$, isect, Ws1 As Worksheet, Ws2 As Worksheet
Set Ws1 = Worksheets("DIFImport")
Set Ws2 = Worksheets("Tabelle1")
iLR = Ws1.Range("A65536").End(xlUp).Row
For i = 1 To iLR
ref = Ws1.Cells(i, 1)
Set isect = Ws2.Range("B1:B" & iLR).Find(ref, , xlValues)
If Not isect Is Nothing Then
Ws1.Cells(i, 4).Value = isect.Offset(0, 1)
Ws1.Cells(i,1 ).Value = isect.Offset(0, -1)
End if
Next
End Sub

J'ai gagné le PAC ?

A+

Publicité
julp
 Posté le 25/06/2007 à 14:30 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Bonjour,

excuse moi galopin pour cette réponse tardive j'ai du partir dans le cadre de mon boulot. Mais je suis de retour!

je viens de finir de modifier ma table "symboltabelle_regelung" qui remplace "DIFImport". Mais cela fonctionne en partie... Et pourquoi? je n'ai pas trouvé...

Tu peux jeter un petit coup d'oeil stp? Le fichier est disponible sur: http://www.julp.info/excel/galopin.xls

Par exemple pour la cellule ligne 116 dans la table "symboltabelle_regelung" colonne A devrait être repéré dans la table "Tabelle1" à la ligne 564 colonne B.

Puis le texte en colonne A de la table "Tabelle1" devrait remplacer celui de la colonne A de la tabele "symboltabelle_regelung" et le texte en colonne C de la "Tabelle1" remplacer celui de la colonne D de la table "Tabelle1".

Pourquoi ca ne marche pas? Une erreur dans le code de la macro?

En te remerciant par avance pour te remettre dans le bain.

Je te souhaite encore une agréable après midi!

Amicalement

Julien

PS: Tu connais mon mail je crois, je suis un homme de parole pour ta bière je t'invite quand tu veux dans le cadre de mes disponibilitées

galopin01
 Posté le 25/06/2007 à 17:07 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Oups !

Il faut remplacer par cette ligne :

Set isect = Ws2.Range("B:B").Find(ref, , xlValues)

En effet la recherche doit s'effectuer dans toute la colonne de Ws2 !

A+

julp
 Posté le 26/06/2007 à 11:17 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Bonjour,

nickel galopin! T'assure la chaussure...

J'ai encore rencontré une difficulté supplémentaire dans la table "signalliste" dans la colonne C il y a des x, je les copie en colonne D de la table "Tabelle1".

Il faudrait que les données sois gérées comme auparavant avec la condition du x en plus. (Comparer colonne D "Tabelle1"). Si il y un x on copies les données comme auparavant dans la table "symboltabelle_regelung"

Le fichier est disponible sur: http://www.julp.info/excel/galopin.xls

Merci encore par avance,

Amicalement

Julien

PS: File moi ton adresse ou un numéro en privé que je puisse te remercier

galopin01
 Posté le 26/06/2007 à 18:28 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Bonjour,

Je ne comprend pas la question, ou alors il n'y a pas de rapport entre les deux questions.

S'il ya deux valeurs identiques la copie s'effectue qu'il y ait un x ou pas !

A+

julp
 Posté le 27/06/2007 à 17:06 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Bonjour,

en fait c'est une condition supplémentaire que j'aimerais ajouter nécessaire à mon application.

C'est à dire que s'il y a un x dans la colonne D (Tabelle1) alors on remplace le texte en colonne A et C (Tabelle1) dans la colonne A et D (symboltabelle_regelung) comme avant le tout en comparant la valeur de la colonne B (Tabelle1) et colonne A (symboltabelle_regelung).

S'il n'y a pas de x: alors on regarde comme les valeurs entre la colonne B (Tabelle1) et colonne A (symboltabelle_regelung) et on supprime la ligne complète ou la valeur est présente dans la table (symboltabelle_regelung).

Le fichier est disponible sur: http://www.julp.info/excel/galopin.xls

Encore une fois je le répète merci par avance pour ton aide qui m'es précieuse.

Amicalement

Julien

galopin01
 Posté le 27/06/2007 à 21:31 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

bonsoir,

je sais pas trop si j'ai bien compris...

Sub galopin2()
Dim iLR%, i%, ref$, isect, Ws1 As Worksheet, Ws2 As Worksheet
Set Ws1 = Worksheets("symboltabelle_regelung")
Set Ws2 = Worksheets("Tabelle1")
iLR = Ws1.Range("A65536").End(xlUp).Row
For i = 1 To iLR
ref = Ws1.Cells(i, 1)
Set isect = Ws2.Range("B:B").Find(ref, , xlValues)
If Not isect Is Nothing Then
If isect.Offset(0, 2) = "x" Then
Ws1.Cells(i, 4).Value = isect.Offset(0, 1)
Ws1.Cells(i, 1).Value = isect.Offset(0, -1)
Else
Ws1.Cells(i, 5).Value = "x"
End If
End If
Next
For k = iLR To 2 Step -1
If Ws1.Cells(k, 5).Value = "x" Then Ws1.Rows(k).Delete
Next
End Sub
A+
julp
 Posté le 04/07/2007 à 13:55 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Bonjour Galopin,

encore une fois c'étais correct. J'ai travaillé encore un peu plus loin et je bloque sur la réalisation d'une nouvelle macro.

Une condition s'est ajouté à la réalisation de mon projet:

Si en Colonne C de la "symboltabelle_regelung" il y le mot BOOL, alors on copie le texte en colonne E de la Tabelle1.

Tout en respectant les conditions précédentes!

Sub galopin2()
Dim iLR%, i%, ref$, isect, Ws1 As Worksheet, Ws2 As Worksheet
Set Ws1 = Worksheets("symboltabelle_regelung")
Set Ws2 = Worksheets("Tabelle1")
iLR = Ws1.Range("A65536").End(xlUp).Row
For i = 1 To iLR
ref = Ws1.Cells(i, 1)
Set isect = Ws2.Range("B:B").Find(ref, , xlValues)
If Not isect Is Nothing Then
If isect.Offset(0, 2) = "x" Then
Ws1.Cells(i, 4).Value = isect.Offset(0, 1)
Ws1.Cells(i, 1).Value = isect.Offset(0, -1)
Else
Ws1.Cells(i, 5).Value = "x"
End If
End If
Next
For k = iLR To 2 Step -1
If Ws1.Cells(k, 5).Value = "x" Then Ws1.Rows(k).Delete
Next
End Sub

Encore une mission pour toi galopin ;-)

Le document Excel reste disponible sur: http://www.julp.info/excel/galopin.xls

En te remerciant encore pour la rapidité et l'exactitude de tes réponses.

Amicalement,

Julien



Modifié par julp le 04/07/2007 14:05
galopin01
 Posté le 04/07/2007 à 16:46 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

bonsoir,

en supposant que la condition se trouve 3 colonnes plus loin...

...
If isect.Offset(0, 2) = "x" And isect.Offset(0, 5) = "BOOL" Then
...

A+

Publicité
julp
 Posté le 05/07/2007 à 18:00 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

ouais mais non en fait... regarde bien dans la Tabelle1 il y a pas de BOOL 3 colonnes plus loin

En plus je viens de voir en plus que t'as pas du choper le bon fichier, parce que le serveur a fait nimpe...enfin bref

je veux que si en Colonne C de la "symboltabelle_regelung" il y le mot/valeur "BOOL" et si une valeur en colonne B Tabelle1 est égale à une valeur de la colonne A symboltabelle_regelung, alors on copie le texte de la colonne E de la Tabelle1 dans la colonne E de la symboltabelle_regelung...

Je veux aussi traiter les autres valeurs qui n'ont pas de valeurs BOOL dans la colonne C symboltabelle_regelung mais qui ont un x.

En gros on fait comme avant, on a les même conditions! Sauf que si il y a un BOOL dans la colonne C symboltabelle_regelung alors on copie le texte associé colonne E de la Tabelle à l'aide de la comparaison de la colonne A symboltabelle_regelung et colonne B Tabelle1 et si un x colonne D Tabelle1 il y a.

Rajoute cette Macro dans excel:

Sub textbool_copy()
Sheets("signalliste").Select
Range("S2:S2000").Select
Selection.Copy
Sheets("Tabelle1").Select
Range("E1").Select
ActiveSheet.Paste
Columns("E:E").EntireColumn.AutoFit

End Sub

J'espère que tu m'as compris...

Amicalement

Julien

galopin01
 Posté le 05/07/2007 à 19:53 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

bonsoir,

C'est vrai que je n'ai pas chargé le document joint car je lis toujours les questions en diagonale... car je n'ai pas trop de temps... Il m'arrive aussi parfois de travailler ailleurs !

Mais tu pourrais peut-être te débrouiller un peu seul, je t'ai donné un algo je ne vais pas tout te macher !

C'est le même problème que ce soit un BOOL ou un "x", YAKE la copie qui change...

If isect.Offset(0, 2) = "x" Then
'blabla...
ElseIf isect.Offset(0, 2) = "BOOL" Then
'blabla.
Else...

Mais je n'ai peut-être toujours rien compris...

A+

julp
 Posté le 11/07/2007 à 13:23 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Salut Galopin,

déjà bravo pour tes 3000 messages , je trouve ca très bien que tu sois engagé à aider les autres.

Sinon j'ai finalement réussi à réaliser ma fonction mais en 2 macros c'était plus simple pour moi.

Merci encore de m'avoir mis sur la voie!

A bientôt,

Amicalement

Julien

[sujet résolu]



Modifié par julp le 11/07/2007 13:24
Page : [1] 
Page 1 sur 1

Vous devez être connecté pour participer à la discussion.
Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !
Recevoir PC Astuces par e-mail


La Lettre quotidienne +226 000 inscrits
Avec l'actu, des logiciels, des applis, des astuces, des bons plans, ...

Les bonnes affaires
Une fois par semaine, un récap des meilleurs offres.

Les fonds d'écran
De jolies photos pour personnaliser votre bureau. Une fois par semaine.

Les nouveaux Bons Plans
Des notifications pour ne pas rater les bons plans publiés sur le site.

Les bons plans du moment PC Astuces

Tous les Bons Plans
29,99 €SSD Western Digital Green 240 Go à 29,99 €
Valable jusqu'au 21 Janvier

Cdiscount fait une promotion sur le SSD Western Digital Green 240 Go qui passe à 29,99 € livré gratuitement. On le trouve ailleurs à partir de 33 €. Ce SSD à mémoires SLC et TLC offre des vitesses de 540 Mo/s en lecture et 465 Mo/s en écriture.


> Voir l'offre
329 €Smartphone Samsung M51 (6,7 pouces FHD+, 6 Go RAM, 128 Go) à 329 €
Valable jusqu'au 20 Janvier

Amazon fait une belle promotion sur le nouveau smartphone Samsung M51 qui passe à 329 € livré gratuitement au lieu de 399 €. Le smartphone Samsung Galaxy M51 dispose d'un écran Super AMOLED6.7 pouces d'une résolution de 1080 x 2400 pixels, d'un processeur 8 coeurs Snapdragon 730G et 6 Go de RAM. 128 Go de stockage sont présents et sont extensibles par MicroSD (512 Go max). Pour les moments inattendus de la vie, le quadruple appareil photo est idéal. Prenez de superbes photos de votre monde avec un appareil photo principal de 64 MP ou obtenez une image plus large avec l’angle de vue de 123 ° de l’objectif ultra grand angle 12 MP. Le capteur de profondeur 5 MP ajoute un flou d’arrière-plan et l’objectif macro 5 MP optimise la mise au point sur les gros plans.  A l'avant, un appareil photo 32 MP vous permettra de réaliser vos selphies avec un léger flou d'arrière-plan grâce à la mise au point en direct. Il est soutenu par une batterie de 7000 mAh avec recharge rapide. Les fonctionnalités de connectivité du smartphone incluent WiFi, Bluetooth, GPS, Volte, etc. 

Le Galaxy M51 dispose d’un capteur d’empreinte digitale à l’arrière pour vous connecter aux applications compatibles et déverrouiller votre appareil en toute simplicité. Le tout tourne sous Android 10.


> Voir l'offre
60,99 €SSD interne M.2 NVMe Kingston A2000 500 Go à 60,99 €
Valable jusqu'au 21 Janvier

Cdiscount fait une promotion sur le SSD interne M.2 NVMe Kingston A2000 500 Go qui passe à 60,99 € au lieu de plus de 80 € ailleurs. Il offre des vitesses de lecture allant jusqu'à 2200 Mo/s et 2000 Mo/s en écriture.


> Voir l'offre

Sujets relatifs
Calculs sous conditions dans excel 2007
Filtre et Copie sous Excel
organiser mes contacts sous Excel
Excel 2013 sous Windowss 8.1
Graphique Nuage de points sous excel
graphique sous excel
Faire une selection d'adresses sous Excel
Erreur lors de l'enregistrement sous excel
De-selectionner des lignes dans un groupe sous Excel
publipostage avec liste de données sous excel
Plus de sujets relatifs à Copie sous conditions Excel [VBA]
 > Tous les forums > Forum Bureautique