AutomaVB

Résolu
Bonjour,

Je veux terminer cette macro mais je n'y arrive pas:

ce que je veux faire c ajouter un p au début de la macro que je peux faire varier(dans la 1ère macro ci dessous c le cas particulier ou p=60 de DC à FJ y'a 60 colonnes comme de AU à DC, et pour la deuxième en dessou c p=40), ca serait plus facile de partir de la dernière colonne(celle ou ya les derniers chiffres dans la Feuil1 du fichier ci-joint:
http://www.cijoint.fr/cjlink.php?file=cj201101/cijgMdNsm1.xls
J'ai essayé avec la fonction Offset mais j'arrive pas.

Donc avec cette macro c le cas particulier ou p=60
Sub CCM()

Const imax = 1200

Dim lig As Long
Dim f1 As String, f2 As String, f3 As String, f4 As String

lig = 20

For i = 2 To imax Step 2

f1 = "=product('Coef Mul Titre Large Ret1m'!$DC$" & lig & ":$FJ$" & lig & ")-1"
f2 = "=Feuil1!$DB$" & lig

f3 = "=product('Coef Mul Titre Large Ret1m'!$AU$" & lig & ":$DC$" & lig & ")-1"
f4 = "=Feuil1!$AT$" & lig

Range("A" & i).Formula = f1
Range("B" & i).Formula = f2

Range("A" & (i + 1)).Formula = f3
Range("B" & (i + 1)).Formula = f4

lig = lig + 1

Next i

End Sub

Avec celle ci c'est le cas particulier ou p=40(résultat dans l'onglet p=40)

Sub CCM()

'cas p = 40

Const imax = 1800

Dim lig As Long
Dim f1 As String, f2 As String, f3 As String, f4 As String, f5 As String, f6 As String

lig = 20

For i = 2 To imax Step 3

f1 = "=product('Coef Mul Titre Large Ret1m'!$DW$" & lig & ":$FJ$" & lig & ")-1"
f2 = "=Feuil1!$DV$" & lig

f3 = "=product('Coef Mul Titre Large Ret1m'!$CJ$" & lig & ":$DW$" & lig & ")-1"
f4 = "=Feuil1!$CI$" & lig

f5 = "=product('Coef Mul Titre Large Ret1m'!$AW$" & lig & ":$CJ$" & lig & ")-1"
f6 = "=Feuil1!$AV$" & lig

Range("A" & i).Formula = f1
Range("B" & i).Formula = f2

Range("A" & (i + 1)).Formula = f3
Range("B" & (i + 1)).Formula = f4

Range("A" & (i + 2)).Formula = f5
Range("B" & (i + 2)).Formula = f6

lig = lig + 1

Next i

End Sub

Merci d'avance pour votre aide

30 réponses

Résumé de la discussion

On cherche à modifier une macro VBA pour intégrer un paramètre p et démarrer les calculs à partir de la dernière colonne détectée, p=60 couvrant DC à FJ et p=40 DW à CJ. Plusieurs réponses suggèrent de partir de FJ et de se décaler par pas fixes, ou de remplacer FJ par une détection automatique de LastColumn via xlToLeft. L’une des solutions avancées est une macro AutomaVB qui calcule LastColumn, crée des feuilles pour p et remplit les formules sur plusieurs lignes avec des références dynamiques. Des échanges indiquent aussi l’intérêt de clarifier le rôle de p et de préciser le ciblage des plages et des feuilles pour éviter des ajustements manuels répétés.

