Nouvelle macro ? need help again

Résolu
fx4sky -  
 fx4sky -
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/

5 réponses

  1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonjour,

    une proposition peut-^tre cet aprèm si pas d'orage dans mon coin :-/
    0
  2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
    1. fx4sky Messages postés 6 Statut Membre
       
      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
  3. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
    1. fx4sky
       
      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
  4. fx4sky Messages postés 6 Statut Membre
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
    1. fx4sky Messages postés 6 Statut Membre
       
      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
    2. fx4sky
       
      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