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

Variable dim Z as range et macro lourde

  • Initiateur de la discussion Initiateur de la discussion Goufra
  • 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 !

Goufra

XLDnaute Occasionnel
Bonjour,
merci à vous de bien vouloir m'aider.

1/ j'ai écrit une macro et j'ai déclaré mes variables comme suit :
Dim Z As Range
Dim Arec1 as Range
Dim Arec2 as Range
etc... jusqu'à la variable arec24.
Cela bloque ma macro, presque béotien et malgré mes recherches je ne comprends pas où se trouve mon erreur.

2/ j'ai une macro qui me sert à recopier 24 plages vers un tableau récap.
Je suis sûr qu'il existe un procédé plus élégant que celui que j'ai adopté.

Amicalement
 

Pièces jointes

Re : Variable dim Z as range et macro lourde

Bonjour Goufra, Catrice
Peut-être quelque chose comme ceci ?
Code:
[COLOR="DarkSlateGray"][B]Option Explicit

Sub sommation_semaines()
Dim dAdd, i As Integer
   Application.ScreenUpdating = False
   dAdd = Sheets("R chef").Range("W33:W56").Value
   Sheets("R chef").Range("D11:D22").ClearContents
[COLOR="Gray"]4[/COLOR]  Application.Calculation = xlCalculationManual   [COLOR="SeaGreen"]'utile s'il y a beaucoup _
                                                   de formules dans le classeur[/COLOR]
   With Range(Sheets("R chef").Range("W32").Value)
      For i = LBound(dAdd) To UBound(dAdd)
         Range(dAdd(i, 1)).Copy
         .PasteSpecial Paste:=xlPasteValues, Operation:=xlAdd, _
            SkipBlanks:=False, Transpose:=False
      Next i
   End With
[COLOR="Gray"]11[/COLOR] Application.Calculation = xlCalculationAutomatic   [COLOR="SeaGreen"]'indispensable _
                                                      à cause de la ligne 4[/COLOR]
   Application.CutCopyMode = False
   Application.ScreenUpdating = True   [COLOR="SeaGreen"]'facultatif[/COLOR]
End Sub[/B][/COLOR]
(Les numéros de ligne sont inutiles.)​
ROGER2327
#2166
 
Re : Variable dim Z as range et macro lourde

Re,

Une petite boucle aussi ...
Code:
Sub Test()
Var1 = Array("w33", "w34", "w35")
Var2 = Array("w32", "w32", "w32") 'où Var3 = "W32"   si c'est oujours la meme chose
'---------------
With Sheets("R chef")
    .Range("D11:D22").ClearContents
    For i = 0 To UBound(Var1)
        .Range(.Range(Var1(i))).Copy
        .Range(.Range(Var2(i))).PasteSpecial Paste:=xlPasteValues, Operation:=xlAdd, SkipBlanks:=False
        'ou bien .Range(.range(Var3)).PasteSpecial Paste:=xlPasteValues, Operation:=xlAdd, SkipBlanks:=False
    Next
End With
End Sub

Il faut compléter Var1 et Var2
 
Re : Variable dim Z as range et macro lourde

Merci à toi roger et à toi catrice pour votre réponse.

Une certitude l'application de roger fonctionne. Je n'ai plus qu'à essayer de comprendre la réponse bout par bout.
Idem pour la réponse de catrice.
Si je n'arrive pas à comprendre puis-je continuer le chat et vous interwiever en écrivant à la suite de la discusssion que j'ai ouverte.

Plus j'avance et moins je comprends !
Amicalement
 
Re : Variable dim Z as range et macro lourde

Bonjour,

Bien sur, tu peux continuer à écrire dans ce Fil sur ce sujet ...

En m'inspirant du code de Roger2327, je propose cette version :
Code:
Sub Test()
With Sheets("R chef")
    Set MesRef = .Range("W33:W56")
    Dest = "W32"
    '---------------
    .Range("D11:D22").ClearContents
    For Each X In MesRef
        .Range(X.Value).Copy
        .Range(Dest).PasteSpecial Paste:=xlPasteValues, Operation:=xlAdd, SkipBlanks:=False
    Next
End With
End Sub
 
Dernière édition:
Re : Variable dim Z as range et macro lourde

Bonjour à vous deux roger2327 et catrice
J’apprends !
Roger,
J’ai compris le fonctionnement de ta démo. C’est superbe par sa simplicité.

Toutefois j’ai un souci de compréhension d’écriture sur 3 points :
1/ Range(dAdd(i, 1)).Copy
Pourquoi est-on obligé d’utiliser l’argument Range puisqu’il est présent et désigne la plage dans :
(Sheets("R chef").Range("W33:W56").Value (i, 1)).Copy

2/ i, 1
i renvoie du plus petit au plus grand indice, pourquoi est-on obligé d’utiliser l’argument " , 1)"

3/ l’utilisation de Integer pour déclarer les 2 variables dAdd et i

Si tu peux me renvoyer à un livre simple ou à un tuto.


Catrice

1/ Ta dernière démo ne fonctionne pas. J’obtiens seulement la mise en surbrillance des cellules w32 à w42

2/ Ta 1 ère réponse concerne une boucle et l’utilisation de Var1 et Var2 . Les 24 tableaux sont servis et contiennent des chiffres différents.
Var1 = Array("w33", "w34", "w35")
Var2 = Array("w32", "w32", "w32")

