Nouvelle macro ? need help again

Résolu/Fermé
fx4sky - 22 avril 2018 à 23:00
 fx4sky - 16 mai 2018 à 15:13
Bonjour Alex,

Je me permets de te contacter à nouveau pour du VBA.
J'aurai une dernière demande pour pouvoir comparer deux colonnes entres elles sur deux feuilles différentes et s'il y a une correspondance des deux colonnes de chaque feuilles, afficher en face des lignes correspondantes, le nom d'un pc.

Exemple :
Sur la feuille 1, mes colonnes switch et ports sont les mêmes que sur ma feuille 2
Mais lorsque sur la ligne 3 de ma feuille 1 j'ai "switch 167" et port n°"1" et que sur la feuille n°2 j'ai aussi Switch 167" et port n°1" Alors je souhaiterais afficher (dans la colonne correspondante à la ligne) C2 = "PC1" et "PC2"

Je pense qu'avec cette macro je ne suis pas loin mais il me manque encore des modifs :


Sub ComparaisonDansunefeuille()
j = 1
'comparaison dans une feuille dans un seul classeur
Set sh2 = Sheets("conf switch").Range("A1:B200")
Set sh1 = Sheets("baie").Range("A1:B200")
For Each c In sh1
MaValeur = c.Value
If MaValeur <> "" Then
Set Plage = sh2.Columns("A:B").Cells.Find(MaValeur, lookat:=xlWhole)
If Plage Is Nothing Then
Sheets("baie").Cells(j, 3).Value = c.Value
j = j + 1
End If
End If
Next
End Sub

Bien entendu un petit fichier pour expliciter cette demande :

https://mon-partage.fr/f/dtmvK6o4/
A voir également:

5 réponses

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
23 avril 2018 à 12:17
Bonjour,

une proposition peut-^tre cet aprèm si pas d'orage dans mon coin :-/
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié le 23 avril 2018 à 14:52
re,


Au fait
Je me permets de te contacter à nouveau pour du VBA.
à qui t'adresses tu ?

Proposition quand m^me mais impolie vis à vis de cet inconnu

https://mon-partage.fr/f/E2gvJ59J/

tu dis

0
fx4sky Messages postés 6 Date d'inscription mercredi 21 juillet 2004 Statut Membre Dernière intervention 29 avril 2018
25 avril 2018 à 00:02
Bonsoir Michel,

Effectivement j'avais oublié de faire un répondre au dernier message posté par Alex :

https://forums.commentcamarche.net/forum/affich-34796090-positionner-sur-ligne-resultat-de-recherchev

En tout cas, merci pour ton aide grandement appréciée.
J'ai fait un test avec la macro sur un bouton mais ça plante avec une erreur et rien ne s'affiche sur la feuille "baie" dans la colonne C ?!

J'ai du oublier quelque chose j'imagine...

https://mon-partage.fr/f/ilsCMUy4/

Je ne comprends pas tout le code malgré les commentaires lol

Bonne soirée

Cordialement

Jean
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
25 avril 2018 à 08:48
bonjour
juste une faute de frappe! (j'avais essayé avec succès mais je n'ai pas du sauvegarder)

remplacer sur cette ligne le ";" par un ":" comme ci dessous
.Range("C2:C10000").ClearContents

pour la compréhension, documente toi sur l'objet "dictionary" dans l'aide en ligne VBa


0
Very Nice !
Super !
Merci Beaucoup depuis le temps que je cherche !
c'est exactement ce que je voulais.
Je n'ai plus qu'a adapter au fichier définitif et à regarder l'objet "dictionary"
:-)
Grand merci
0
fx4sky Messages postés 6 Date d'inscription mercredi 21 juillet 2004 Statut Membre Dernière intervention 29 avril 2018
27 avril 2018 à 17:30
Bonjour Michel,

Juste encore une petite question suite à l'adaptation du code à mon fichier; Nouvelle erreur : Erreur d'exécution '9' :

L'indice n'appartient pas à la sélection.

J'ai renommé mes feuilles, changé une variable mais je pense qu'il ne trouve pas des les premières lignes la chaine "FRDISW..." car certaines cellules contiennent autre chose que "FRDISW" ou parfois elles sont vides.

https://mon-partage.fr/f/hkKFgP3N/

