Repérer les triples et n'en garder qu'un

Tyros91

XLDnaute Nouveau
Bonjour,
Actuellement en emploie saisonier j'ai du me plonger dans la programmation vba excel et je rencontre quelque soucis.
Ce site m'a beaucoup aidé à surmonter des problème et après recherche je fait appel à vous pour mon problème :p

Je doit actuellement faire un tableau représentant un chassis dont les ports seront remplie de l'adresse ip du pc connecter sur ce port et du nom de la personne à qui il appartient. Donc 3 colonne.
Ce qu'il faut savoir c'est que certains ports sont des passerelles vers d'autres chassis donc regroupe beaucoup d'adresse, ses ports la doivent porter le nom de "adr multiples".
Il faut aussi prendre en comptes que des telephone peuvent aussi être relié à un PC et donc en conclure que pas plus de 2 adresses peuvents être sur le même port donc tout ports ayant plus de 2 adresses sont des passerelles.

Mon problème est lors du tris des adresses je n'arrive pas à garder une seule ligne contenant "adr multiples" et ne modifie pas non plus, 3 adresse étant pourtant des "adr multiples".

Je joint donc la partie du code contenent ce problème.

Code:
'-----Nettoie "Arp-temp" : détecte les ports où plusieurs adresses différentes arrivent dessus,
'-----laisse une ligne où ce port apparait,
'-----supprime les autres lignes où le port apparait

k = 1
While (Sheets("Arp-temp1").Cells(k, 3).Value <> "")
    tmp = Sheets("Arp-temp1").Cells(k, 3).Value
    tmp2 = Sheets("Arp-temp1").Cells(k, 1).Value
    tmp3 = Sheets("Arp-temp1").Cells(k, 2).Value
    cpt = 0
    j = k + 1
    While (Sheets("Arp-temp1").Cells(j, 3).Value <> "")
        If (Sheets("Arp-temp1").Cells(j, 3).Value = tmp) Then
        
            If (Sheets("Arp-temp1").Cells(j, 1).Value <> tmp2) Then
                cpt = cpt + 1
                j = j + 1
            End If
            
            If (Sheets("Arp-temp1").Cells(j, 1).Value = tmp2) Or (Sheets("Arp-temp1").Cells(j, 2).Value = tmp3) Then
                Sheets("Arp-temp1").Rows(j).Delete
            End If
            
            If cpt > 2 Then     '   <----------------------------- Probleme

            Sheets("Arp-temp1").Cells(k, 1).Value = "adr multiples"      
            Sheets("Arp-temp1").Cells(k, 2).Value = "adr multiples"  
            End If    
            
        Else
            j = j + 1
        End If
    
    Wend
    
    k = k + 1
Wend

En espérant ne pas avoir été trop brouillons.

Je vous remercie de votre attention.

Cordialement Tyros. :)
 
Dernière édition:

pijaku

XLDnaute Occasionnel
Re : Repérer les triples et n'en garder qu'un

RE-
C'est pas très clair...

Les triplons sont situés dans qu'elle colonne?

Tu veux juste garder la première occurence (et toute sa ligne) de chacun des triplons rencontrés?

Quid des doublons, quadruplons...?

Si j'ai bien saisit, j'ai corrigé le début de ta macro :

Code:
Sub MAJ_LT01_IP_bis()
Dim Dico As Object, Rng As Range
Dim i As Long
Dim n As Long
  
'-----Détermine le nombre de ligne dans Arp-temp et le stocke dans n
n = Sheets("Arp-temp1").Range("A" & Rows.Count).End(xlUp).Row
MsgBox ("Lignes de la table Arp : " & n)
'-----

'-----Nettoie "Arp-temp" : garde seulement des adresses en 15.x.x.x et retire les lignes où il n'y a pas de port, et supprime les ports "Tr..."
For i = n To 1
    If Left(Range("A" & i), 3) <> "15." Then Sheets("Arp-temp1").Rows(i).Delete
Next i

'-----
'-----Nettoie "Arp-temp" : détecte les ports où plusieurs adresses différentes arrivent dessus,
'-----laisse une ligne où ce port apparait,
'-----supprime les autres lignes où le port apparait
Set Dico = CreateObject("Scripting.Dictionary")
For Each Rng In Sheets("Arp-temp1").Range("A1", Sheets("Arp-temp1").Range("A" & Rows.Count).End(xlUp))
    If Not Dico.exists(Rng.Value) Then
        Dico(Rng.Value) = ""
    Else
        Sheets("Arp-temp1").Rows(Rng.Row).Delete
    End If
Next Rng
'-----

