Appel d'une variable (dim) utilisée dans un code VBA

Bonjour. Je vous joint un code qui est fonctionnel, mais en souhaitant l'optimiser et poser des variables pour que mon code soit plus facilement adaptable par la suite (pour pour d'autres macros similaires), j'ai voulu utiliser des variables et leur donner une valeur. Une fois appelée dans mon code, c'est leur valeur qui doit être utilisée. Mais voila, j'ai des retours d'erreur et ne parvient pas à comprendre ce qui cloche. Elles sont toutes appelée dans le CODE PRINCIPAL en fin de macro, mais çà bloque quelque-part. Si je remets toutes les valeur en "dur" dans mon code tout fonctionne à nouveau. Merci de vos lumières, je crois que c'est surtout un probleme de syntaxe ?

Sub PrenomChange()

'déclaration des variablesutilisées dans le code

Dim MotMSG As Byte
    MotMSG = prénom 'mot utilisé dans la msgBox

Dim ChampNEW As Byte
    ChampNEW = PRENOM 'nom du champ qui va envoyer la modification

Dim ChampACT As Byte
    ChampACT = prenomACT 'nom du champ qui va être modifié

Dim Colonne As Byte
    Colonne = F 'colonne du tableau à modifier

Dim FeuilleDestination As Byte
    FeuilleDestination = Prospection ' nom de la feuille ou est localisé le tableau à modifier

Dim FeuilleOrigine As Byte
    FeuilleOrigine = Feuil2 'nom de la feuille depuis laquelle on copie les modifications

Dim Ligne As Byte
    Ligne = Range("F4").Value + 3 'On récupère la valeur de la ligne du projet stockée sur la cellule F4 / le +3 permet de zapper les 3 premières lignes de la feuille

' CODE PRINCIPAL
If Range("ChampNEW").Value = Range("ChampACT").Value Then MsgBox "C'est le même " & MotMSG: Exit Sub
    If IsEmpty(Range("ChampNEW")) = True Then If MsgBox("Pas de valeur renseignée, souhaites-tu vraiment supprimer cette info ?", vbOKCancel, "SUPPRESSION ?") = vbCancel Then Exit Sub: Worksheets("FeuilleDestination").Range(Colonne & Ligne).ClearContents: Exit Sub
    If MsgBox("Certaine de vouloir modifier ce champ ?", vbOKCancel, "MODIFICATION DU " & MotMSG) = vbCancel Then Exit Sub
    Range("ChampNEW").Copy Destination:=Worksheets("FeuilleDestination").Range(Colonne & Ligne) 'On colle la valeur de PRÉNOM sur la cellule de la ligne correspondant en colonne F
    Worksheets("FeuilleOrigine").Range("ChampNEW").ClearContents 'On vide la cellule NOM une fois l'opération effectuée

End Sub

Pour préciser l'erreur, c'est en premier lieu cette ligne qu'il m'est indiqué de modifier :

If Range("ChampNEW").Value = Range("ChampACT").Value

Message d'erreur : LA METHODE RANGE DE L'OBJET _GLOBAL À ÉCHOUÉ

J'ai tenté plusieurs syntaxe dans mon Range, mais sans succès. J'essaye d'appeler un nom de cellule, c'est peut être çà qui bloque ?

bonjour alxdesign,

je ne comprends pas cette macro, el doit faire quoi exactement ? De toute façon, un variable du type "Byte" est un integer de 0 à 255, donc jamais un nom ou ...

Range("ChampNEW").Value, cela veut dire que vous avez nommé quelque part une plage avec un nom "Champnew" qui n'a rien à voir avec votre variable "Champnew"

Bonsoir,

vite fait en passant : une variable "byte" n'est pas un "Range"...

@ bientôt

LouReeD

Merci pour vos réponses.

@BsAlv

Range("ChampNEW").Value, cela veut dire que vous avez nommé quelque part une plage avec un nom "Champnew"

c'est exactement ça. Mais justement, au lieu d'écrire "PRENOM" dans mon code à chaque fois qu'il doit être appelé (c'est bien le nom d'une cellule), je cherche à démarrer mon code avec des variables qui puissent simplifier l'adaptation de ce module pour d'autres utilisations. C'est pour cette raison qu'au départ j'ai placé ChampNEW = "PRENOM". Je souhaite de cette manière utiliser la valeur de ChampNEW partout ou "PRENOM" apparait dans le code qui suit. Quand j'utiliserai ce meme code pour ma macro NomChange(), je n'aurai plus qu'a modifier les variable déclarées au début du code.

