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 :

Problème pour une boucle en vba


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 26
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Problème pour une boucle en vba
    Bonjour à tous,
    Cela fait près d’une semaine que j’ai le même problème et après plusieurs essais je n’arrive toujours pas à le régler...
    En effet, dans ma feuille excel je possède une colonne où les valeurs peuvent être en mV ou en V et une autre où elles peuvent être en µV, mV ou V.
    Or je dois additionner (ou soustraire) chaque cellules de chaque colonne entre elles : B5 +/- H5 ; B6 +/- H6 …
    Il faut donc que les valeurs soient dans la même unité donc j’ai tout d’abord extrait les valeurs numériques de chaque colonne dans la suivante : si en B5 j’ai -3 mV , en C5 j’ai maintenant -3 (pareil pour la colonne H que j’extrais dans la colonne I).
    Ensuite j’ai fait une sorte de boucle pour mes colonnes B et H qui stocke dans une variable les 2 derniers caractères : « mV » « µV » ou « V ».
    Après j’ai fait un « selon » afin de multiplier les valeurs des cellules de I par 0.001 si besoin, c’est-à-dire quand B en mV et H en µV ou B en V et H en mV.
    Or j’ai un souci au moment de modifier ma cellule. En effet, le programme s’effectue sans problèmes sauf que ma colonne I est inchangée. Je n’arrive pas à écrire dans mes cellules.
    J’ai essayé avec un For et en utilisant la formulation Range(« I » & i +5). Value = la valeur de ma cellule * 0.001 mais cela fait tout planter…
    Je vois vraiment plus quoi faire…
    Merci d’avance pour votre aide, voici le code avec les 2 trucs que j’ai essayé dans le select :
    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
     
    Dim cell, cell1, cell2, cell3 As Variant
    Dim uniteTol As String
    Dim uniteref As String
    For i = 0 To 74
        For Each cell In Sheets("Mesures").Range("B5:B79")
        uniteref = Right(cell, 2)On récupère l’unité
        For Each cell3 In Sheets("Mesures").Range("H5:H79")
        uniteTol = Right(cell3, 2)On récupère l’unité
     
    Select Case (uniteref)
        Case Is = "mV"
            If uniteTol = "µV" Then
                For Each cell1 In Sheets("Mesures").Range("I5:I79")
                    Range("I" & i + 5) = cell1 * 0.001 'premier essai
                Next cell1
            End If
        Case Is = " V"
            If uniteTol = "mV" Then
                For Each cell2 In Sheets("Mesures").Range("I5:I79")
                    cell2 = cell2 * 0.001 'deuxième essai
                Next cell2
            End If
    End Select
    Next cell3
    Next cell
    Next

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    J'aurais vu un truc comme cela si vous êtes certaine d'avoir un caractère " " entre la valeur et son unité :

    Dans cette solution, je mets les mesures en mV et en V dans deux colonnes distinctes pour exploiter plus facilement les résultats.


    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
     
     
    Sub TestMesuresSelonLesUnites()
     
        MesuresSelonLesUnites Sheets("Mesures"), 4, 2, 8, 3, 4
     
    End Sub
     
    Sub MesuresSelonLesUnites(ByVal FeuilleMesure As Worksheet, ByVal LigneTitreMesure As Long, ByVal ColReference As Long, ByVal ColTolerance As Long, ByVal ColMesuresmV As Long, ByVal ColMesuresV As Long)
     
    Dim AireReference As Range
    Dim CelluleReference As Range
    Dim DerniereLigneReference As Long
     
    Dim ValeurMesure As Double
     
        With FeuilleMesure
     
             DerniereLigneReference = .Cells(.Rows.Count, ColReference).End(xlUp).Row
             Set AireReference = .Range(.Cells(LigneTitreMesure + 1, ColReference), .Cells(DerniereLigneReference, ColReference))
     
             For Each CelluleReference In AireReference
                 If UBound(Split(CelluleReference, " ")) > 0 And UBound(Split(CelluleReference.Offset(0, ColTolerance - ColReference), " ")) > 0 Then
                    Select Case LCase(Split(CelluleReference, " ")(1))
                           Case "mv"
     
                                Select Case LCase(Split(CelluleReference.Offset(0, ColTolerance - ColReference), " ")(1))
                                       Case "µv"
                                           CelluleReference.Offset(0, ColMesuresmV - ColReference) = Split(CelluleReference, " ")(0) + (Split(CelluleReference.Offset(0, ColTolerance - ColReference), " ")(0) / 1000)
                                       Case "mv"
                                           CelluleReference.Offset(0, ColMesuresmV - ColReference) = Split(CelluleReference, " ")(0) + Split(CelluleReference.Offset(0, ColTolerance - ColReference), " ")(0)
                                       Case "v"
                                           ' Ce cas n'a pas de sens / tolérance
                                           CelluleReference.Offset(0, ColMesuresmV - ColReference) = " A vérifier"
                                End Select
     
                           Case "v"
     
                                Select Case LCase(Split(CelluleReference.Offset(0, ColTolerance - ColReference), " ")(1))
                                       Case "µv"
                                           ' Ce cas n'a pas de sens / tolérance
                                           CelluleReference.Offset(0, ColMesuresV - ColReference) = " A vérifier"
                                       Case "mv"
                                           CelluleReference.Offset(0, ColMesuresV - ColReference) = Split(CelluleReference, " ")(0) + (Split(CelluleReference.Offset(0, ColTolerance - ColReference), " ")(0) / 1000)
                                       Case "v"
                                           CelluleReference.Offset(0, ColMesuresV - ColReference) = Split(CelluleReference, " ")(0) + Split(CelluleReference.Offset(0, ColTolerance - ColReference), " ")(0)
                                End Select
     
                    End Select
                 End If
             Next CelluleReference
     
        End With
     
    End Sub
    Explications :

    La fonction Split permet de "découper" en N+1 parties, une chaîne en fonction de la présence du ou des caractères spécifiés, ici le caractère " ".Si le caractère existe dans la chaîne et dans votre cas , l'indice 0 du tableau contient logiquement la valeur mesurée, l'indice 1 contient l'unité.
    LCase permet de comparer les unités par rapport aux caractères minuscules, cela évitera les erreurs où V est écrit en minuscule.

    La condition :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     If UBound(Split(CelluleReference, " ")) > 0 And UBound(Split(CelluleReference.Offset(0, ColTolerance - ColReference), " ")) > 0 Then
    permet de vérifier qu'il y a deux parties dans la chaîne que le calcul sera possible. Dans le vidage d'écran ci-dessous, seules les mesures remplissant les conditions ont un résultat.


    Pièce jointe 208466


    Le fichier de l'exemple : Pièce jointe 208467


    Cordialement.

Discussions similaires

  1. utiliser une valeur float pour une boucle for
    Par didi59650 dans le forum Débuter
    Réponses: 6
    Dernier message: 18/04/2006, 17h32
  2. Problème avec une boucle for
    Par cisse18 dans le forum Général JavaScript
    Réponses: 20
    Dernier message: 29/03/2006, 16h50
  3. [MySQL] Problème avec une boucle
    Par yayacameleon dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 09/03/2006, 09h53
  4. Problème sur une boucle
    Par Mateache dans le forum ASP
    Réponses: 6
    Dernier message: 31/01/2006, 09h48
  5. problème pour une calculatrice
    Par Anthobask dans le forum C
    Réponses: 4
    Dernier message: 19/12/2005, 21h11

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