Cellule contenant une variable définie (dans une boucle)

Bonjour,

Je m'aide du site Excel pratique depuis maintenant 2 semaines pour apprendre les bases du code VBA et c'est grâce à votre site que je progresse. Jusqu'à présent j'avais réussi à me passer de l'aide du forum mais je bloque sur un point et je vais essayer d'être clair.

Avec une fonction "if" j'ai créé une macro qui permet de vérifier que des cellules sont remplies. Si une cellule n'est pas remplie, une Inbox apparait : la valeur sera implémentée dans la cellule.

A ceci j'ajoute une boucle : ainsi l'opération se répète autant de fois que nécessaire sur plusieurs lignes

Jusque la rien de compliqué. Sauf que je souhaite que le code soit adaptable rapidement et même par le profane : j'utilise donc des variables : ainsi "n'importe qui" pourra théoriquement faire la maintenance du fichier Excel sans être une bête en VBA en modifiant les variables uniquement.

Voici donc le code :

Sub Valider()

    Dim numero_appareil As String
    Dim conforme As Variant
    Dim numeroDT As Variant
    Dim sousDT As Long

    Dim i As Long
    Dim j As Long

    i = 11
    j = 24

    While i < j

    numero_appareil = Range("A" & i)

    conforme = Range("AI" & i)

    numeroDT = Range("AK" & i)

    If Range("AI" & i) = "NON" And Range("AK" & i).Value = 0 Then

    Range("AK" & i) = InputBox(numero_appareil, "Appareil non conforme")

       End If

    i = i + 1

    Wend

End Sub
  

Ce code fonctionne bien. (Voir fichier joint).

Par contre, comment puis-je faire pour ne pas avoir besoin d'utiliser

Range("AK" & i) 

comme résultat de la InputBox mais directement la variable "numeroDT" définie plus haut

numeroDT = Range("AK" & i)

En gros pourquoi ça ne marche pas avec :

numeroDT = InputBox(numero_appareil, "Appareil non conforme")

J'aimerai résoudre ce problème et surtout comprendre ou ça bloque : est ce que c'est à cause de la boucle ? ou parce que la variable numeroDT change ?

Encore une fois je débute, alors si ce n'est pas suffisemment clair je pourrai réexpliquer mon problème d'une autre façon.

Merci pour votre attention, c'est toujours sympa de recevoir de l'aide

Avec le fichier en prime bien sur

7version-test.xlsm (53.33 Ko)

Bonjour,

Il ne faut pas confondre la cellule et la valeur de la cellule.

Pour attribuer la référence de l'objet Range à la variable numeroDT, tu dois utiliser l’instruction Set.

Set numeroDT = Range("AK" & i)

Si tu écris numeroDT = Range("AK" & i), tu affectes la valeur de la cellule à la variable numeroDT.

Sub Valider()
Dim numero_appareil As String, conforme As String
Dim numeroDT As Range
Dim sousDT As Long, i As Long, j As Long
    i = 11
    j = 24
    While i < j
        numero_appareil = Range("A" & i).Value
        conforme = Range("AI" & i).Value
        Set numeroDT = Range("AK" & i)
        If Range("AI" & i).Value = "NON" And numeroDT.Value = 0 Then
            numeroDT.Value = InputBox(numero_appareil, "Appareil non conforme")
        End If
        i = i + 1
    Wend
End Sub

A+

Merci ça fonctionne très bien.

J'aimerai juste être sur d'avoir bien compris :

Le code suivant permet d'attribuer le contenu de la cellule A1 à la variable.

variable1 = Range("A1")

Le code suivant permet d'attribuer la valeur de la variable à la cellule A1

set variable1 = Range("A1")

Bonjour,

Tu as raison de ne pas être sûr

En toute rigueur, l'instruction variable1 = Range("A1") devrait s'écrire variable1 = Range("A1").value

Dans ce cas, la valeur de la cellule A1 est affectée à la variable1.

En clair, c'est le contenu de la boite.

Par contre, lorsque tu écris set variable1 = Range("A1"), variable1 représente la cellule elle-même.

Dans ce cas, elle représente la boite et non plus simplement le contenu de la boite.

Est-ce plus clair ?

A+

Ok je comprends mieux, je reprends donc l'ensemble de mes codes pour y ajouter .Value en toute rigueur.

Du coup est ce que la fonction " set " représente l'inverse ? C'est à dire attribuer la valeur de la variable à la cellule A1.

Merci pour ces réponses claires

Tu n'es pas obligé de corriger tes codes et rajouter .Value

Ce qui est important, c'est de comprendre que c'est implicite.

Set ne représente pas l'inverse.

Set permet de représenter l'objet lui-même.

Concrètement, je prends l'exemple de la cellule A1 qui contient un nombre entier (2504)

Pour utiliser la valeur de la cellule A1 avec une variable nommée Variable1, je vais coder

Dim Variable1 as Integer (je déclare que cette variable est de type Entier)

Variable1=range("A1").Value (j'affecte la valeur de A1 à Variable1, soit 2504)

Exemple d'utilisation :

Je peux effectuer l'opération Variable1 +1 qui donnera le résultat 2505.

Pour utiliser la cellule A1 avec une variable nommée Variable2, je vais coder

Dim Variable1 as Range (je déclare que cette variable est de type Range)

Set Variable2=range("A1") (Variable2 est désignée comme représentant la cellule A1).

Exemples d'utilisation :

Je peux obtenir l'adresse avec l'instruction : Variable2.address qui donne le résultat $A$1

Je peux affecter une nouvelle valeur à A1 avec l'instruction : Variable2.Value=2542

A+

Rechercher des sujets similaires à "contenant variable definie boucle"