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

Boucle FOR, opérateur IF et variables. Tout un programme.

  • Initiateur de la discussion Initiateur de la discussion Hub3rt
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

H

Hub3rt

Guest
Bonjour à tous et à toutes.

J'ai besoin de réaliser des contrôles sur des colonnes par rapport à d'autres et j'aimerais bien me faire une macro qui réalise cette action.

Je pensais à quelque chose du style :

variable "nom" = comptage cellule non vide (y'a-t-il quelque chose équivalent qui existe un espèce de "count" ?)

FOR (i=0, i<"nom", i++){

IF ('onglet1'!cellule != 'onglet2'!$cellule$1:$cellule$10) {

copier ligne où la cellule est en erreur vers un autre onglet };

Pensez-vous que cela soit possible sous Excel ? N'ayant jamais coder en VBA je suis en mode total découverte et je n'ai donc pas vraiment d'idée de la logique de fonctionnement du bousin.

Merci.
 
Re : Boucle FOR, opérateur IF et variables. Tout un programme.

Bonjour Hub3rt,

Pourrais-tu mettre un petit fichier exemple sans données confidentielles avec la situation de départ et le résultat souhaité?
Car le problème n'est pas très clair à mon sens

Bonne journée
 
Re : Boucle FOR, opérateur IF et variables. Tout un programme.

ça m'a l'air tout à fait possible, en revanche je te conseille de gérer par ligne, et non par cellule.
Si tu t'y connais en Algorithmie, renseigne toi sur les fonctions
Worksheet
Range
Cells
For et If
dernière ligne (le plus dur)
Bonne chance
 
Re : Boucle FOR, opérateur IF et variables. Tout un programme.

Bonjour à tous les deux.

Tashiqi, merci pour ces petites infos, effectivement en jetant un œil j'ai pu voir qu'il y avait matière pour effectuer ce que je recherche mais pas de la façon dont je le pensais initialement.

Si je parviens à réaliser entièrement le code, je vous en mettrai une copie ici.

Il se peut que je revienne poser une ou deux questions si je galère à l'exécution d'une tâche.
 
Dernière modification par un modérateur:
Re : Boucle FOR, opérateur IF et variables. Tout un programme.

Bonjour bonjour,

Je rencontre un problème sur le code que j'ai pondu via les différents tutos glanés ça et là.

Lors du déroulement de la macro, j'ai l'erreur suivante :



sur la ligne
Code:
verif_cell_ent = Sheets("Ref").Range("A3:A37").Value

Voici le code que j'ai produit :

Code:
' Déclaration des variables qui vont être utilisées dans la macro pour l'ensemble des onglets

    Dim nb_ligne As Integer
    Dim val_cell_ent As String
    Dim val_cell_cat As String
    Dim verif_cell_ent As String
    Dim verif_cell_cat As String
    

Sub controle()
'
' Cette macro effectue un contrôle des entités et catégories saisies
'
' Cette variable permet de venir copier la ligne en erreur dans l'onglet de log
    Dim G As Integer
    G = 2
'   On compte le nombre de ligne remplies qui permettront de faire fonctionner la boucle
    nb_lignes = WorksheetFunction.CountA(Sheets("Sheets1").Range("A:A"))
    
'   On réalise ici la boucle qui permet de tester chaque cellule
    For i = 2 To nb_lignes
    
       Sheets("Sheets1").Select
       val_cell_ent = Cells(i, 5).Value
       val_cell_cat = Cells(i, 8).Value
       verif_cell_ent = Sheets("Ref").Range("A3:A37").Value
       verif_cell_cat = Sheets("Ref").Range("B3:B10").Value
        
        
'       On pose ici la condition de contrôle, à savoir si on obtient une valeur différente dans l'une ou l'autre colonne
        If val_cell_ent <> verif_cell_ent Or val_cell_cat <> verif_cell_cat Then
        
            Rows(i).Select
            selection.Copy
            Sheets("log_error").Cells(G, 1).Select
            selection.Paste
            G = G + 1
        End If
    Next
        
End Sub

L'erreur provient-elle d'une mauvaise déclaration des variables ?
Ou peut-être qu'il faudrait récupérer les valeurs du range de l'onglet "Ref" dans un tableau ?
Ou peut-être que je m'y prends très mal et qu'il existe un moyen plus simple de procéder ?

Pour info, le code ci-dessus est censé parcourir l'ensemble des lignes pleines du "sheets1" puis comparer deux cellules désignées par rapport à une plage d'autres situées sur l'onglet "ref".

Merci par avance pour vos astuces et/ou solutions.
 
Re : Boucle FOR, opérateur IF et variables. Tout un programme.

Bonjour,
Si tu veux le mettre dans un tableau, il faut définir ta variable comme tableau,
Code:
Dim verif_cell_ent(34) As String
Dim verif_cell_cat(7) As String

Bonne chance

Je ne sais plus si l'on peut affecter directement au tableau, donc je te conseille
Code:
For i=3 to 37
       verif_cell_ent(i-3) = Sheets("Ref").Range("A" & i).Value
Next
For i=3 to 10
       verif_cell_cat(i-3) = Sheets("Ref").Range("B" & i").Value
Next
 
Dernière édition:
Re : Boucle FOR, opérateur IF et variables. Tout un programme.

Salut Tashiqi,

J'ai finalement trouvé la solution à mon problème et j'ai surtout apporté pas mal de modification à ma réflexion de départ.

Voici le code finalisé avec les commentaires qui vont bien.

Code:
Sub controle()
'
' Cette macro effectue un contrôle des entités et catégories saisies
'
       
    ' Dû à une erreur amenée par les liaisons à un document externe, on vient rompre ces liaisons.
       
    If Not IsEmpty(ActiveWorkbook.LinkSources(xlExcelLinks)) Then
        For Each X In ActiveWorkbook.LinkSources(xlExcelLinks)
        ActiveWorkbook.BreakLink Name:=X, Type:=xlExcelLinks
        Next
    End If
   
    Sheets("Sheets1").Activate
    Columns("E:E").Select
    Selection.Replace What:="#N/A", Replacement:="Erreur", LookAt:=xlPart, _
        SearchOrder:=xlByColumns, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
   
    'Nettoyage de l'onglet "log_error"
   Sheets("log_error").Activate
    ActiveSheet.Range("$A$1:$A" & Range("A65536").End(xlUp).Row).Select
    Selection.EntireRow.Delete

    Sheets("log_error").Activate
    ActiveSheet.Range("$A" & Range("A65536").End(xlUp).Row).Select
        With Selection.Interior
            .Pattern = xlSolid
            .PatternColorIndex = xlAutomatic
            .ThemeColor = xlThemeColorLight2
            .TintAndShade = 0.599993896298105
            .PatternTintAndShade = 0
        End With
        Sheets("log_error").Activate
        ActiveSheet.Range("$A" & Range("A65536").End(xlUp).Row).Select
        ActiveCell.FormulaR1C1 = "Sheets1"
   
' On vient ici parcourir les plages de cellule et on vérifie la présence des valeurs dans l'onget de référence pour Sheets1

    'Parcours la plage de référence  pour la vérification des entités
   verif_cell_ent_geo = Sheets("Ref").Range("$A$3:$A$" & Sheets("Ref").Range("A65536").End(xlUp).Row)
   
    ' Parcours de la plage saisie par le support
   Dim val_cell_ent_geo As Range
    For Each val_cell_ent_geo In Sheets("Sheets1").Range("$E$2:$E$" & Sheets("Sheets1").Range("E65536").End(xlUp).Row)
        If val_cell_ent_geo.Value <> "" And IsError(Application.VLookup(val_cell_ent_geo.Value, verif_cell_ent_geo, 1, False)) = True Then
               
                ' On copie la ligne en défaut dans l'onglet log_error
               Sheets("Sheets1").Activate
                ActiveSheet.Range("$A" & val_cell_ent_geo.Row & ":$K" & val_cell_ent_geo.Row).Select
                Selection.Copy
                Sheets("log_error").Activate
                ActiveSheet.Range("$A" & Sheets("log_error").Range("A65536").End(xlUp).Row + 1).Select
                ActiveSheet.Paste
                ActiveSheet.Range("$E" & Sheets("log_error").Range("E65536").End(xlUp).Row).Select
                Application.CutCopyMode = False
                    With Selection.Interior
                        .Pattern = xlSolid
                        .PatternColorIndex = xlAutomatic
                        .Color = 49407
                        .TintAndShade = 0
                        .PatternTintAndShade = 0
                    End With
        End If
    Next
MsgBox "fini !"
End Sub


Bonne chance aux suivant ! 😀
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…