Compréhension - Exercices VBA

Bonsoir à toutes et tous !

Serait-il possible d'avoir de l'aide sur quelques lignes de code ? J'essaye d'en comprendre le fonctionnement, mais certains éléments m'échappent dans mon exo.

Voici le code :

    Dim i As Integer
    i = 2
    Do While Range("A" & i) <> ""
        i = i + 1
        Range("A" & i).Select
    Loop
    i = i - 1

Je ne comprends pas le fonctionnement de cette boucle.

i=2 ==> Donne 2 à la variable i

Do While Range("A" & i) <> "" ==> une boucle s'effectue tant que les cellules de la colonne A ne sont pas vides.

Après, moi pas comprendre...

Merci pour votre aide

Bonsoir,

i est incrémenté dans la boucle. Le Range(... Select est superflu (ou décoratif) la boucle tourne jusqu'à ce que i pointe une cellule vide.

En sortie de boucle i est désincrémenté de 1. Donc i = numéro dernière ligne utilisée en A.

Un moyen de recherche de cette ligne en somme.

ça marche, merci beaucoup pour l'aide + réactivité.

Bonne nuit/journée

Maintenant que son fonctionnement est compris, comment dois-je faire pour que - une fois la cellule vide trouvée - cette boucle remplisse la cellule vide par la cellule précédente ?

    Dim i As Integer
    i = 2
    Do While Range("A" & i) <> ""
        i = i + 1
        Range("A" & i).Select
cellule.Value = cellule.Offset(-1, 0).Value
    Loop
    i = i - 1

Si j'ajoute ça, c'est correct ?

Bonjour,

La procédure te trouve la ligne... Si tu introduis une autre action dans la boucle, c'est pour l'exécuter à chaque tour.

Qu'est-ce que cellule ? Dans ce que je vois c'est une variable non déclarée, non initialisée, donc vide, qui dans la boucle soit déclenchera une erreur soit ne fera rien. Et si initialisée (par affectation d'un objet Range, cet objet état fixe par rapport à la boucle (Offset invariant également), elle ne fera que répéter la même chose au même endroit pendant tout le déroulement de la boucle.

Il faut donc savoir ce que tu veux faire avec cet ensemble.

Cordialement.

Si j'ai bien compris, le premier code que je t'ai fait parvenir permet de mettre en valeur une case vide.

Au départ, je voulais remplir les cellules vides par les cellules non vides présentes plus haut. Mais cette règle n'est pas toujours applicable.

J'ai donc cherché sur internet un code permettant de trouver les cellules vides en colonne A, et de m'alerter leur présence par un message d'alerte, ou une fenêtre, qui stop la macro.

Voici le code :

    If Not Application.Intersect(Target, [A2]) Is Nothing Then
        If Target = "" Then
            MsgBox "Information manquante", vbCritical, "ATTENTION"
        End If
    End If

Sauf qu'au lieu de s'occuper de la cellule A2 uniquement, il faut que le code me signale s'il existe encore une cellule vide dans la colonne A.

Le but est de me faire une alerte perso, où tant que ce code détecte la présence d'une cellule vide en colonne A, je ne puisse pas exécuter d'autres macros par la suite.

Edit : Pour fixer une règle, on peut dire que cette recherche doit s'effectuer jusqu'à la fin de mon tableau en colonne B.

Pourquoi je veux faire ça ? Car après, je souhaite faire des sous-totaux, avec la colonne A à trier et une autre colonne comportant des valeurs. S'il reste des cellules vides en colonne A, certaines lignes ne seront pas prises en compte dans mes additions.

Une évènementielle n'est pas a-priori l'outil adapté (et quelle évènementielle ? tu ne le dis pas).

Si tu dois parcourir ta colonne de la ligne 2 à la fin, mieux vaut utiliser une boucle For... Next.

Tu détermines la ligne de fin avec ....End(xlUp).Row

Cela garantit que la boucle s'arrêtera à la fin (avec Do... Loop il faut une condition de sortie)

Tu boucles de 2 à fin, en testant si la cellule est vide, et si vide tu peux exécuter ta commande : Cells(i,1).Value = Cells(i-1, 1).Value

Cordialement.

Rechercher des sujets similaires à "comprehension exercices vba"