BOUCLE renvoi "Vrai" dans une cellule

AlCapone

XLDnaute Nouveau
Bonjour à tous,

J'ai une macro qui s'exécute nickel, mais j'ai mon activecell (définie en "H1" dans l'onglet "ConsoAchcats") qui se renomme par 'vrai' dans le fichier Excel (résultat de la condition de ma boucle).

N'arrivant pas à comprendre pourquoi, je vous remercie par avance pour votre aide.


En pièce jointe, un extrait du fichier concerné ou, ci-dessous, la macro :

Code :

VB:
Sub Procedure()

Application.ScreenUpdating = False

    With Sheets("ConsoAchats")

'    ProvMontant
    
    ActiveCell = Range("H1").Select
    DateClot = Sheets("Achats").Range("J2").Value
    
        Do While ActiveCell.Offset(1, 0).Value <> ""
            ActiveCell.Offset(1, -7).Value = "G"
            ActiveCell.Offset(1, -6).Value = "ODCUT"
            ActiveCell.Offset(1, -5).Value = DateClot
            ActiveCell.Offset(1, -4).FormulaR1C1 = "OCA" & Format(DateClot, "mmyyyy")
            ActiveCell.Offset(1, -2).Value = "6040000"
            ActiveCell.Offset(1, -1).Value = "0"
            ActiveCell.Offset(1, 5).FormulaR1C1 = _
                "=IF(AND(LEFT(RC[-4],3)=""FNP"",RC[1]<>""""),""4082100"",IF(LEFT(RC[-4],3)=""FNP"",""4081000"",IF(AND(LEFT(RC[-4],3)=""ANP"",RC[1]<>""""),""4098210"",IF(LEFT(RC[-4],3)=""ANP"",""4098100"",IF(AND(LEFT(RC[-4],3)=""CCA"",RC[1]<>""""),""4862100"",IF(LEFT(RC[-4],3)=""CCA"",""4861000"",""""))))))"
            ActiveCell.Offset(1, 6).FormulaR1C1 = _
                "=IFERROR(VLOOKUP(LEFT(PROPER(TRIM(SUBSTITUTE((MID(RC[-5],SEARCH("" "",RC[-5],1)+1,23)),RIGHT((MID(RC[-5],SEARCH("" "",RC[-5],1)+1,23)),LEN((MID(RC[-5],SEARCH("" "",RC[-5],1)+1,23)))-SEARCH(""µ"",SUBSTITUTE((MID(RC[-5],SEARCH("" "",RC[-5],1)+1,23)),"" "",""µ"",LEN((MID(RC[-5],SEARCH("" "",RC[-5],1)+1,23)))-LEN(SUBSTITUTE((MID(RC[-5],SEARCH("" "",RC[-5],1)+1,23)),"" "",""""))))),""""))),23),BAZINTAC,2,FALSE),"""")"

            ActiveCell.Offset(1, 0).Select
        Loop

    End With

Application.ScreenUpdating = True

'Tri par libellé
    With ActiveWorkbook.Worksheets("ConsoAchats").Sort
        .SortFields.Clear
        .SortFields.Add Key:=Columns( _
        9), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
        .SetRange Columns("A:N")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
        

'LigneAnaAC

End Sub




AlC.
 

Pièces jointes

  • CutOff Achats Forum.xlsm
    466.3 KB · Affichages: 3

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir @AlCapone,

Il y a une erreur de logique dans votre code au niveau de :
VB:
ActiveCell = Range("H1").Select

En VBA, on peut faire appel à deux structures :
  1. les sous-routines, routines, procédures ou sous-programmes qui exécutent une ou des actions et ne sont censés retourner aucune valeur
  2. les fonctions qui retournent une valeur
ActiveCell représente la cellule qui est sélectionnée. Sa propriété par défaut est la valeur de la cellule. Quand vous écrivez ActiveCell=, vous écrivez "en réalité : ActiveCell.Value= .

A droite, vous écrivez =Range("H1").Select Or Select n'est pas une fonction mais une procédure. Select va sélectionner la cellule H1. Donc théoriquement Range("H1").Select ne renvoie aucune valeur. Par conséquent vouloir affecter une valeur (qui n'existe pas) à ActiveCell doit aboutir à une erreur.

Il se trouve qu'en interne VBA renvoie malgré tout une valeur et cette valeur est TRUE. D'où votre anomalie.

Donc en résumé: L'expression ActiveCell = Range("H1").Select n'est pas une expression logique en terme de codage VBA.

ActiveCell n'a pas besoin d'être explicitement définie. ActiveCell est défini dès qu'on sélectionne une cellule.
Donc ActiveCell = Range("H1").Select doit être remplacé par Range("H1").Select tout simplement (cela défini implicitement ActiveCell comme étant la cellule H1)
 
Dernière édition:

Statistiques des forums

Discussions
312 099
Messages
2 085 273
Membres
102 846
dernier inscrit
gilles45