comme cela concerne les cellules w33 à w56 je suppose qu'il faut continuer pour var1 d’écrire w36, w37 etc jusqu’à w56.
Var2 fau-il écrire 24 fois w32 dans var2

Dans l'attente merci à vous deux pour le temps que vous me consacrez.
 
Re : Variable dim Z as range et macro lourde

Re,

Autant pour moi, il y avait une petite erreur.
Code:
Sub Test()
With Sheets("R chef")
    Set MesRef = .Range("W33:W56")
    [COLOR="Blue"]Set Dest = .Range("W32")[/COLOR]
    '---------------
    .Range("D11:D22").ClearContents
    For Each X In MesRef
        .Range(X.Value).Copy
        .Range([COLOR="blue"]Dest.Value[/COLOR]).PasteSpecial Paste:=xlPasteValues, Operation:=xlAdd, SkipBlanks:=False
    Next
End With
End Sub


comme cela concerne les cellules w33 à w56 je suppose qu'il faut continuer pour var1 d’écrire w36, w37 etc jusqu’à w56.
Oui

Var2 fau-il écrire 24 fois w32 dans var2
Oui. Ou bien appliqué la variante qui était proposée.
A savoir :
Code:
Sub Test1()
Var1 = Array("W33", "W34", "W35", "W36", "W37", "W38", "W39", "W40", "W41", "W42", "W43", "W44", "W45", "W46", "W47", "W48", "W49", "W50", "W51", "W52", "W53", "W54", "W55", "W56")
Var3 = "W32"
'---------------
With Sheets("R chef")
    .Range("D11:D22").ClearContents
    For i = 0 To UBound(Var1)
        .Range(.Range(Var1(i))).Copy
        .Range(.Range(Var3)).PasteSpecial Paste:=xlPasteValues, Operation:=xlAdd, SkipBlanks:=False
    Next
End With
End Sub
 
Dernière édition:
Re : Variable dim Z as range et macro lourde

Merci catrice,
je vais w dessus en fin d'après midi.
Je vais encore abuser :
Peux-tu éclairer ma lanterne sur l'utilisation de i et (i, 1) dans les 2 formulations.
For i = 0 To UBound(Var1)
.Range(.Range(Var1(i))).Copy

For i = LBound(dAdd) To UBound(dAdd)
Range(dAdd(i, 1)).Copy
Cela rejoint la question 2 que j'adressais à roger 2327
Merci à toi
 
Re : Variable dim Z as range et macro lourde

Re...
  1. Je ne comprends pas la question.
    _
  2. En écrivant
    Code:
    [COLOR="DarkSlateGray"]   dAdd = Sheets("R chef").Range("W33:W56").Value[/COLOR]
    on place les valeurs de la plage Range("W33:W56") dans la variable dAdd ; cette variable représente donc un tableau de 24 lignes et 1 colonne. Pour en désigner les éléments, on utilise dAdd(n°_de_ligne, n°_de_colonne).
    Par conséquent, le premier élément (valeur de la cellule W33) est désigné par dAdd(1, 1) ; le deuxième élément (valeur de la cellule W34) est désigné par dAdd(2, 1).
    Le numéro de colonne est toujours 1 puisqu'il n'y a qu'une colonne.
    _
  3. Je ne vois pas que j'aie déclaré dAdd comme entier dans ma procédure. Pour cela il eût fallu que j'écrivisse Dim dAdd as Integer. Ne l'ayant pas fait, dAdd prend le type par défaut, qui est Variant.
    i est déclaré comme entier, ce qui est assez naturel pour un indice de tableau. (J'ai supposé que votre tableau ne serait jamais très long. S'il devait être très long, il faudrait déclarer i comme entier long : Dim i As Long.)
A propos de livres, je n'en connais qu'un seul bon, mais je ne l'ai pas encore écrit. Non, je plaisante... Sérieusement, il doit en exister, mais je ne suis pas au courant de la bibliographie moderne. Ceux que je connais sont aujourd'hui dépassés et probablement indisponibles, mes débuts remontant à des temps oubliés.
Une source essentielle reste l'aide fournie par Microsoft, même si les traductions sont quelquefois obscures, ou désopilantes. Si vous lisez l'Américain, ça simplifie les choses.
Bon courage.
ROGER2327
#2174
 
Re : Variable dim Z as range et macro lourde

Bonsoir Catrice et Roger2327


Merci à vous deux pour vos explications. j'ai progressé d'un cran dans la compréhension de l'utilisation des variables et dans l'écriture d'une macro.

Par exemple avec mes deux gros bouquins et une prise de tête je n'avais pas compris l'utilisation de dim dAdd.

Non seulement je ne l'avais pas comprise mais je croyais que en écrivant
dim Add,i as integer
as integer concernait aussi dAdd.

Bien amicalement à vous pour votre aide
 
Re : Variable dim Z as range et macro lourde

Re...
Ce n'est certainement pas une consolation, mais j'ai moi-même cru la même chose pendant quelque temps. Les débuts sont difficiles pour tout le monde, mais ça vaut le coup de persévérer. Surtout avec l'aide qu'on trouve sur ce forum.​
Bon courage.
ROGER2327
#2190
 
- 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

Discussions similaires

D
Réponses
3
Affichages
2 K
demonsares
D
M
Réponses
3
Affichages
1 K
MarcTer
M
P
Réponses
0
Affichages
897
panpipes
P
O
Réponses
24
Affichages
3 K
oliwood
O
P
Réponses
3
Affichages
847
P
N
  • Question Question
Réponses
5
Affichages
3 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…