Désolé de m'exprimer comme PERCEVAL (Kaamelott) :), je cherche à faire un truc qui n'est peut-être pas pertinent... J'imaginais que c'était plutôt pratique ?

@LouReed

Merci, ça va déjà bien m'aiguiller, ça m'apprendra à utiliser des codes que je ne comprend pas :)

Finalement, en déclarant mes variables avec As String je suis parvenu à mes fins. Désolé d'avoir envoyé le code complet, j'aurais du donner un exemple plus clair pour ne pas perturber la compréhension du post. Merci à vous deux pour vos pistes, ça m'a permis de chercher et trouver les bonnes infos ;)

re,

alors, je pense que vous voulez plutôt ceci .... avec par exemple ChampACT comme une variable et donc sans guillemets et "prenomact" comme sa valeur (type string) avec guillemets

Sub PrenomChange()

     'déclaration des variablesutilisées dans le code

     Dim MotMSG As String: MotMSG = "prénom"     'mot utilisé dans la msgBox
     Dim ChampNEW As String: ChampNEW = "PRENOM"     'nom du champ qui va envoyer la modification
     Dim ChampACT As String: ChampACT = "prenomACT"     'nom du champ qui va être modifié
     Dim Colonne As String: Colonne = "F"    'colonne du tableau à modifier
     Dim FeuilleDestination As String: FeuilleDestination = "Prospection"     ' nom de la feuille ou est localisé le tableau à modifier
     Dim FeuilleOrigine As String: FeuilleOrigine = "Feuil2"     'nom de la feuille depuis laquelle on copie les modifications
     Dim Ligne As Long: Ligne = Range("F4").Value + 3     'On récupère la valeur de la ligne du projet stockée sur la cellule F4 / le +3 permet de zapper les 3 premières lignes de la feuille

     ' CODE PRINCIPAL
     If Range(ChampNEW).Value = Range(ChampACT).Value Then MsgBox "C'est le même " & MotMSG: Exit Sub
     If IsEmpty(Range(ChampNEW)) = True Then If MsgBox("Pas de valeur renseignée, souhaites-tu vraiment supprimer cette info ?", vbOKCancel, "SUPPRESSION ?") = vbCancel Then Exit Sub: Worksheets("FeuilleDestination").Range(Colonne & Ligne).ClearContents: Exit Sub
     If MsgBox("Certaine de vouloir modifier ce champ ?", vbOKCancel, "MODIFICATION DU " & MotMSG) = vbCancel Then Exit Sub
     Range(ChampNEW).Copy Destination:=Worksheets("FeuilleDestination").Range(Colonne & Ligne)     'On colle la valeur de PRÉNOM sur la cellule de la ligne correspondant en colonne F
     Worksheets("FeuilleOrigine").Range(ChampNEW).ClearContents     'On vide la cellule NOM une fois l'opération effectuée

End Sub

Oui merci beaucoup, j'ai effectivement utilisé As String qui m'a permis d'arriver au résultat voulu. J'ai en revanche supprimé les "" dans Worksheets("FeuilleOrigine")

Sinon, concernant .copy, je ne suis pas parvenu à adapter mon code pour que seule la valeur soit copiée (et non tout le format de la cellule)

Range(ChampNEW).Copy Destination:=Worksheets("FeuilleDestination").Range(Colonne & Ligne)

Est-ce possible avec des arguments supplémentaires sur .copy ? (ex : PasteSpecial xlPasteValues). Et si oui comment l'intégrer à ma ligne de code ?

re,

on a le choix

     Range(ChampNEW).Copy
     Worksheets("FeuilleDestination").Range(Colonne & Ligne).pastespecial xlValues

ou

     Worksheets("FeuilleDestination").Range(Colonne & Ligne).Value = Range(ChampNEW).Value

Un immense merci ! C'est super comme çà !

re, peut-être plus facile

     Dim FeuilleDestination As String: FeuilleDestination = "Prospection"
     ou
     Dim sh_Dest   As Worksheet: Set sh_Dest = Worksheets("Prospection") 'directement la feuille

Bonsoir @ vous deux !

J'adore BsAlv ! Il ne lâche rien ! Quelle pugnacité !

@ bientôt

LouReeD

Rechercher des sujets similaires à "appel variable dim utilisee code vba"