Ajout de conditions sur deux macros qui ont la même fonction

Fermé
NkRedoxx - 8 juin 2016 à 09:34
ccm81 Messages postés 10907 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 janvier 2025 - 9 juin 2016 à 13:42
Bonjour, je dispose de deux macros quasiment identique et qui font exactement la même chose ! J'aimerais poser une condition pour les deux macros. J'aimerais en fait que la macro1 traite que les num de switch EAR 268,269 et 270 et que la macro2 fasse les num de switch EAR 266 et 267. Ma macro 1 renvoie un résultat en colonne B de SOMMAIRE et ma macro 2 en colonne C. Les numéros des switchs se trouve en colonne E en BAIE AT10 et en colonne A de DATA SWITCH en fonction de ces deux colonnes . Je vous laisse ci-joint tous les documents merci à vous !

Macro 1 : http://www.cjoint.com/c/FFihHzfJ8XC
Macro 2 : http://www.cjoint.com/c/FFihIdqO8VC
Fichier Excel : http://www.cjoint.com/c/FFihINhFNnC
A voir également:

4 réponses

Frenchie83 Messages postés 2240 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 338
8 juin 2016 à 13:01
Bonjour
Si j'ai bien compris
Option Explicit
    Const F1 = "BAIE AT10"
    Const lidebF1 = 2
    Const coF1 = "F"
    Const F2 = "DATA SWITCH"
    Const lidebF2 = 2
    Const coF2 = "B"
    Const FR = "SOMMAIRE"
    Const lidebFR = 2
    Const coFRB = "B"
    Const coFRC = "C"
    Const nonOK = "NO BRASS NON AFFECT DON'T CONNECT "
    
Public Sub Ports_Dispo()
    Dim liF As Long, lifinF As Long
    Dim obj As Object
    Dim dico As Object, cle As String, cles, valeurs, nbcles As Long, nucle As Long
    Set dico = CreateObject("scripting.dictionary")
    With Sheets(F1)
        lifinF = .Range(coF1 & Rows.Count).End(xlUp).Row
        For liF = lidebF1 To lifinF
            cle = .Range(coF1 & liF).Value
            If InStr(1, nonOK, cle) = 0 And .Cells(liF, "E") = "EAR268" Or InStr(1, nonOK, cle) = 0 And .Cells(liF, "E") = "EAR269" Or InStr(1, nonOK, cle) = 0 And .Cells(liF, "E") = "EAR270" Then
                If Not dico.exists(cle) Then dico.Add cle, 1
            End If
        Next liF
    End With
    With Sheets(F2)
        lifinF = .Range(coF2 & Rows.Count).End(xlUp).Row
        For liF = lidebF2 To lifinF
            cle = .Range(coF2 & liF).Value
            If InStr(1, nonOK, cle) = 0 And .Cells(liF, "E") = "EAR268" Or InStr(1, nonOK, cle) = 0 And .Cells(liF, "E") = "EAR269" Or InStr(1, nonOK, cle) = 0 And .Cells(liF, "E") = "EAR270" Then
                If dico.exists(cle) Then
                    dico.Remove (cle)
                Else
                    dico.Add cle, 1
                End If
            End If
        Next liF
    End With
    cles = dico.keys
    valeurs = dico.items
    nbcles = dico.Count
    Sheets(FR).Range(coFRB & lidebFR).Resize(nbcles - 1, 1) = Application.Transpose(cles)
End Sub

Public Sub Ports_Dispo266267()
    Dim derlig As Long
    Dim liF As Long, lifinF As Long
    Dim obj As Object
    Dim dico As Object, cle As String, cles, valeurs, nbcles As Long, nucle As Long
    Set dico = CreateObject("scripting.dictionary")
    With Sheets(F1)
        lifinF = .Range(coF1 & Rows.Count).End(xlUp).Row
        For liF = lidebF1 To lifinF
            cle = .Range(coF1 & liF).Value
            If InStr(1, nonOK, cle) = 0 And .Cells(liF, "A") = "EAR266" Or InStr(1, nonOK, cle) = 0 And .Cells(liF, "A") = "EAR267" Then
                If Not dico.exists(cle) Then dico.Add cle, 1
            End If
        Next liF
    End With
    With Sheets(F2)
        lifinF = .Range(coF2 & Rows.Count).End(xlUp).Row
        For liF = lidebF2 To lifinF
            cle = .Range(coF2 & liF).Value
            If InStr(1, cle, nonOK) = 0 And .Cells(liF, "A") = "EAR266" Or InStr(1, nonOK, cle) = 0 And .Cells(liF, "A") = "EAR267" Then
                If dico.exists(cle) Then
                    dico.Remove (cle)
                Else
                    dico.Add cle, 1
                End If
            End If
        Next liF
    End With
    cles = dico.keys
    valeurs = dico.items
    nbcles = dico.Count
    With Sheets(FR)
        .Range(coFRC & lidebFR).Resize(nbcles - 1, 1) = Application.Transpose(cles)
        Application.DisplayAlerts = False
        With Worksheets("SOMMAIRE")
            derlig = .Range("C" & Rows.Count).End(xlUp).Row
            Columns("C:C").Select
            .Range("$C$1:$C$" & derlig).RemoveDuplicates Columns:=1, Header:=xlYes
        End With
        Application.DisplayAlerts = True
    End With