est ce lié à ce problème de comparaison du contenu de cellule avec DIM T_FRDISW ? qui renvoie une valeur null ou différentes ?

Merci

cordialement
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
29 avril 2018 à 10:51
Bonjour
tu écris:
suite à l'adaptation du code à mon fichier;

un code est unique pour une application demandée sur un fichier unique, si ton fichier initial ne correspond pas à la réalité, je ne peux rien pour toi....
0
fx4sky Messages postés 6 Date d'inscription mercredi 21 juillet 2004 Statut Membre Dernière intervention 29 avril 2018
29 avril 2018 à 23:01
Effectivement, un code est propre à un fichier bien spécifique.

Du coup j'ai essayé d'adapter l'exemple à mon fichier d'origine en changeant les noms de colonnes et variables mais sans succès.

Voici le fichier original :

https://mon-partage.fr/f/5HIK9V5l/

L'adaptation que j'ai essayé de faire avec de la macro que tu m'as envoyée :

https://mon-partage.fr/f/hkKFgP3N/

Il doit s'agir d'un problème de syntaxe différente peut etre ?

Je n'ai pas encore compris toute le subtilité du code ;-)

Cordialement

fx
0
Bonjour Michel,

Au risque d'abuser encore un peu de ton temps, de ta patience, et de ton savoir.

J'ai du coup repris le code pour mon fichier final :

https://mon-partage.fr/f/5HIK9V5l/

mais il y a deux lignes que j'ai du mal à comprendre :

Si j'ai bien compris le code compare les colonnes 1 et 2 des deux feuilles et reprend le contenu de la cellule C de la feuille 1 si les colonnes sont identiques sur la même ligne et la rajoute sur la cellule C de la feuille 2 ?

"T_baie = .Range("A2:C" & Derlig)
T_sw = .Range("A3:C" & Derlig)"

pour mon nouveau fichier, les 3 colonnes ne sont pas les unes à la suite des autres, est ce que je peux tout de même utiliser les mêmes commandes ci dessus mais avec mes colonnes décalées :


1°) Colonnes EF à comparer avec colonnes M et N

2°) si identiques, copier cellule D de la feuille "BDD" en cellule H de la feuille "baie HSA" :

ce qui devrait donner ceci :

https://mon-partage.fr/f/WsISusst/


Option Explicit
'---------------------------------------------

Sub lister_postes_par_swich()
Dim Derlig As Integer, Lig As Integer, T_baie, Ref As String, D_baie As Object
Dim T_sw

Application.ScreenUpdating = False
'----------------memorisation feuille baie
With Sheets("baie HSA")
Derlig = .Columns("E").Find(what:="*", searchdirection:=xlPrevious).Row
'mémorisation du couple matos-port
T_baie = .Range("E2:H" & Derlig)
'creation d'un dico avec les références des couples
Set D_baie = CreateObject("scripting.dictionary")
For Lig = 1 To UBound(T_baie)
Ref = T_baie(Lig, 1) & " " & T_baie(Lig, 2)
If Not D_baie.exists(Ref) Then: D_baie.Add Ref, ""
Next
End With
'-------recherche des PC d'un couple
With Sheets("BDD")
Derlig = .Columns("M").Find(what:="*", searchdirection:=xlPrevious).Row
'mémorisation du couple matos-port
T_sw = .Range("M3:D" & Derlig)
For Lig = 1 To UBound(T_baie)
Ref = T_sw(Lig, 1) & " " & T_sw(Lig, 2)
'construction de la liste concaténée des PC du couple
If D_baie.exists(Ref) Then: D_baie.Item(Ref) = D_baie.Item(Ref) & " " & T_sw(Lig, 3)
'MsgBox D_baie.Item(Ref) verif essai
Next
End With

'---------restitution
With Sheets("baie HSA")
.Range("H2:H10000").ClearContents
.Range("H2").Resize(D_baie.Count, 1) = Application.Transpose(D_baie.items)
.Activate
End With

End Sub

?

D'autre part, est ce qu'il y a un filtre du nombre de caractères existants après "sw" ? car mes switch sont nommés FRDISWxxx et non SWxxx ?

d'où le ==> "& T_sw(Lig, 3)"

Je te remercie par avance pour tes lumières.

Cordialement

fx
0