Application de la boucle sur cellule non-vide

Bonjour.

J'ai un code et je veux que la formule s'applique seulement si la valeur contenue dans la variable (X) est non-vide. Sinon on passe a next X.

Voici le code:

Sub MAJ_FOR()

Dim WS_Count  As Integer
Dim I As Integer
WS_Count = ActiveWorkbook.Worksheets.Count

'**************************
'Début de la loop
'*******************************
For I = 1 To WS_Count
'*********************************
'MAj champs identification de la station & MAJ strate arborescente
'**********************************

Dim x As Integer
For x = 85 To 101

Worksheets("FOR").Activate
Cells(Rows.Count, 1).End(xlUp)(2).Select
ActiveCell.Value = Worksheets(I).Range("d3").Value 'A:station
ActiveCell.Offset(0, 1).Activate 'déplacement d'une colonne
ActiveCell.Value = Worksheets(I).Range("B83").Value 'B: type de strate
ActiveCell.Offset(0, 1).Activate 'déplacement d'une colonne
ActiveCell.Value = Worksheets(I).Range("b" & x).Value 'c:essence_1
ActiveCell.Offset(0, 1).Activate 'déplacement d'une colonne
ActiveCell.Value = Worksheets(I).Range("o" & x).Value 'd:essence_1latin_1
ActiveCell.Offset(0, 1).Activate 'déplacement d'une colonne
ActiveCell.Value = Worksheets(I).Range("aa" & x).Value 'e :absolu
ActiveCell.Offset(0, 1).Activate 'déplacement d'une colonne
ActiveCell.Value = Worksheets(I).Range("ae" & x).Value 'f :relatif
ActiveCell.Offset(0, 1).Activate 'déplacement d'une colonne
ActiveCell.Value = Worksheets(I).Range("ai" & x).Value 'G :dominante
Worksheets("FOR").Activate
Cells(Rows.Count, 1).End(xlUp)(2).Select 'Retour à la colonne A

Next x

Next I

End Sub

Donc s'il n'y a rien à l'intérieur de B89, par exemple, on passe directement à B90 et ainsi de suite.

Merci de votre support. C'est très apprécié. J'avance dans mon VBA grace à vous tous :)

Salut,

h2so4 t'a dit hier de fournir un fichier exemple avec tes questions ! Ce serait quant même bien plus facile de t'aider. Enfin, si c'est bien ce que tu souhaites

Amicalement.

Bonjour Labaie, Salut Yvouille,

Voici un essai avec une condition au sein de la boucle et une possibilité de sortie dès la première cellule en B vide :

Sub MAJ_FOR()

dim ws as worksheet
Dim x As Integer
dim nl&

For each ws in worksheets
    For x = 85 To 101
        with Worksheets("FOR")
            if ws.Range("b" & x).value <> "" then
                nl = .Cells(.Rows.Count, 1).End(xlUp)(2).row
                .cells(nl, 1).value = ws.Range("d3").Value 'A:station
                .cells(nl, 2).value = ws.Range("B83").Value 'B: type de strate
                .cells(nl, 3).value = ws.Range("b" & x).Value 'c:essence_1
                .cells(nl, 4).value = ws.Range("o" & x).Value 'd:essence_1latin_1
                .cells(nl, 5).value = ws.Range("aa" & x).Value 'e :absolu
                .cells(nl, 6).value = ws.Range("ae" & x).Value 'f :relatif
                .cells(nl, 7).value = ws.Range("ai" & x).Value 'G :dominante
            'else
                'exit for
            end if
        end with
    Next x
Next ws

End Sub

Cdlt,

Bonjour,

3 GB : tu t'es un peu perdu entre n1 et d1...

Avec cette solution tu perds tout le bénéfice de l'optimisation que je t'ai faite hier :

Modifier le code d'hier comme suit

For x = 85 To 96
if WsF.Cells(iR, 2) <> "" then
   WsF.Cells(iR, 1) = .Range("D3")     'A:station
   WsF.Cells(iR, 2) = .Range("B83")    'B: type de strate
   WsF.Cells(iR, 3) = .Range("B" & x)  'c:essence_1
   WsF.Cells(iR, 4) = .Range("O" & x)  'd:essence_1latin_1
   WsF.Cells(iR, 5) = .Range("AA" & x) 'e :absolu
   WsF.Cells(iR, 6) = .Range("AE" & x) 'f :relatif
   WsF.Cells(iR, 7) = .Range("AI" & x) 'G :dominante
      iR = iR + 1
End if
Next

EDIT : Il faut à tout prix renoncer à tous ces .Activate, Select, Offset

Inutile de créer un nouveau sujet quand il s'agit du prolongement d'une même question...

A+

Salut galopin,

Ce sont des "L" mais oui, en effet, je me suis perdu dans mes variables . J'édite le code tout de suite. Merci de ta vigilance !

Rechercher des sujets similaires à "application boucle vide"