'-----Détermine le nouveau nombre de ligne dans "Arp-temp" et le stocke dans n
n = Sheets("Arp-temp1").Range("A" & Rows.Count).End(xlUp).Row
MsgBox ("Lignes de la table Arp en ne gardant que des adresses en 15.x.x.x (utilisateurs) et en ne gardant qu'un exemplaire des ports où plusieurs adresses arrivent : " & n)
'-----
 
Dernière édition:

Tyros91

XLDnaute Nouveau
Re : Repérer les triples et n'en garder qu'un

Oui désolé ce n'est pas très clair si on ne connais pas le sujet ^^"

La colonne 3 contient des ports d'un chassi et si il y a plus de 3 adresse differentes sur le même chassis alors cela veut dire qu'il y a une redirection sur un autre chassi (chassi branché sur un autre chassi).

Pour les doublons il faut les garder tous les deux car il est possible d'y avoir un ordinateur branché sur le telephone qui lui même est branché sur le chassi, donc 2 adresse IP et 2 adresse Mac. Dans ce cas déjà traité le programme prend l'adresse IP du doublon et l'imbrique avec la première mais il faut ceci seulement pour les doublons.

Les triplons sont dans la colonne 3 ce sont des ports.
Les triplons, quadruplons et plus doivent avoir marqué "adr multiple" sur la première et deuxième colonne et garder le port mais effectivement ne garder que la première occurence.

Pour les problème rencontré, il y a le fait que les 3 derniere valeurs appartenant à un port multiple ne se voit pas ètre changé et aussi lors de la mise à jour de "LT01-ports" la ou les adresses multiples sont ba la suppression ne se fait pas à chaque fois que l'ont relance la macro.

Voila en espérant que cela soit plus clair si sa ne l'es toujours pas n'hésité pas à me le faire savoir :rolleyes:
C'est moins facile que je ne le pensais de s'exprimer clairement sur un forum :p
 
Dernière édition:

Tyros91

XLDnaute Nouveau
Re : Repérer les triples et n'en garder qu'un

Voila en fonction dans le fichier de base avec les feuille et macro qui sont concernées. :)
 

Pièces jointes

  • Exemple2.xls
    272.5 KB · Affichages: 69
  • Exemple2.xls
    272.5 KB · Affichages: 77
  • Exemple2.xls
    272.5 KB · Affichages: 51
Dernière édition:

pijaku

XLDnaute Occasionnel
Re : Repérer les triples et n'en garder qu'un

Salut,

Désolé de devoir abandonner, mais cela dépasse mes compétences.

Je n'y arrive résolument pas.

Peut être que quelqu'un de plus confirmé pourrait prendre le relais???

Encore toutes mes excuses.
 

david84

XLDnaute Barbatruc
Re : Repérer les triples et n'en garder qu'un

Bonjour,
j'ai jeté un oeil sur tes fichiers et n'y ai absolument rien compris.
Prends les problèmes un par un parce que là tu es en train de nous noyer.
Donc dépose un fichier avec quelques données, explique le problème à régler et note manuellement sur le fichier les résultats attendus.
Ce sera ensuite à toi d'adapter les propositions éventuelles sur ton fichier de travail : ton fichier doit donc contenir des exemples explicites.
Saches tout de même que si tu n'es pas capable d'adapter les propositions que l'on pourrait te faire, cela risque d'être trop compliqué de t'aider.
A+
 

Tyros91

XLDnaute Nouveau
Re : Repérer les triples et n'en garder qu'un

Bonjour,

Désolé ^^"
Le problème c'est que l'on ma demandé de continuer un projet antèrieur donc j'ai du reprendre un code deja à moitié construit et je n'avait quasiment aucune notions de VBA donc j'ai éssayer de me retrousser les manches et de donné ce que j'ai pu, mon supèrieur m'a dit que ce n'etait pas grave si c'etait uniquement les port "adr multiples" qui ne marchait pas parfaitement.

Je fini mon emploie vendredi donc même si je pouvais je doit encore faire quelque truc barbant pour l'entreprise (vive les saisonniers) :D

En tous cas je tenait à remercier vous et tout le monde car j'ai appris vraiment pas mal de chose grâce à ce site sur ce language qui m'était presque inconnue ^^ Je reviendrai certainement je commence mon année de DUT informatique la semaine prochaine :p Et puis pourquoi pas aider les autres plus tard quand je serai un peu plus expérimenté :D

Bonne journée à vous !
A bientôt ! =)
 
Dernière édition:

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 612
Messages
2 090 227
Membres
104 453
dernier inscrit
benjiii88