End Sub

A tester
Cdlt
0
NkRedoxx Messages postés 63 Date d'inscription mercredi 8 juin 2016 Statut Membre Dernière intervention 20 juin 2016
8 juin 2016 à 13:59
Non, le résultat n'est pas bon je te met mon fichier Excel ci-joint avec les résultats attendu pour mieux te faire idée :
http://www.cjoint.com/c/FFil6k8JAOC
0
NkRedoxx Messages postés 63 Date d'inscription mercredi 8 juin 2016 Statut Membre Dernière intervention 20 juin 2016
8 juin 2016 à 14:09
Pour résumé une macro renvoie les éléments uniques présent dans les colonnes F (BAIE AT10) et B (DATA SWITCH) dans SOMMAIRE respectivement en B . J'ai décider de créer deux macros pour la simple et bonne raison que certains switchs ont le même numéro de port (EAR 266 --> G1:X et EAR 268 --> G1:X) par exemple et donc dans le cas ou mon port G1/0/1 est utilisée sur EAR 266, il ne le sera pas forcément sur EAR 268 donc c'est pour cela que j'ai besoin de séparer en deux blocs (EAR 268,269 et 270 d'un coté G1/X , G2/X, G3/X) et de l'autre (EAR 266 et 267 G1/X et G2/X) c'est pour cela que j'ai besoin de deux macros qui renvoie d'un côté les numéro de ports du premier blocs et de l'autre du second. DATA SWITCH contient tout les ports possibles alors que BAIE AT10 contient seulement les ports utilisés c'est pour cela que j'ai besoin d'une voire même deux macros à l'heure actuel capable de me transmettre dans SOMMAIRE les ports dispo en EAR 266, 267 et 270 en colonne B) et les ports dispo en (EAR 266,267 en colonne C) Voilà pour le récap
Cordialement,
0
ccm81 Messages postés 10907 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 janvier 2025 2 430
8 juin 2016 à 15:10
Bonjour

Un essai à tester
http://www.cjoint.com/c/FFinkfTCrZe

Cdlmnt
0
NkRedoxx Messages postés 63 Date d'inscription mercredi 8 juin 2016 Statut Membre Dernière intervention 20 juin 2016
8 juin 2016 à 15:30
J'ai une erreur dans la deuxième macro (Ports_Dispo266267)
(Incompatibilité de type)
sur cette ligne
.Range(coFR & lidebFR).Resize(nbcles - 1, 1) = Application.Transpose(cles) 
:
0
NkRedoxx Messages postés 63 Date d'inscription mercredi 8 juin 2016 Statut Membre Dernière intervention 20 juin 2016
8 juin 2016 à 15:32
La macro un ne renvoie pas le bon résultat comme sur mon fichier :
http://www.cjoint.com/c/FFil6k8JAOC
0
ccm81 Messages postés 10907 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 janvier 2025 2 430
8 juin 2016 à 16:09
Dans la feuille BAIE AT10 lignes 219 à 324 il n'y a pas de n° Switch, est ce normal ?
0
NkRedoxx Messages postés 63 Date d'inscription mercredi 8 juin 2016 Statut Membre Dernière intervention 20 juin 2016
8 juin 2016 à 16:12
NON ce n'es pas normal je te redonne le fichier avec joint ici :
http://www.cjoint.com/c/FFiomZCK1AC
0
ccm81 Messages postés 10907 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 janvier 2025 2 430
Modifié par ccm81 le 9/06/2016 à 13:42
Je crois que j'ai du mal à comprendre le problème
Pour chacune des anomalies (cellules en couleur), peux tu me dire pourquoi
http://www.cjoint.com/c/FFjlJUv6ePe

Ou/et mieux

Peux tu me donner des exemples commentés de résultats attendus
Exemples :
1. pour le port G1/0/1 switchs 266 et 268, je dois le retrouver dans la liste des dispo 266 et pas das celle des 268
2. ....
En essaynat de décrire tous les cas possibles

Cdlmnt
0