Bobot (l’IA à votre service)
  1. re

    j'ai essayé en vrai grandeur sur ma machine avec les valeurs suivantes

      i = ideb  '=20     
      jmax = (lastcolumn - 13) \ pp       
      imax = 619                             ' derniere ligne actuelle       
      imax = jmax * (imax - ideb) + ideb     ' pour un essai mettre 100


    les durées d'exécution
    pour p = 2 > 10 secondes
    pour p = 10 > 2 secondes

    ce qui est prudent, c'est qu'avant de lancer le tout
    - controler en faisant un suivi des variable pour une execution
    - faire quelques essais en augmentant progressivement la valeur de imax,
    - tenter une seule valeur de p pour la vraie valeur de imax

    plus d'une heure, ça ne me parait pas bon.
    es tu sur d'avoir initialise la valeur de imax
    imax = 619 pour mon classeur ou LastLine- je crois dans ton code)
    avant de le recalculer en fonction de jmax ...
    Si tu ne l'as pas fait, tu te retrouves avec une valeur negative de imax qui va etre impossible a atteindre dans la boucle (qui va etre infinie)
    while i < imax
    ce qui pourrait expliquer ton pb de durée d'execution

    bonne suite
    1. Encorec merci pour ton aidela macro je l'ai lancé y'à 1h , elle est pas encore terminé'( quand je mets imx = 4300 donc jusqu'à la fin), tu connais pas un truc à rajouter pour l'accélérer, parce que elle me plante complètement le pc, ca me bloque tout, jpeus rien faire d'autre en atendant

      Merci
      1. re

        pour la 1° question,
        ce que je comprends,
        tu veux que lig decrive l'intervalle 20-619
        si c'est ça :
        jmax étant le nombre de lignes "i" pour une ligne "lig", il y a jmax fois moins de lignes "lig" que de lignes "i", il suffit de changer le controle du
        While i < imax
        par
        While i < jmax*(imax-ideb)+ideb

        tu peux aussi redefinir imax avant : imax = jmax*(imax-ideb)+ideb

        ex pour p = 10 si imax = 70, il faut (70-20)*10+20-20 lignes "i" , pour que "lig" atteigne 50 (-20 puisqu'on commence a ideb=20)

        pour la 2° question
        ton code est correct, je ne vois pas mieux
        tu peux peut etre enlever l'option de recalcul auto pour accelerer
        a la main ou en VBA avec
        Application.Calculation = xlManual
        et en ressortant
        Application.Calculation = xlAutomatic

        bonne suite
        1. Merci d'etre encore là, dernière chose.

          Pour ca
          lig = 20
          lig = lig + 1

          j'arrive pas à le remplacer par
          For lig = 20 To 619

          Next lig

          Ca permet de calculer indirectement le imax.
          pour que la macro sache ou s'aréter et ne pas continuer dans le vide tout en bas des feuilles ceer et mettre des -1 partout en colonne B et des 0 partout en colonne C.
          et quand y'a des cellules vides en colonne C dans les feuilles créer ca m'interresse pas j'aimerai supprimer toutes ces lignes mais avec mon code c trop long:For i = Derlig To 20 Step -1

          If Cells(i, 3) = "" Then Rows(i).Delete

          Next

          Merci.
          1. re

            quelques remarques
            - j'avoue que j'ai toujours du mal a comprendre la gestion des paquets
            - je considere que ton code correspond a ce que tu veux exactement
            ceci etant précisé,
            - les variables ne sont pas toutes déclarées (il faut absolument plus de rigueur)
            - j n'a pas été initialisé (avec un while ce n'est pas très bon)
            - j'ai remplacé le while j par ton ancien essai for j (qui marche bien)
            - lig = lig+1 a l'air correct
            - ton code modifié

            Sub AutomaVB()
            
            Const co1 = 2
            Const co2 = 3
            
            Const FCoeff = "'Coef Mul Titre Large Ret1m'"
            Const f1 = "'Feuille1'"
            Const ideb = 20
            
            Dim lig As Long, col1 As Long, col2 As Long, i As Long, j As Long, pp As Long
            Dim a1 As String, b1 As String
            Dim NomFeuille As String
            Dim NbFeuilles As Long
            Dim lastcolumn As Long, lastrow As Long, colder As Long, p As Long, imax As Long, jmax As Long
            
            With Sheets("Coef Mul Titre Large Ret1m")
              lastcolumn = .Cells(20, .Columns.Count).End(xlToLeft).Column
            End With
            colder = lastcolumn
            imax = 70  'ici a modifier avec le nb de lignes
            
            For p = 3 To 4 Step 1
            
              ' creation de la feuille p
              pp = 6 * p
              NomFeuille = "p=" & pp
              NbFeuilles = Sheets.Count
              Sheets.Add
              ActiveSheet.Name = NomFeuille
              Sheets(NomFeuille).Move after:=Sheets(Sheets.Count)
            
              ' remplir la feuille NomFeuille
              lig = 20
              i = ideb
              jmax = (lastcolumn - 13) \ pp
              
              While i < imax
                col1 = colder - pp + 1
                col2 = colder
            
                For j = 1 To jmax
            
                  a1 = "=product(" & FCoeff & "!R" & lig & "C" & col1 & ":" & "R" & lig & "C" & col2 & ")-1"
                  b1 = "=" & f1 & "!R" & lig & "C" & col1 - 1
            
                  Cells(i, co1).FormulaR1C1 = a1
                  Cells(i, co2).FormulaR1C1 = b1
            
                  i = i + 1
                  col1 = col1 - pp
                  col2 = col2 - pp
                Next j
                lig = lig + 1
              Wend
            Next p
            
            End Sub


            bon courage !!!
            1. c ca que je veux, j'arrive pas à débuger mais c exactement ce que je veux:

              Sub AutomaVB()

              With Sheets("Coef Mul Titre Large Ret1m")
              LastColumn = .Cells(20, .Columns.Count).End(xlToLeft).Column
              End With

              Const co1 = 2
              Const co2 = 3

              colder = LastColumn
              Const FCoeff = "'Coef Mul Titre Large Ret1m'"
              Const f1 = "'Feuille1'"
              Const ideb = 20

              Dim lig As Long, col1 As Long, col2 As Long, i As Long, j As Long, pp As Long
              Dim a1 As String, a2
              Dim NomFeuille As String
              Dim NbFeuilles As Long

              For p = 3 To 10 Step 1
              ' creation de la feuille p
              NomFeuille = "p=" & (p * 6)
              NbFeuilles = Sheets.Count
              Sheets.Add
              ActiveSheet.Name = NomFeuille
              Sheets(NomFeuille).Move after:=Sheets(Sheets.Count)

              ' remplir la feuille p
              lig = 20
              imax = 70
              pp = 6 * p
              i = ideb
              While i < imax
              col1 = colder - pp + 1
              col2 = colder

              'For j = 1 To (LastColumn - 13) / pp j'aimerai avoir ca _
              mais en prenant l'entier le plus proche de (LastColumn - 13) / pp pour cette boucle mais comme j'arrive pas _
              je rajoute un While
              While j <= (LastColumn - 13) / pp

              a1 = "=product(" & FCoeff & "!R" & lig & "C" & col1 & ":" & "R" & lig & "C" & col2 & ")-1"
              b1 = "=" & f1 & "!R" & lig & "C" & col1 - 1

              j = j + 1

              Cells(i, co1).FormulaR1C1 = a1
              Cells(i, co2).FormulaR1C1 = b1

              i = i + 1
              col1 = col1 - pp
              col2 = col2 - pp
              Wend
              'Next j
              lig = lig + 1'Il est ici le bug
              Wend
              Next p

              End Sub

              Merci c fini c juste un problème de nug maintenant. Merci
              1. Sub Window()

                With Sheets("Coef Mul Titre Large Ret1m")
                LastColumn = .Cells(20, .Columns.Count).End(xlToLeft).Column
                End With
                LastLine = Range("Feuille1!A65536").End(xlUp).Row

                Const co5 = 5
                Const co6 = 6

                colder = LastColumn
                Const FCoeff = "'Coef Mul Titre Large Ret1m'"
                Const f1 = "'Feuille1'"
                Const ideb = 20

                Dim lig As Long, col1 As Long, col2 As Long, i As Long, j As Long, pp As Long
                Dim a1 As String, a2
                Dim NomFeuille As String
                Dim NbFeuilles As Long

                For p = 3 To 10 Step 1
                ' creation de la feuille p
                NomFeuille = "p=" & (p * 6)
                NbFeuilles = Sheets.Count
                Sheets.Add
                ActiveSheet.Name = NomFeuille
                Sheets(NomFeuille).Move after:=Sheets(Sheets.Count)

                ' remplir la feuille p
                lig = 20
                'imax = (p * LastLine) - ((p - 1) * 19)

                pp = 6 * p
                i = ideb
                'While i < imax
                col1 = colder - pp + 1
                col2 = colder
                For j = 1 To p
                a1 = "=product(" & FCoeff & "!R" & lig & "C" & col1 & ":" & "R" & lig & "C" & col2 & ")-1"
                b1 = "=" & f1 & "!R" & lig & "C" & col1 - 1

                Cells(i, co1).FormulaR1C1 = a1
                Cells(i, co2).FormulaR1C1 = b1

                i = i + 1
                col1 = col1 - pp
                col2 = col2 - pp
                Next j
                lig = lig + 1
                'Wend
                Next p
                End Sub

                Alors voila ce qui faudrait mais j'ai un bug depuis hier que j'arive pas à corriger

                si jreprends ton commentaire:si on bouge de 6 en 6, pour moi, on coupe en p = 20 (120/20 = 6)
                on bouge de 6 en 6 ton sens ici ca veut dire en colonne dans la feuille Coef Mul Titre Large Ret1m, mais moi je voulais dire ca depuis le début: For p = 3 To 10 Step 1
                ' creation de la feuille p
                NomFeuille = "p=" & (p * 6)

                Y'a que ca comme bug le reste ca n'a pas l'air d'etre faux

                Merci encore d'etre rester avec moi.
                Cindy001
                1. jréponds pas encore parceque j'essai de la terminer par rapport à

                  puis j'aimerai ensuite les cas 54, 48, 42, 36 jusqu'à 12(12 c le dernier cas que j'ai dis ou on coupe en 10(120/10)......on bouge de 6 en 6 à partir de FJ
                  'si on bouge de 6 en 6, pour moi, on coupe en p = 20 (120/20 = 6) , si on coupe en 20 c le cas 6, puis j'essai d'ajouter la boucle: for p = 6 To 60 Step 6 pour tous les autres cas'

                  en fait j'essaie de partir de la dernière collone que j'ai fais calculer automatiquement en fesant:
                  With Sheets("Coef Mul Titre Large Ret1m")
                  LastColumn = .Cells(20, .Columns.Count).End(xlToLeft).Column
                  End With

                  et de là faire le décalage de 6 en 6 jusqu'à ce qu'il y a plus de chiffre(dans la feuille Coef Mul Titre Large Ret1m) pour faire le product dans les formules.

                  jte réponds quand je peux, si j'arrive ou pas.
                  1. re

                    aïe, c'est la premiere fois que tu me dis qu'on peut deborder par la gauche (avant la colonne 47), moi qui me faisais du souci pour la relation entre p, la taille des paquets et le nombre fatidique 120 !!!!
                    j'ai amenage un peu pour que ça reponde a la nouvelle question,
                    j'ai mis toute l'initialisation des données dans la feuille F0, ce sera a toi de remplir selon les besoins avant de lancer la creation de la feuille,
                    RQ1. la valeur de p est calculée donc ne pas y toucher.
                    RQ2. si tu dois modifier d'autres données, tu peux completer la feuille F0 et bien sur la procedure CreationFeuille (Module 7)
                    RQ3. J'ai traité le cas p = 10 qui correspond à ton Cas 5, ça colle

                    http://www.cijoint.fr/cjlink.php?file=cj201101/cij3p48aVN.xls

                    RQ4. dans ton Cas2, les paquets ne sont pas disjoints
                    ligne 20 > C107-166
                    ligne 21 > C47-C107
                    etc ..
                    alors que dans ton cas 5 elle sont bien disjointes
                    ligne 20 > C155-166
                    ligne 21 > C143-C154
                    etc ..

                    ???

                    bonne suite
                    1. C pour ca que j'avais dis on part de FJ, et on bouge de 6 en 6, le découpage AU:FJ j'en ai parlé pour me faire comprendre car au début si tu trapeles j'avais du mal.

                      Mais pour le cas 24, 24*5=120 donc on ira bien jusqu'à AU cad 120 colonnes avant FJ, pour 60 c pareil, car c aussi un multiple de 120, 60*2, mais tous les autres cas 12, 18,(24 on l' déja) 30, 36, 42, 48, et 54 on s'arretera donc pas en AU(avant) mais c pas grave le but c d'aller aussi loin qu'on peut avant FJ, donc jusqu'à qu'on à plus de chiffre dans la feuille Feuille1, donc jusqu'à qu'on a plus de chiffres pour calculer a1 et b1.

                      Mais je pense que j'y arriverai, jpense qu'avec ta macro c facilement modifiable.

                      Premièrement, jcommencerai par remplacer Const colder = 166 par Const colder = DernièreColonne, en lui fesant calculer automatiquement ce DernièreColonne.....

                      Jte tiendrai au courant car j'ai pas excel chez moi.

                      Merci encore bonne fin de we
                      1. re
                        en relisant ton dernier post, j'ai encore quelques doutes, donc je re-précise comment j'ai compris/traité le decoupage

                        - le cas p=5 correspond au decoupage de C47:C166 (AU:FJ) en 5 paquets de 120/5 = 24 colonnes (166:143 , 142:119 , ... , 70:47)
                        - donc pour p (obligatoirement diviseur de 120) on découpe C47:C166 en p paquets de 120/p

                        puis j'aimerai ensuite les cas 54, 48, 42, 36 jusqu'à 12(12 c le dernier cas que j'ai dis ou on coupe en 10(120/10)......on bouge de 6 en 6 à partir de FJ
                        si on bouge de 6 en 6, pour moi, on coupe en p = 20 (120/20 = 6)

                        sur mon envoi, j'ai traité le cas p = 10,
                        enfin, tu verifies avec les cas que tu as déjà fabriqués et tu dis ...

                        bonne suite
                        1. bon jpeux pas rgarder la parceque j'ai pas excel chez moi mais comme t'as compris ce que je voulais jpense que t'as bien traité ca:(c ce que j'avais mis plus haut le 12 jan 2011 à 23:33)

                          on coupe en 2: on aura 60 et 60 colonnes(120/2)
                          puis j'aimerai ensuite les cas 54, 48, 42, 36 jusqu'à 12(12 c le dernier cas que j'ai dis ou on coupe en 10(120/10)......on bouge de 6 en 6 à partir de FJ

                          quand jdisais à la fin 120 , puis 120/2(p = 2), puis 120/3 (p =3)....., c'était pour que tu saisisses le truc, qui était un peu difficile à expliquer.

                          Mais bon c peut etre ce que t'as fais.

                          Alors Merci jpourrais rgarder ca que lundi.
                          1. re

                            j'ai rajouté la creation et le remplissage des feuilles selon la valeur de p > feuille F0, (p =2 correspond a ton 60, p = 3 à ton 40 etc ... )

                            http://www.cijoint.fr/cjlink.php?file=cj201101/cijYHPIBGu.xls

                            les modules deviennent inutiles (sauf module 6 qui contient le code) et pourront etre supprimes
                            si c'est bon, il te faudra modifier dans le code de CreerFeuille, les valeurs de col1, col2 et imax

                            bonne suite
                            1. Contributeur
                              Bonjour le forum,
                              J'ai parcouru le topic en diagonal et je compte pas aller plus loin, mais ce qui me fait intervenir c'est... pourquoi faire une macro qui insère une formule plutôt que de mettre directement la fonction qui génère la réponse. ???
                              Ce serait quand même plus rationnel.
                              A+
                              1. > lermitte222
                                - à l'origine, la demande a ete faite avec des formules
                                - si les données changent, les formules permettront la mise a jour
                                a+
                                -
                              2. Contributeur
                                Mais oui, mais avec des fonctions ça se met à jour aussi !!
                            2. re
                              as tu
                              - regarde le la feuille cas 5 de mon dernier post
                              (clic-droit sur l'onglet/Visualiser le code)
                              - mis ton bouton dans la feuille a remplir
                              - mis un bouton avec la boite a outils controle
                              Au cas où !!
                              - Affichage/boite a outils controle/
                              - passer en mode creation (le petit triangle bleu)
                              - clic-clic sur le bouton pour passer a l'editeur VB
                              - et mettre le code entre Private Sub CommandButton1_Click() et end sub
                              - repasser en mode execution (le petit triangle bleu)
                              bonne suite
                              1. j'avou que je ne suis pas assez fort en vb pour comprendre tout de suite .

                                j'ai mis un bouton sur la feuille j'y ai mis le code.
                                Mais quend je clique dessus il se passe.

                                Jconnais pas trop ca, peut-etre faut il que je rajoute mon code avant le End Sub avec??

                                jvais continuer à essayer de le comprendre il mfaut ptere juste un peu de temps

                                Merci de rseter avec moi
                                1. re

                                  j'ai toujours des pb pour me connecter au site !!!

                                  au vu de ton dernier envoi, il y a bien cette fois une logique de découpage selon la valeur de p
                                  du coup, le code est grandement simplifié

                                  - tu mets un bouton (avec la boite a outils controle) dans la feuille
                                  - tu y attaches le code suivant

                                  Const p = 10   
                                  Const imax = 70   
                                  Const co1 = 5   'j'ai execute en colonnes 4 et 5   
                                  Const co2 = 6   
                                  Const colder = 166   
                                  Const FCoeff = "'Coef Mul Titre Large Ret1m'"   
                                  Const f1 = "'Feuil1'"   
                                  Const ideb = 20    ' ligne 1 feuille cas = 3   
                                  
                                  Dim lig As Long, col1 As Long, col2 As Long, i As Long, j As Long, pp As Long   
                                  Dim a1 As String, a2 as string   
                                  
                                  lig = 20   
                                  pp = 120 \ p   
                                  
                                  i = ideb   
                                    While i < imax   
                                      col1 = colder - pp + 1   
                                      col2 = colder   
                                       
                                      For j = 1 To p   
                                        a1 = "=product(" & FCoeff & "!R" & lig & "C" & col1 & ":" & "R" & lig & "C" & col2 & ")-1"   
                                        b1 = "=" & f1 & "!R" & lig & "C" & col1 - 1   
                                        Cells(i, co1).FormulaR1C1 = a1   
                                        Cells(i, co2).FormulaR1C1 = b1   
                                        i = i + 1   
                                        col1 = col1 - pp   
                                        col2 = col2 - pp   
                                      Next j   
                                         
                                      lig = lig + 1   
                                    Wend   
                                  


                                  - tu changes la valeur de p
                                  - et les valeurs de constantes col1 et col2 (colonnes pour l'affichge des resultats)

                                  http://www.cijoint.fr/cjlink.php?file=cj201101/cij2tl7Lkx.xls

                                  RQ1. on peut aussi passer la valeur de p en parametre à la procedure, histoire de n'avoir qu'un seul exemplaire du code
                                  RQ2. pijaku a reglé le problème de la creation des onglets donc ...

                                  bonne suite
                                  1. Merci de répondre merci à vous deux
                                    http://www.cijoint.fr/cjlink.php?file=cj201101/cijpb4ged3.xls

                                    Je veux juste une macro qui soit capable de me créer ces onglets( que j'ai appelé Cas1...cas6 mais peu importe les noms) automatiquement avec ces formules à l'interieur dépendant des 3 premières feuilles, mon idée du Offset n'est peut etre pas terrible mais peut importe la méthode ou fonction utiliser.

                                    J'ai 6 macros que j'ai lancé chacune dans un onglet que j'ai créer à la main.

                                    Mais je crois que c trop dur à faire?
                                    1. Modérateur
                                      Bon je n'ai touché à rien dans le code, je n'ai même pas cherché à en comprendre le but.
                                      Ce que j'ai fait par contre :
                                      création du module : "création onglets" dans lequel j'ai automatisé la création des feuilles et réunit les 6 macros.
                                      Vous dites...
                                      http://www.cijoint.fr/cjlink.php?file=cj201101/cijldex3Ga.xls
                                  2. Ok
                                    donc tu comprends ce que je voulais faire maintenant

                                    mais bon c peut etre impossible d'aller aussi loin dans l'automatisation.

                                    meme si raisonner en terme de L C plutot que mettre les lettres des colonnes FJ... c'était une bonne idée

                                    sinon t'as rien touché aux macros t'as juste changé dans les formules FJ en C166..... à la main.

                                    Merci quand meme d'avoir regardé
                                    1. Modérateur
                                      Bonjour vous deux,
                                      Besoin d'un coup de main?
                                      J'ai téléchargé le fichier joint à la dernière réponse de ccm81, mais honnêtement, je ne comprends pas du tout ou vous voulez en venir.
                                      Pourriez vous, si vous en avez toujours besoin, reposer votre question simplement?
                                  3. re

                                    j'ai repris ton dernier envoi
                                    en essayant d'automatiser le cas p = 3
                                    j'ai mis un bouton sur cette feuille et code la procedure
                                    MAIS il y a pb voir RQ dans le code du bouton

                                    http://www.cijoint.fr/cjlink.php?file=cj201101/cijG2lkuuj.xls

                                    tu peux toujours t'en inspirer pour les cas suivants, mais si on veut vraiment automatiser, , il faut regler le pb des tailles de paquets

                                    bonne suite
                                    1. Modérateur
                                      Salut ccm81,
                                      Avant de me pencher sur le problème en cours, je désirais attirer ton attention sur la déclaration de variables. Tu dis, dans ton code VBA ne pas être obligé de déclarer toutes les variables, car cela fonctionne. Il faut déclarer systématiquement toutes les variables utilisées dans la macro! Voici deux liens cadeaux :
                                      http://www.info-3000.com/vbvba/variableconstante.php
                                      et surtout :
                                      ftp://ftp-developpez.com/silkyroad/VBA/LesVariables/LesVariables.pdf

                                      Si tu veux être sur de ne jamais oublier de déclarer tes variables, commence systématiquement tes macros par :
                                      Option Explicit
                                      Sub ...()
                                      Cordialement,
                                  • 1
                                  • 2