Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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:

AlCapone

XLDnaute Nouveau
[RESOLU] Bonsoir MAPOMME,

Je pensais (visiblement à tort) qu'il fallait la définir pour l'utiliser dans les formules.
Merci beaucoup pour ton retour et ton explication.
Te souhaitant une bonne soirée
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…