Macro Global ... As string/Integer
Résolu
conrade82
Messages postés
96
Date d'inscription
Statut
Membre
Dernière intervention
-
pijaku Messages postés 12263 Date d'inscription Statut Modérateur Dernière intervention -
pijaku Messages postés 12263 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
J'ai crée une macro qui permet de mettre à jour une feuille Excel à partir d'un onglet de référence. Je voudrai que dans une cellule soit répertoriée le code fournisseur/une donnée X. Cette donnée X pourra me servir dans d'autre module de la macro. J'ai trouvé qu'en utilisant Global avant Sub, la donnée sauvegardée était utilisable dans toutes les macros (s'il n'y a pas d'interruption du code). Voici mon code, dites-moi ce qui cloche car la formule dans laquelle on devrait retrouver la donnée X s'affiche en erreur.
Merci d'avance de votre aide.
Global PériodeRI As String, NomFichierRI As String
Sub a2_mise_en_forme()
'Définition des variables
PériodeRI = InputBox("Quelle est la période du RI concernée (au format <<du mois de MM AAAA>>) ?", "Période de RI concercée")
NomFichierRI = InputBox("Quel est le nom du fichier RI de Vivian ?", "Nom du fichier RI à traiter")
Sheets("Transaction_Register").Select
Range("a2").Select
Selection.End(xlDown).Select
lastli = ActiveCell.Row
Range("H1").Select
ActiveCell.FormulaR1C1 = "Franchisés1"
Range("i1").Select
ActiveCell.FormulaR1C1 = "Franchisés2"
Range("j1").Select
ActiveCell.FormulaR1C1 = "Franchisés"
Range("k1").Select
ActiveCell.FormulaR1C1 = "Org Id"
Range("l1").Select
ActiveCell.FormulaR1C1 = "Business Account"
Range("m1").Select
ActiveCell.FormulaR1C1 = "CodeNum"
Range("m2").Select
ActiveCell.FormulaR1C1 = _
"=rIGHT(LEFT(C[-12],5),3)"
Range("m2").Select
Selection.Copy
Range("m3:m" & lastli).Select
ActiveSheet.Paste
Calculate
Range("M2:M" & lastli).Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Columns("M:M").Select
Selection.TextToColumns Destination:=Range("M1"), DataType:=xlDelimited, _
TextQualifier:=xlNone, ConsecutiveDelimiter:=False, Tab:=True, Semicolon _
:=False, Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(1, _
1), TrailingMinusNumbers:=True
Range("I2").Select
ActiveCell.FormulaR1C1 = _
"=IF(RIGHT(C[-8],2)=""CM"","""",VLOOKUP(C[4],CodesNum!C[-8]:C[-3],6,0))"
Range("J2").Select
ActiveCell.FormulaR1C1 = "=IF(C[-2]="""",C[-1],C[-2])"
Range("K2").Select
ActiveCell.FormulaR1C1 = _
"=IF(ISERROR(VLOOKUP(C[-2],'CodesNum'!C[-5]:C[-2],3,0)),VLOOKUP(C[-3],'CodesNum'!C[-5]:C[-1],3,0),VLOOKUP(C[-2],'CodesNum'!C[-5]:C[-2],3,0))"
Range("L2").Select
ActiveCell.FormulaR1C1 = _
"=IF(ISERROR(VLOOKUP(C[-3],'CodesNum'!C[-6]:C[-3],3,0)),VLOOKUP(C[-4],'CodesNum'!C[-6]:C[-2],4,0),VLOOKUP(C[-3],'CodesNum'!C[-6]:C[-3],4,0))"
Range("I2:l2").Select
Selection.Copy
Range("i3:i" & lastli).Select
ActiveSheet.Paste
Calculate
Columns("E:F").Select
Selection.NumberFormat = "dd/mm/yy;@"
Columns("A:A").Select
Selection.NumberFormat = "0"
Columns("E:F").Select
With Selection
.HorizontalAlignment = xlRight
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Columns("G:G").Select
Selection.NumberFormat = "#,##0.00"
Columns("E:F").Select
Selection.NumberFormat = "dd/mm/yy;@"
Range("n2").Select
ActiveCell.FormulaR1C1 = "=ABS(C[-7])"
Selection.Copy
Range("n2:n" & lastli).Select
ActiveSheet.Paste
Calculate
Range("a2:n" & lastli).Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Range("a1:n" & lastli).Select
Selection.Sort Key1:=Range("j2"), Order1:=xlAscending, Key2:=Range("n2") _
, Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
False, Orientation:=xlTopToBottom
'C'est ici que je veux que ça fonctionne mais ce n'est pas le cas...
La cellule affiche
Range("O2").Select
ActiveCell.FormulaR1C1 = "=NomFichierRI"
Sheets("Procédure").Select
ActiveWorkbook.Save
End Sub
J'ai crée une macro qui permet de mettre à jour une feuille Excel à partir d'un onglet de référence. Je voudrai que dans une cellule soit répertoriée le code fournisseur/une donnée X. Cette donnée X pourra me servir dans d'autre module de la macro. J'ai trouvé qu'en utilisant Global avant Sub, la donnée sauvegardée était utilisable dans toutes les macros (s'il n'y a pas d'interruption du code). Voici mon code, dites-moi ce qui cloche car la formule dans laquelle on devrait retrouver la donnée X s'affiche en erreur.
Merci d'avance de votre aide.
Global PériodeRI As String, NomFichierRI As String
Sub a2_mise_en_forme()
'Définition des variables
PériodeRI = InputBox("Quelle est la période du RI concernée (au format <<du mois de MM AAAA>>) ?", "Période de RI concercée")
NomFichierRI = InputBox("Quel est le nom du fichier RI de Vivian ?", "Nom du fichier RI à traiter")
Sheets("Transaction_Register").Select
Range("a2").Select
Selection.End(xlDown).Select
lastli = ActiveCell.Row
Range("H1").Select
ActiveCell.FormulaR1C1 = "Franchisés1"
Range("i1").Select
ActiveCell.FormulaR1C1 = "Franchisés2"
Range("j1").Select
ActiveCell.FormulaR1C1 = "Franchisés"
Range("k1").Select
ActiveCell.FormulaR1C1 = "Org Id"
Range("l1").Select
ActiveCell.FormulaR1C1 = "Business Account"
Range("m1").Select
ActiveCell.FormulaR1C1 = "CodeNum"
Range("m2").Select
ActiveCell.FormulaR1C1 = _
"=rIGHT(LEFT(C[-12],5),3)"
Range("m2").Select
Selection.Copy
Range("m3:m" & lastli).Select
ActiveSheet.Paste
Calculate
Range("M2:M" & lastli).Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Columns("M:M").Select
Selection.TextToColumns Destination:=Range("M1"), DataType:=xlDelimited, _
TextQualifier:=xlNone, ConsecutiveDelimiter:=False, Tab:=True, Semicolon _
:=False, Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(1, _
1), TrailingMinusNumbers:=True
Range("I2").Select
ActiveCell.FormulaR1C1 = _
"=IF(RIGHT(C[-8],2)=""CM"","""",VLOOKUP(C[4],CodesNum!C[-8]:C[-3],6,0))"
Range("J2").Select
ActiveCell.FormulaR1C1 = "=IF(C[-2]="""",C[-1],C[-2])"
Range("K2").Select
ActiveCell.FormulaR1C1 = _
"=IF(ISERROR(VLOOKUP(C[-2],'CodesNum'!C[-5]:C[-2],3,0)),VLOOKUP(C[-3],'CodesNum'!C[-5]:C[-1],3,0),VLOOKUP(C[-2],'CodesNum'!C[-5]:C[-2],3,0))"
Range("L2").Select
ActiveCell.FormulaR1C1 = _
"=IF(ISERROR(VLOOKUP(C[-3],'CodesNum'!C[-6]:C[-3],3,0)),VLOOKUP(C[-4],'CodesNum'!C[-6]:C[-2],4,0),VLOOKUP(C[-3],'CodesNum'!C[-6]:C[-3],4,0))"
Range("I2:l2").Select
Selection.Copy
Range("i3:i" & lastli).Select
ActiveSheet.Paste
Calculate
Columns("E:F").Select
Selection.NumberFormat = "dd/mm/yy;@"
Columns("A:A").Select
Selection.NumberFormat = "0"
Columns("E:F").Select
With Selection
.HorizontalAlignment = xlRight
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Columns("G:G").Select
Selection.NumberFormat = "#,##0.00"
Columns("E:F").Select
Selection.NumberFormat = "dd/mm/yy;@"
Range("n2").Select
ActiveCell.FormulaR1C1 = "=ABS(C[-7])"
Selection.Copy
Range("n2:n" & lastli).Select
ActiveSheet.Paste
Calculate
Range("a2:n" & lastli).Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Range("a1:n" & lastli).Select
Selection.Sort Key1:=Range("j2"), Order1:=xlAscending, Key2:=Range("n2") _
, Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
False, Orientation:=xlTopToBottom
'C'est ici que je veux que ça fonctionne mais ce n'est pas le cas...
La cellule affiche
Range("O2").Select
ActiveCell.FormulaR1C1 = "=NomFichierRI"
Sheets("Procédure").Select
ActiveWorkbook.Save
End Sub
A voir également:
- Macro Global ... As string/Integer
- Global positioning system - Accueil - Transports & Cartes
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Jitbit macro recorder - Télécharger - Confidentialité
- Télécharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Macro maker - Télécharger - Divers Utilitaires
5 réponses
Bonjour,
Bon. Alors. On commence par la déclaration de ta variable. Remplace Global par Public, juste pour voir. Par contre, les variables Public sont à déclarer en tête de module.
Mais bon, je ne penses pas qu'il s'agisse de cela. En effet, tu déclares une variable en public si tu en as besoin dans d'autres procédures, d'autres modules. Là ce n'est pas le cas car tu l'utilises (apparemment mais je peux me tromper) dans la même Sub.
Donc, il te suffit de :
déclarer tes variables en dessous de "Sub a2_mise_en_forme()" et virer les guillemets pour pouvoir les utiliser :
Ensuite, évite tous tes Select. Le fait de sélectionner une feuille, cellule, ralentit l'exécution de ton code et ne sert à rien.
Donc remplace, par exemple :
par :
ou encore, remplace :
par :
!!! Attention ce code est dangereux si tu n'as rien en A3.......
Bon. Alors. On commence par la déclaration de ta variable. Remplace Global par Public, juste pour voir. Par contre, les variables Public sont à déclarer en tête de module.
Option Explicit Public Var1 As String, Var2 As Integer Sub 1() Dim Var3 As Byte ... End Sub Sub 2() ... End Sub etc...
Mais bon, je ne penses pas qu'il s'agisse de cela. En effet, tu déclares une variable en public si tu en as besoin dans d'autres procédures, d'autres modules. Là ce n'est pas le cas car tu l'utilises (apparemment mais je peux me tromper) dans la même Sub.
Sub a2_mise_en_forme() 'Définition des variables PériodeRI = InputBox("Quelle est la période du RI concernée (au format <<du mois de MM AAAA>>) ?", "Période de RI concercée") NomFichierRI = InputBox("Quel est le nom du fichier RI de Vivian ?", "Nom du fichier RI à traiter") '.............bla bla bla ton code ici 'C'est ici que je veux que ça fonctionne mais ce n'est pas le cas... La cellule affiche Range("O2").Select ActiveCell.FormulaR1C1 = "=NomFichierRI" End Sub
Donc, il te suffit de :
déclarer tes variables en dessous de "Sub a2_mise_en_forme()" et virer les guillemets pour pouvoir les utiliser :
Sub a2_mise_en_forme() 'Déclaration des variables Dim PériodeRI As String, NomFichierRI As String 'Définition des variables PériodeRI = InputBox("Quelle est la période du RI concernée (au format <<du mois de MM AAAA>>) ?", "Période de RI concercée") NomFichierRI = InputBox("Quel est le nom du fichier RI de Vivian ?", "Nom du fichier RI à traiter") '.............bla bla bla ton code ici 'C'est ici que je veux que ça fonctionne mais ce n'est pas le cas... La cellule affiche Range("O2").Value = NomFichierRI '.............bla bla bla ton code ici End Sub
Ensuite, évite tous tes Select. Le fait de sélectionner une feuille, cellule, ralentit l'exécution de ton code et ne sert à rien.
Donc remplace, par exemple :
Range("H1").Select ActiveCell.FormulaR1C1 = "Franchisés1" Range("i1").Select ActiveCell.FormulaR1C1 = "Franchisés2" Range("j1").Select ActiveCell.FormulaR1C1 = "Franchisés" Range("k1").Select ActiveCell.FormulaR1C1 = "Org Id" Range("l1").Select ActiveCell.FormulaR1C1 = "Business Account"
par :
Range("H1").Value = "Franchisés1" Range("i1").Value = "Franchisés2" Range("j1").Value = "Franchisés" Range("k1").Value = "Org Id" Range("l1").Value = "Business Account"
ou encore, remplace :
Range("a2").Select Selection.End(xlDown).Select lastli = ActiveCell.Row
par :
lastli = Range("a2").End(xlDown).Row
!!! Attention ce code est dangereux si tu n'as rien en A3.......
référence à toutes les cellules non vide de "O2" à "lastli" de la colonne K
Je ne comprends donc pas ce que tu souhaites afficher en Cellule O2...
- Le nombre de valeurs contenues en colonne K,
- la moyenne des valeurs de la colonne K?
etc...
Je ne comprends donc pas ce que tu souhaites afficher en Cellule O2...
- Le nombre de valeurs contenues en colonne K,
- la moyenne des valeurs de la colonne K?
etc...
en fait en O2 je veux afficher la formule =K:K&"/"&"050413" car le résultat devrait être égal à O2=690/050713 par exemple. Cette référence deviendra un numéro de facture par la suite dans le code car le but de cette macro c'est d'automatiser le traitement des données de l'onglet "Transaction_Register" afin d'alimenter les onglets qui se créent par entités et surtout les onglets "header" et "line". Mais la problématique c'est que en tapant la formule dans la cellule, on obtient l'affichage que je recherche. Mais avec mon code de départ (C[-4]...), la cellule affiche le résultat 690/050413=0.01360..... De plus, il me faut cette donnée dans toutes les celles de la colonne O pour lesquelles il y a une valeur différente de "rien" en colonne K:K.
Essaye donc ceci :
Dim maVar As String, NomFichierRI As String NomFichierRI = InputBox("Quel est le nom du fichier RI de Vivian ?", "Nom du fichier RI à traiter") var = "=K:K" Range("O2") = var Range("O2") = Range("O2") & "/" & NomFichierRI
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Super, ça fonctionne bien. Et si je veux le faire pour toutes les cellules allant de O2 à ma dernière cellule non vide?
J'ai tenté ce qui suit (où ai-je faux ?)
J'ai tenté ce qui suit (où ai-je faux ?)
Dim maVar As String, NomFichierRI As String NomFichierRI = InputBox("Quel est le nom du fichier RI de Vivian ?", "Nom du fichier RI à traiter") maVar = "=K:K" Sheets("Transaction_Register").Select If Range("a3").Value = "" Then lastli = Range("a2") Else: lastli = Range("a2").End(xlDown).Row End If Range("O2:O" & lastli) = maVar Range("O2:O" & lastli) = Range("O2:O" & lastli) & "/" & NomFichierRI Range("O2:O" & lastli).Select Selection.Copy Range("O2:O" & lastli).Select ActiveSheet.Paste Calculate Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.CutCopyMode = False
Essaye ceci :
Dim maVar As String, NomFichierRI As String, lastli As Long, i As Long NomFichierRI = InputBox("Quel est le nom du fichier RI de Vivian ?", "Nom du fichier RI à traiter") maVar = "=K:K" Sheets("Transaction_Register").Select If Range("a3").Value = "" Then lastli = Range("a2") Else lastli = Range("a2").End(xlDown).Row End If Range("O2:O" & lastli) = maVar For i = 2 To lastli Range("O" & i) = Range("O" & i) & "/" & NomFichierRI Next
Afin de mieux cerner ma problématique, j'aurai bien voulu joindre mon fichier Excel mais je ne vois pas comment faire... En fait la variable NomFichierRI et même la variable PériodeRI me serve autant dans le module "a2_mise_en_forme" mais également dans une autre module. J'ai en fait créé un module par Sub mais le but sera d'utiliser une fonction "Call" afin de relier les modules. Merci beaucoup pour la simplification du code, je n'ai jamais pensé à ça... comment je fais si je veux joindre une pièce ?
Tu va sur ce site créer un lien vers ton fichier et reviens ici coller ce lien dans une réponse.
Une sub par module est inutile et va t'embrouiller plus qu'autre chose......
Merci d'avance.
Remarque : les 2 macros utilisant tes variables étant regroupées dans le même module, tu n'as pas besoin de déclarer tes variables comme Public, Dim suffit, mais en tête de modul et en dehors de toute Sub ou Function.