Boucles imbriquées et définitions des variables

Bonjour à tous,

Nouvelle arrivante dans le monde du codage en VBA, je me prends la tête pour régler un projet nécessitant une macro. Mon "vrai" tableau de données comprend des milliers d'entrées pour chaque colonnes, je vous joins une version simplifiée du tableau accompagnée du bout de macro qui me pose problème.

Ce que je souhaite faire :

- Pour la cellule B2,

si valeur est comprise entre la valeur des cellules Ex et Fx alors écrire en Hx "A tester" sinon écrire "Non", à faire en boucle pour toutes les lignes des colonnes E et F

puis appliquer une boucle pour faire ce test pour toutes les cellules non vide de la colonne B

Comme je l'ai dis plus haut, je débute en codage. Je pense que mon problème viens du fait que je mélange une peu tout, j'ai essayé avec plusieurs type de boucle mais je ne m'y prend pas correctement puisque j'en suis toujours à des problème de compatibilité ou de définition de variable.

Est ce qu'une âme charitable pourrait m'aider à mettre de l'ordre dans mes idées svp, la à force d'avoir le nez dedans je n'arrive plus à rien même si de base ça ne me parait pas trop compliqué ^^

Merci d'avance !

       
Sub aeqsfdv()

' Ajout d'une feuille Potentiel si elle n'existe pas encore

        'On créé la feuille "Potentiel"
         Sheets.Add After:=Sheets(Sheets.Count)
         Sheets(Sheets.Count).Name = "Potentiel"
         Range("A1").Select
         ActiveCell.FormulaR1C1 = "Location variant"
         Range("E1").Select
         ActiveCell.FormulaR1C1 = "Début cible"
         Range("F1").Select
         ActiveCell.FormulaR1C1 = "Fin cible"

' Retour sur la feuille Location corrected

Sheets("Location corrected").Activate
Range("H1").Value = "TEST"

    ' Loop pour appliquer à chacun des location en B

Dim DerLigneLoc As Integer
Dim DerLigneStart As Integer
Dim DerLigneEnd As Integer
Dim i As Range
Dim j As Range
Dim Loc As Range
Dim Gstart As Range
Dim Gend As Range

DerLigneLoc = Worksheets("Location corrected").Cells(Rows.Count, 2).End(xlUp).Row
DerLigneStart = Worksheets("Location corrected").Cells(Rows.Count, 5).End(xlUp).Row
DerLigneEnd = Worksheets("Location corrected").Cells(Rows.Count, 6).End(xlUp).Row

Set Loc = Sheets("Location corrected").Range("B2:B" & DerLigneLoc)
Set Gstart = Sheets("Location corrected").Range("E2:E" & DerLigneStart)
Set Gend = Sheets("Location corrected").Range("F2:F" & DerLigneEnd)

    For Each cell In Loc

                    If Sheets("Location corrected").Range("Loc").Cells(i, 2).Value > Sheets("Location corrected").Range("Gstart").Cells(j, 5).Value Then
                        If Sheets("Location corrected").Range.Cells(i, 2).Value < Cells(j, 6).Value Then
                        Sheets("Location corrected").Range(j, 7).FormulaLocal = "A tester"
                        Else: Sheets("Location corrected").Range(j, 7).FormulaLocal = "Non"
                        End If
                    End If

            ' Duplique en colonne I les résultats de formules en gardant uniquement les valeurs

                Columns("H:H").Select
                Selection.Copy

                 Columns("I:I").Select

                  Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                        :=False, Transpose:=False

             ' Pour chaque "A tester" dans la liste I, Coller la formule en H vers la colonne K à la suite

                            Worksheets("Location corrected").Activate
                            Dim a As String
                            Dim b As String
                            Dim w As Long

                            a = Worksheets("Location corrected").Cells(Rows.Count, 9).End(xlUp).Row

                                For w = 2 To a

                                    If Worksheets("Location corrected").Cells(i, 9).Value = "A tester" Then
                                       Worksheets("Location corrected").Rows(i).Copy
                                        Worksheets("Potentiel").Activate
                                        b = Worksheets("Potentiel").Cells(Rows.Count, 1).End(xlUp).Row
                                        Worksheets("Potentiel").Cells(b + 1, 1).Select
                                        ActiveSheet.Paste
                                        Worksheets("Location corrected").Activate
                                    End If

                                Next

 Columns("H2:I").ClearContents

    Next cell

End Sub
12macrodemalheur.xlsm (15.60 Ko)

Bonsoir à tester :

Sub Atester()
    Dim DrLigne As Single, i As Single
    Dim Location As Single, LStart As Single, Lend As Single

    DrLigne = Range("B" & Rows.Count).End(xlUp).Row

    For i = 2 To DrLigne
        Location = Range("B" & i).Value2
        LStart = Range("E" & i).Value2
        Lend = Range("F" & i).Value2

        If Location <> 0 Then
            Select Case Location
                Case LStart To Lend
                    Range("H" & i) = "A tester"
                Case Else
                    Range("H" & i) = "Non"
            End Select
        End If
    Next i

End Sub

Cordialement.

Bonjour,

Merci pour la réponse, rapide en plus ! Je ne connaissais pas la propriété Value2

Le code fonctionne, seulement il ne s'applique que sur la longueur de la colonne B. Or les colonnes E et F peuvent être "plus longues" et toutes ne sont donc pas testées de cette façon

De plus j'ai oublié d'indiquer que je dois récupérer le résultat obtenu en H une fois toutes les données traitées pour chaque cellule B

Je ne sais pas si je suis très clair... En gros tester pour B2 si sa valeur se trouve comprise entre les valeurs de Ex et Fx, copier le résultat (vers une autre feuille par exemple), effacer la colonne H et répéter pour B3, B' etc de manière a avoir une synthèse

Hello Silma pourrais tu fournir un exemple sur un fichier joint du résultat final que tu souhaites car je suis pas sur de tout comprendre comme il faut.

Merci par avance.

Cordialement.

Bien le bonsoir,

Grâce au code que tu m'a transmis j'ai réussi à me dépatouiller et régler le problème de la macro en prenant mon problème sous un autre angle.

Un grand merci pour la réponse et la réactivité, ça m'a beaucoup aidée !

J'ai beaucoup appris grâce à ce forum, merci aussi à la communauté en général !

A bientôt peut être

Salut Silma,

Salut BigDaddy,

je suis curieux : peut-on voir cette macro maintenant qu'elle donne les résultats voulus?

A+

Hello,

Voila ce que ça donne pour moi, sachant que dans la partie BlaBla j'avais aussi une boucle For qui m’embêtait

A la prochaine

    
    Sub Atester()
    DrLigne = Range("B" & Rows.Count).End(xlUp).Row

    For i = 2 To DrLigne
        j = 2
       Do While Not IsEmpty(Cells(j, 5))

        Location = Range("B" & i).Value2
        LStart = Range("E" & j).Value2
        Lend = Range("F" & j).Value2

            If Location <> 0 Then

                Select Case Location
                    Case LStart To Lend
                        Range("H" & j) = "A tester"
                    Case Else
                        Range("H" & j) = "Non"
                End Select
            End If

                ' Blabla en plus dépendant de i et j pour traiter mes données mais sur une autre feuille

        j = j + 1
        Loop

'

    Next

    End Sub
Rechercher des sujets similaires à "boucles imbriquees definitions variables"