IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Comparer et tester Cellules [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 164
    Par défaut Comparer et tester Cellules
    Bonjour,

    J'ai un fichier Excel avec une Macro qui m'extrait simultanement pour plusieurs fichiers word qui se trouvent tous dans le meme dossier une partie de données ....parmis c'est données extraites pour chaque fichier y a les deux colonnes Version OS et Version SGBD

    Ce que je voudrais faire c'est de pourvoir faire un test sur ces deux colonnes

    Exemple du Test :
    Si pour chaque Version OS et Version SGBD extraites a patir d'un fichier Word est differente a ces versions (6.1 7.1 / 5.3 / 5.4 / 5.5 / 6.0 / 6.1 / Server 2008 SP2 / Server 2008 R2 / Server 2008 R2 SP1 / 5.1 / 5.5 / 11.2 / 2005 SP4 / 2008 SP2 / 2008 R2 SP1 / 8.4 / 9.0.3 / 9.7 / 2.6.3 / 2.6.4 )

    Alors on recopie les données dans un autre fichier Excel exactement dans la première feuille de calcul « Obsolescence »
    Sinon on les recopie dans la deuxieme feuille « Greenwich » dans ce autre fichier Excel


    Je vous joins mon Fichier Excel (Une ligne vide est laissée entre chaque partie de donnée d'un seul fichier extraites)

    Merci

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    Avec les fichiers en colonne A, les versions en colonne B et C :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim C As Range, Versions As String
    Versions = "6.1 7.1 / 5.3 / 5.4 / 5.5 / 6.0 / 6.1 / Server 2008 SP2 / Server 2008 R2 /" & _
    "Server 2008 R2 SP1 / 5.1 / 5.5 / 11.2 / 2005 SP4 / 2008 SP2 / 2008 R2 SP1 / 8.4 / 9.0.3 / 9.7 / 2.6.3 / 2.6.4 "
    For Each C In Range([A2], Cells(Rows.Count, 1).End(xlUp))
         If Len(applicatiion.Substitute(Versions, C.Offset(, 1).Value, "")) = Len(Versions) And _
            Len(applicatiion.Substitute(Versions, C.Offset(, 2).Value, "")) = Len(Versions) Then
        'alors copie dans obsolence
        Else
        'sinon copie dans Greenwich
        End If
    Next C

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 164
    Par défaut
    Salut Daniel.C

    Merci pour ta réponse

    Je voudrais si c'est possible que tu jette un coup d'oeil dans mon fchier Excel ou je veux faire un test...en effet ta réponse est intressante mais je sais pas si elle fait ce que je veux

    Je me re explique :

    Dans mon fichier Excel, j'ai une Macro qui m'extrait simultanement une partie des donnes a partir de plusieurs fichiers Word qui se trouvent tous dans le meme dossier.

    A la fin de l'extraction j'ai dans mon fichier Excel une colonne Nom du projet (Projet = Fichier Word) qui contient le nom du projet de chaque fichier Word ainsi que des données de chaque nom du projet dont Version OS et Version SGBD

    Ce que je veux faire c'est de comparer ces versions aprés extraction bien sur , si y a au moins une est differente a ces versions (6.1 7.1 / 5.3 / 5.4 / 5.5 / 6.0 / 6.1 / Server 2008 SP2 / Server 2008 R2 / Server 2008 R2 SP1 / 5.1 / 5.5 / 11.2 / 2005 SP4 / 2008 SP2 / 2008 R2 SP1 / 8.4 / 9.0.3 / 9.7 / 2.6.3 / 2.6.4 )

    Alors on recopie les données de chaque fichier sur lequel le test est vrai ( comme son nom du projet + ces autres données : Version et Nom OS/SGBD et WAS) dans un autre fichier Excel exactement dans la première feuille de calcul « Obsolescence »
    Sinon on les recopie dans la deuxieme feuille « Greenwich » dans ce meme autre fichier Excel

    Je vous joins mon Fichier Excel (Une ligne vide est laissée entre chaque partie de donnée d'un seul fichier extraites)

    Merciii
    Fichiers attachés Fichiers attachés

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Teste cette macro en changeant le nom du classeur de destination.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    Sub test2()
    Dim C As Range, Versions As String, NomProjet As String, Sh As Worksheet, Ligne1 As Long, Ligne2 As Long
    Set Sh = Workbooks("Classeur3").Sheets(1)
    Ligne1 = 3
    Ligne2 = 3
    Versions = "6.1 7.1 / 5.3 / 5.4 / 5.5 / 6.0 / 6.1 / Server 2008 SP2 / Server 2008 R2 /" & _
    "Server 2008 R2 SP1 / 5.1 / 5.5 / 11.2 / 2005 SP4 / 2008 SP2 / 2008 R2 SP1 / 8.4 / 9.0.3 / 9.7 / 2.6.3 / 2.6.4 "
    With ThisWorkbook.Sheets("Elements d'obsolescence ")
        For Each C In .Range(.[B4], .Cells(.Rows.Count, 2).End(xlUp))
             If C.Value <> "" Then
                 If C.Offset(, -1).Value <> "" Then NomProjet = C.Offset(, -1).Value
                 If Len(Application.Substitute(Versions, C.Offset(, 1).Value, "")) = Len(Versions) Or _
                    Len(Application.Substitute(Versions, C.Offset(, 2).Value, "")) = Len(Versions) Then
                'alors copie dans obsolence
                    Ligne1 = Ligne1 + 1
                    Sh.Cells(Ligne1, 1) = NomProjet
                    Sh.Cells(Ligne1, 2).Resize(, 6).Value = C.Resize(, 6).Value
                Else
                'sinon copie dans Greenwich
                    Ligne2 = Ligne2 + 1
                    Sheets("Elements Greenwich").Cells(Ligne2, 1) = NomProjet
                    Sheets("Elements Greenwich").Cells(Ligne2, 2).Resize(, 6).Value = C.Resize(, 6).Value
                End If
            End If
        Next C
    End With
    End Sub

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 164
    Par défaut
    Re,

    Merci encore une fois pour tes réponses

    Juste une chose je mets ou cette macro ?
    Es ce que dans mon Nouveau classeur Excel qui va recevoir le resultat du test dans ce cas le fichier s'appllera Classeur3
    Ou bien dans l'ancien celui que je t'ai joint, ou j'ai déjè extrait mes données ?

    Autre chose quand j'excute ta macro ya une erreur 9 : L'indice n'appartient pas à la selection sur la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Sh = Workbooks("Classeur3").Sheets(1)
    Petite précision :
    Dan mon fichier Excel que je t'ai joint y a qu'une seule feuille de calcul car j'extrais tout sur la meme fille puisque c'est dance ce fichier que je vais faire le Test
    Dans mon nouveau fichier Excel y aura deja les nom de colonnes "Nom Projet"
    Nom et Version des OS, SGBD et WAS etc

    Merciii

  6. #6
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Juste une chose je mets ou cette macro ?
    Dans un module standard (Module3 qui est vide, par exemple). Dans le classeur que tu as mis en pièce jointe.

    Es ce que dans mon Nouveau classeur Excel qui va recevoir le resultat du test dans ce cas le fichier s'appllera Classeur3
    Non, tu l'appelles comme tu veux. Tu modifies juste la macro en conséquence.

    Autre chose quand j'excute ta macro ya une erreur 9 : L'indice n'appartient pas à la selection
    Est-ce que tu as créé un classeur nommé "Classeur3" ?

  7. #7
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 164
    Par défaut
    Re,

    Oui j'ai déjà crée un classeur qui s'apelle "Classeurs3" vide avec les feuilles de calcul "Elements Greenwich et "Obsolescence" et les noms de colonnes necessaires pour le resultat

    Puis j'ai mis ta macro dans le module3 dans l'ancien fichier Excel que je t'ai joint déja mais j'ai toujours l'erreur 9

    Regarde je t'ai joint les deux fichier Excel pour mieux voir et tester

    Merci encore une fois
    Fichiers attachés Fichiers attachés

  8. #8
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Ton classeur s'appelle "Classeur3.xlsm" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Sh = Workbooks("Classeur3.xlsm").Sheets(1)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    Sub test2()
     
    Dim C As Range, Versions As String, NomProjet As String, Sh As Worksheet, Ligne1 As Long, Ligne2 As Long
    Dim Sh2 As Worksheet
    Set Sh = Workbooks("Classeur3.xlsm").Sheets("Elements d'obsolescence ")
    Set Sh2 = Workbooks("Classeur3.xlsm").Sheets("Elements Greenwich")
    Ligne1 = 3
    Ligne2 = 3
    Versions = "6.1 7.1 / 5.3 / 5.4 / 5.5 / 6.0 / 6.1 / Server 2008 SP2 / Server 2008 R2 /" & _
    "Server 2008 R2 SP1 / 5.1 / 5.5 / 11.2 / 2005 SP4 / 2008 SP2 / 2008 R2 SP1 / 8.4 / 9.0.3 / 9.7 / 2.6.3 / 2.6.4 "
    With ThisWorkbook.Sheets(1)
        For Each C In .Range(.[B4], .Cells(.Rows.Count, 2).End(xlUp))
             If C.Value <> "" Then
                 If C.Offset(, -1).Value <> "" Then NomProjet = C.Offset(, -1).Value
                 If Len(Application.Substitute(Versions, C.Offset(, 1).Value, "")) = Len(Versions) Or _
                    Len(Application.Substitute(Versions, C.Offset(, 2).Value, "")) = Len(Versions) Then
                'alors copie dans obsolence
                    Ligne1 = Ligne1 + 1
                    Sh.Cells(Ligne1, 1) = NomProjet
                    Sh.Cells(Ligne1, 2).Resize(, 6).Value = C.Resize(, 6).Value
                Else
                'sinon copie dans Greenwich
                    Ligne2 = Ligne2 + 1
                    Sheets("Elements Greenwich").Cells(Ligne2, 1) = NomProjet
                    Sheets("Elements Greenwich").Cells(Ligne2, 2).Resize(, 6).Value = C.Resize(, 6).Value
                End If
            End If
        Next C
    End With
    End Sub

  9. #9
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 164
    Par défaut
    Bonjour Daniel.C ,

    J'ai fait comme tu me l'as demandé mais ça ne marche pas ;

    Je ne comprends pas pourquoi je dois placer ma macro dans le fichier Excel dans lequel y a les données extraites des fichiers Word...

    Ce que je veux faire, c'est de placer la Macro dans un fichier Excel vide avec les feuilles de calculs vides "Elements d'obsolescence" et "Elements Greenwich"
    Je lance cette macro qui va appeller mon ancien fichier ou y a chaque partie de donnée d'un fichier word qui sont séparées avec une ligne vide pour faire le test et pourvoir les recopier dans l'une des feuilles de calculs demon fichier Excel vide qui correspondes selon le test fait

    Merci

  10. #10
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Ecoute, je ne vois pas où tu as demandé que cette macro soit dans le classeur cible. Je ne vois d'ailleurs pas en quoi ça te gêne. A moins que j'aie manqué cette demande, je ne peux pas passer mon temps à modifier mon code suivant tes demandes successives. Je te laisserai le soin de modifier ce code.

  11. #11
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 164
    Par défaut
    Bonjour Daniel.C

    désolé pour mon message un peu mal exprimé , en effet c'est moi qui n'as pas compris bien car tu as raison c'est maintenant que j'ai compris que tout simplement la macro doit etre enregisrter dans un module standard de mon fichier Excel ou y'a déjà les donnees

    Mais j'ai décidé de changer de methode pour faire un test simple pour ensuite avoir plus de faciliter a le compliquer pour mon besoin

    J'ai réalisé une macro qui s'appelle Tri que j'ai placé dans le module 2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    Sub Tri()
       Dim sVersion As String
       Dim Version As String
       Dim sVersionOS As String
       Dim sVersionSGBD As String
       Dim rg As Range, C As Range
       Dim ar
       'Les versions doivent être écrites de cette façon, avec un "/" comme séparateur :
       ' XXXX/yyyyy/zz zz/wwww
       sVersion = "6.1/7.1/5.4/5.5/6.0/2008 SP2/2008 R2/2008 R2 SP1/5.1/5.5/11.2/2005 SP4/8.4/9.0.3/9.7/2.6.3/2.6.4"
       Set rg = Range("A4:A20")     '<< ADAPTER LA PLAGE
       For Each C In rg
          If C.Offset(0, 2) <> "" Or C.Offset(0, 4) <> "" Then
             If (C.Offset(0, 2) <> "" And InStr(1, sVersion, C.Offset(0, 2)) > 0) Or _
                (C.Offset(0, 4) <> "" And InStr(1, sVersion, C.Offset(0, 4)) > 0) Then
     'Optionnel, juste pour montre       
             C.Offset(0, 8) = "Vers Obsolescence"    les lignes trouvées
                'Copier vers Obsolescence (À ADAPTER)
             Else
                C.Offset(0, 8) = "Vers Greenwich"
                'Copier vers Greenwich (À ADAPTER)
             End If
          End If
       Next C
    End Sub
    qui fait le test suivant :

    comparer les version OS et SGBD de chaque ligne , si y'a la version OS ou la version SGBD est différente aux sVersion (""6.1/7.1/5.4/5.5/6.0/2008 SP2/2008 R2/2008 R2 SP1/5.1/5.5/11.2/2005 SP4/8.4/9.0.3/9.7/2.6.3/2.6.4"")
    Alors on écris à cote de chaque ligne testée "Vers Obsolescence"
    Sinon on écris à cote de chaque ligne testée "Vers Greenwich"

    Ps : Je sais pas si le test faux c'est a cause de quelques versions qui sont à trois chiffre c'est a dire 5.5.14 comme tu peux le remarquer dans le fichier Excel dans ce cas je peux rajouter un zero pour les versions a deux chiffres dans sVersion

    Le problème
    Toujours Dans le fichier Excel quand je lance cette macro, sur la ligne 4 (La premiere ligne a tester) le resultat renvoit "Ver Obsolescence"; alors que la Version de OS (=5.5) et SGBD (= 5.5.4) sont présentes dans sVersion donc normalement le resulat doit renvoyer Greenwich

    Ps : Je sais pas si le test faux c'est a cause de quelques versions qui sont à trois chiffre c'est a dire 5.5.14 comme tu peux le remarquer dans le fichier Excel dans ce cas je peux rajouter un zero pour les versions a deux chiffres dans sVersion

    Merci
    Fichiers attachés Fichiers attachés

  12. #12
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Peux-tu me dire quelle ligne est en anomalie ?

  13. #13
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 164
    Par défaut
    Re,

    J'ai constaté que le test marche pas vraiment sur toutes les lignes, en regardnt dans presque toutes lignes 4, 6, 8, 14, 15, 16 le test renvoit un résulat faux

    Prenons l'exemple de la ligne 10 on voit que la version OS (AIX virtualisé = v5.3) et la version SGBD (RMAN=10gR2) normalement le resultat doit nous renvoyer "Vers Obsolescence" puisque au moins une de ces version est différente de celles que j'ai posé dans le test alors que le test me renvoit "Vers Greenwich"

    Merci

  14. #14
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Modifie le test :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
             If (C.Offset(0, 2) <> "" And InStr(1, sVersion, C.Offset(0, 2)) = 0) Or _
                (C.Offset(0, 4) <> "" And InStr(1, sVersion, C.Offset(0, 4)) = 0) Then
    Bonjour,

    Pour éviter de trouver une correspondance pour 123 quand il y a 1234 dans la liste des versions, j'ai modifié le code comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
       Dim arrVersion As Variant
       Dim Version As String
       Dim sVersionOS As String
       Dim sVersionSGBD As String
       Dim rg As Range, C As Range
       Dim ar
     
     
       'Les versions doivent être écrites de cette façon, avec un "/" comme séparateur :
       ' XXXX/yyyyy/zz zz/wwww
     
       arrVersion = Array("6.1", "7.1", "5.4", "5.5", "6.0", "2008 SP2", "2008 R2", "2008 R2 SP1", "5.1", "5.5", "11.2", _
       "2005 SP4", "8.4", "9.0.3", "9.7", "2.6.3", "2.6.4")
     
       Set rg = Range("A4:A20")     '<< ADAPTER LA PLAGE
     
       For Each C In rg
          If C.Offset(0, 2) <> "" Or C.Offset(0, 4) <> "" Then
             If (C.Offset(0, 2) <> "" And Not IsNumeric(Application.Match(C.Offset(0, 2), arrVersion, 0))) Or _
                (C.Offset(0, 4) <> "" And Not IsNumeric(Application.Match(C.Offset(0, 4), arrVersion, 0))) Then
     
                C.Offset(0, 8) = "Vers Obsolescence"     'Optionnel, juste pour montre les lignes trouvées
                'Copier vers Obsolescence (À ADAPTER)
             Else
                C.Offset(0, 8) = "Vers Greenwich"
                'Copier vers Greenwich (À ADAPTER)
             End If
     
          End If
       Next C

  15. #15
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 164
    Par défaut
    Bonjour Daniel.C,

    Ta Macro marche très bien , elle me revoit un resultat juste ....
    Merci beaucoup pour tes réponses rapides et surtout justes

    Une dérniere chose !
    Comme tu peux remarquer dans mon fichier Excel, des fois j'ai des versions qui ont trois chiffres séparés par un point (Ex: 5.5.14 pour la version SGBD de la ligne 4 et 5)
    Es ce que y'a un moyen de tester ces version juste par apport aux deux premiers chiffres qui sont séparés par un point ?

    Merciii

  16. #16
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    C'était pour justement éviter cela. Oublie mon dernier code et reviens à la précédente version.

  17. #17
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 164
    Par défaut
    Re,

    Quand je modifie la ligne 4 avant le test en mettant
    RHEL (RedHat Enterprise Linux) = 5.4.11 MySQL = 5.5.14

    Cette Macro :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    Sub Tri()
       Dim sVersion As String
       Dim Version As String
       Dim sVersionOS As String
       Dim sVersionSGBD As String
       Dim rg As Range, C As Range
       Dim ar
       'Les versions doivent être écrites de cette façon, avec un "/" comme séparateur :
       ' XXXX/yyyyy/zz zz/wwww
       sVersion = "6.1/7.1/5.4/5.5/6.0/2008 SP2/2008 R2/2008 R2 SP1/5.1/5.5/11.2/2005 SP4/8.4/9.0.3/9.7/2.6.3/2.6.4"
       Set rg = Range("A4:A20")     '<< ADAPTER LA PLAGE
       For Each C In rg
          If C.Offset(0, 2) <> "" Or C.Offset(0, 4) <> "" Then
             If (C.Offset(0, 2) <> "" And InStr(1, sVersion, C.Offset(0, 2)) = 0) Or _
                (C.Offset(0, 4) <> "" And InStr(1, sVersion, C.Offset(0, 4)) = 0) Then
     'Optionnel, juste pour montre       
             C.Offset(0, 8) = "Vers Obsolescence"    les lignes trouvées
                'Copier vers Obsolescence (À ADAPTER)
             Else
                C.Offset(0, 8) = "Vers Greenwich"
                'Copier vers Greenwich (À ADAPTER)
             End If
          End If
       Next C
    End Sub
    me renvoit un resultat est FAUX ("Vers Obsolescence") alors que dans le test y'a 5.4 et 5.5 donc je pense que cette macro ne fait pas uniquement le test sur les deux premiers chiffres qui son séparés par un point comme je le voulais

    Mercii

  18. #18
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Vérifie ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    Sub Tri()
     
     
       Dim arrVersion As Variant
       Dim Version As String
       Dim sVersionOS As String
       Dim sVersionSGBD As String
       Dim rg As Range, C As Range
       Dim ar
       Dim Test1 As Boolean
       Dim Test2 As Boolean
     
     
       'Les versions doivent être écrites de cette façon, avec un "/" comme séparateur :
       ' XXXX/yyyyy/zz zz/wwww
     
       arrVersion = Array("6.1", "7.1", "5.4", "5.5", "6.0", "2008 SP2", "2008 R2", "2008 R2 SP1", "5.1", "5.5", "11.2", _
       "2005 SP4", "8.4", "9.0.3", "9.7", "2.6.3", "2.6.4")
     
       Set rg = Range("A4:A20")     '<< ADAPTER LA PLAGE
     
       For Each C In rg
          Test1 = False
          Test2 = False
          If C.Offset(0, 2) <> "" Or C.Offset(0, 4) <> "" Then
            If C.Offset(0, 2) <> "" Then
                For i = 1 To UBound(arrVersion)
                    If Left(C.Offset(0, 2), Len(arrVersion(i))) = arrVersion(i) Then
                        Test1 = True
                        Exit For
                    End If
                Next i
            End If
            If C.Offset(0, 4) <> "" Then
                For i = 1 To UBound(arrVersion)
                    If Left(C.Offset(0, 4), Len(arrVersion(i))) = arrVersion(i) Then
                        Test2 = True
                        Exit For
                    End If
                Next i
            End If
             If Test1 = False Or Test2 = False Then
                C.Offset(0, 8) = "Vers Obsolescence"     'Optionnel, juste pour montre les lignes trouvées
                'Copier vers Obsolescence (À ADAPTER)
             Else
                C.Offset(0, 8) = "Vers Greenwich"
                'Copier vers Greenwich (À ADAPTER)
             End If
     
          End If
       Next C
     
     
    End Sub

  19. #19
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 164
    Par défaut
    Re,

    Tout d'abord je tiens a te remercier pour tes réponses rapides et justes

    La macro fonctionne très bien

    Avec plusieurs test diffrents, le resultat est juste, sauf que sur la ligne 16 qui me renvoit "Vers Obsolescence"
    Alors que le reusltat devrait me renvoyer "Vers Greenwich" puisque "2008 R2" est compris dans arrVersion

    Merci

  20. #20
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    Sub Tri()
     
     
       Dim arrVersion As Variant
       Dim Version As String
       Dim sVersionOS As String
       Dim sVersionSGBD As String
       Dim rg As Range, C As Range
       Dim ar
       Dim Test1 As Boolean
       Dim Test2 As Boolean
     
     
       'Les versions doivent être écrites de cette façon, avec un "/" comme séparateur :
       ' XXXX/yyyyy/zz zz/wwww
     
       arrVersion = Array("6.1", "7.1", "5.4", "5.5", "6.0", "2008 SP2", "2008 R2", "2008 R2 SP1", "5.1", "5.5", "11.2", _
       "2005 SP4", "8.4", "9.0.3", "9.7", "2.6.3", "2.6.4")
     
       Set rg = Range("A4:A20")     '<< ADAPTER LA PLAGE
     
       For Each C In rg
          Test1 = False
          Test2 = False
          If C.Offset(0, 2) <> "" Or C.Offset(0, 4) <> "" Then
            If C.Offset(0, 2) <> "" Then
                For i = 1 To UBound(arrVersion)
                    If Left(C.Offset(0, 2), Len(arrVersion(i))) = arrVersion(i) Then
                        Test1 = True
                        Exit For
                    End If
                Next i
            Else
                Test1 = True
            End If
            If C.Offset(0, 4) <> "" Then
                For i = 1 To UBound(arrVersion)
                    If Left(C.Offset(0, 4), Len(arrVersion(i))) = arrVersion(i) Then
                        Test2 = True
                        Exit For
                    End If
                Next i
            Else
                Test2 = True
            End If
             If Test1 = False Or Test2 = False Then
                C.Offset(0, 8) = "Vers Obsolescence"     'Optionnel, juste pour montre les lignes trouvées
                'Copier vers Obsolescence (À ADAPTER)
             Else
                C.Offset(0, 8) = "Vers Greenwich"
                'Copier vers Greenwich (À ADAPTER)
             End If
          End If
       Next C
     
     
    End Sub

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [XL-2007] Macro qui compare/compte les cellules
    Par borisp dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 24/11/2011, 10h42
  2. Réponses: 2
    Dernier message: 29/04/2010, 13h27
  3. [XL-2003] Comparer un une cellule entre deux feuilles
    Par alex santus dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 07/09/2009, 23h03
  4. Comparer colonne avec cellule
    Par jaypaulojay dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 02/05/2007, 15h49
  5. tester cellule vide excel
    Par maxos75 dans le forum ASP
    Réponses: 1
    Dernier message: 14/09/2005, 17h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo