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 :

Comparaison cellule excel avec élément dans tableau [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Femme Profil pro
    Ingénieur calcul structure
    Inscrit en
    Décembre 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur calcul structure
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2014
    Messages : 21
    Points : 20
    Points
    20
    Par défaut Comparaison cellule excel avec élément dans tableau
    Bonjour le forum,

    Je me tourne vers vous aujourd'hui pour un problème bête que je n'arrive pas à résoudre. J'ai créé un tableau à deux dimensions (5 lignes, 2 colonnes) qui stock dans la deuxième colonne des valeurs liées à une boucle que le code va chercher dans une feuille de données excel (ce sont des nombres décimaux) et dans la première colonne il stock le numéro de ligne de la feuille associé à la valeur de la deuxième colonne (entier).

    Le tableau se rempli très bien mais lorsque je veux l'utiliser pour comparer la valeur d'une cellule à celle d'une des valeurs du tableau cela ne fonctionne pas. Le code s'exécute mais les résultats ne sont pas bons.

    En effet, après la comparaison je lui demande si la cellule est plus petite alors tu copies la plage de données et tu sors de la boucle For...Next et si la cellule est plus grande elle est censée passer à la ligne suivante de mon tableau et recommencer la comparaison or j'ai l'impression qu'il n'arrive pas a comparer les deux valeurs. Pourtant avec une MsgBox j'ai bien vérifié que toutes les valeurs de mon tableau étaient bonnes.

    Je vous joins un petit bout du code en espérant que ça suffira C'est la boucle For j.. qui bug

    Merci d'avance.

    Julie

    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
    58
    59
    60
    61
    62
    63
    64
    65
    Dim sNomFichierPDF As String
    Dim leRep As String
    Dim Neige As String
    Dim Vent As String
    Dim Phrase1 As String
    Dim Phrase2 As String
    Dim IndexNeige As Integer
    Dim IndexVent As Integer
    Dim IndexDim As Integer
    Dim StarterNeige As Integer
    Dim StarterVent As Integer
    Dim StarterSurface As Integer
    Dim i As Integer
    Dim j As Integer
    Dim TableauSurf(5, 1)
    Dim Ligne As Integer
    Dim Valeur As Variant
    Dim Surface As Double
    Dim Stable As String
     
    Application.ScreenUpdating = False
     
    'PRODUIT STANDARD - DESCENTES DE CHARGES VALIDEES
    If Sheets("Interface").Range("M29") = "PRODUIT STANDARD - DESCENTES DE CHARGES VALIDEES" Then
        If Sheets("Interface").Range("G12") <= 1665 Then
        'Initialisation des parametres
        Erase TableauSurf
        Ligne = 0
            'Detection des cas contenant les regions de neige et vent identique aux cellules D25 et D27 de l'interface
            For i = 2 To 7411 Step 62
                Phrase1 = Sheets("Tableaux").Range("A" & i)
                StarterNeige = 19
                IndexNeige = 2
                StarterVent = 61
                IndexVent = 1
     
                Neige = Mid(Phrase1, StarterNeige, IndexNeige)
                Vent = Mid(Phrase1, StarterVent, IndexVent)
     
                If Neige = Sheets("Interface").Range("D27") And Vent = Sheets("Interface").Range("D25") Then
                    Phrase2 = Sheets("Tableaux").Range("A" & i - 1)
                    StarterSurface = 52
                    IndexDim = 4
     
                    Stable = Mid(Phrase2, StarterSurface, IndexDim)
     
                    TableauSurf(Ligne, 0) = i - 1
                    TableauSurf(Ligne, 1) = Stable
                    Ligne = Ligne + 1
                End If
            Next i
     
            For j = 0 To 4
                If Sheets("Interface").Range("G18") <= TableauSurf(j, 1) Then
                    Sheets("Tableaux").Range("A" & TableauSurf(j, 0) & ":O" & TableauSurf(j, 0) + 62).Copy
                    Exit For
                End If
            Next j
     
            With Sheets("Tableaux").Range("AE1")
            .PasteSpecial Paste:=xlPasteColumnWidths
            .PasteSpecial Paste:=xlPasteValues
            .PasteSpecial Paste:=xlPasteFormats
            .Application.CutCopyMode = False
            End With

  2. #2
    Membre émérite Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Points : 2 594
    Points
    2 594
    Par défaut
    Bonsoir Julie, bonsoir le forum,

    Tu compares des données numériques (dans l'onglet) avec du texte (Mid(Phrase2, StarterSurface, IndexDim))...
    Soit tu stockes dans le tableau en convertissant le texte en données de type Double :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TableauSurf(Ligne, 1) = Cdbl(Stable)
    soit tu convertis au moment de la comparaison :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Sheets("Interface").Range("G18") <= CDbl(TableauSurf(j, 1))
    Soit tu verrouilles avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If CDbl(Sheets("Interface").Range("G18")) <= CDbl(TableauSurf(j, 1))

    Attention ! La conversion en donnée de type Double va planter sur des données non convertibles. Tu peux éviter avec un If Numeric(Stable) then ...

  3. #3
    Membre à l'essai
    Femme Profil pro
    Ingénieur calcul structure
    Inscrit en
    Décembre 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur calcul structure
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2014
    Messages : 21
    Points : 20
    Points
    20
    Par défaut
    Finalement je pense savoir d'où vient le problème mais ne sais pas le résoudre. J'ai remarqué que lorsqu'il lit ma cellule il transforme le point qui sépare les décimales en virgule or dans mon tableau sont stockés des valeurs de type String où il ne convertit pas les points en virgules.

    Une solution simple serait de changer les séparateurs directement dans Excel mais je déteste travailler avec des virgules. N'y aurait-il pas une solution pour convertir les points en virgules directement dans mon code vba?

    Ah je n'avais pas vu ta réponse (je ne comprend pas je n'ai pas reçu de mail pour me dire qu'il y avait une réponse... bizarre :-/).

    Effectivement c'est par cette solution que je vais passer mais dans l'état elle ne fonctionne pas à cause du problème que je viens d'énoncer (enfin je pense).

  4. #4
    Membre à l'essai
    Femme Profil pro
    Ingénieur calcul structure
    Inscrit en
    Décembre 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur calcul structure
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2014
    Messages : 21
    Points : 20
    Points
    20
    Par défaut
    C'est bon ça marche. J'ai utilisé la première solution que tu m'as proposé Thautheme. En ajoutant une ligne pour remplacer les points par des virgules. Voici mon nouveau code:

    La conversion point/virgule:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Stable = Mid(Phrase2, StarterSurface, IndexDim)
    Stable = Replace(Stable, ".", ",")
    Et la conversion String/Double:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TableauSurf(Ligne, 1) = CDbl(Stable)
    Et tout fonctionne très bien maintenant.

    Merci pour ton aide.

    Julie

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 16/06/2015, 11h55
  2. [VBA-E]Comparaison sous Excel avec 3 feuilles
    Par zidrouz dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 04/04/2006, 10h49
  3. Comment lire le contenu en arabe d'une cellule excel avec
    Par deneche dans le forum Bases de données
    Réponses: 1
    Dernier message: 17/03/2006, 10h01
  4. Réponses: 3
    Dernier message: 20/02/2006, 15h34
  5. Remplir les cellules Excel avec des variables VB
    Par rupeni dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 21/11/2005, 09h31

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