Variable dynamique

Bonjour à tous,

Je suis débutant en VBA et je rencontre quelques problèmes pour finaliser mon code dont voici la partie qui me pose problème:

Din OldRep As String, NewRep As String,  W As String, N As Long
Din NomFich As String ' nom du fichier dinamique
Din Pname As String

N = 9
W = Sheets("TI").Range("C" & N) ' = "C9" de base ' le nom du fichier dans la colonne C ( de 9 à 14 )
NomFich = Dir (OldRep & "\" & W & "*.pdf") 

While NomFich <> "" ' Si NomFich = null => breakloop
   If ( GetAttr(OldRep & "\" & NomFich) ans vbNormal) = vbNormal then
      FileCopy OldRep & "\" & NomFich, NewRep & "\" & Pname & "\" & NomFich
      NomFich = Dir()
   End If
   N = N + 1 
Wend

Je ne sais pas si c'est normal, la variable N évolue (+1 sur chaque boucle) mais W a un résultat null à la place d'avoir ce que contenu la cellule C10 , C11 ect..

Merci d'avance pour votre temps.

Bonjour

W n'est pas modifié dans la boucle... donc reste = contenu de C9

J'y ai pensé , mais cela ne change rien, le résultat est tjrs null à la deuxième boucle.

Bonsoir,

C'est bien ce que t'a signalé Chris !

Mais voyons plus loin : l'utilisation de Dir est contradictoire avec les noms de fichiers dans des cellules !

Mais voyons plus loin : l'utilisation de Dir est contradictoire avec les noms de fichiers dans des cellules !

Je ne suis pas un expert mais ici la fonction Dir complete le nom du fichier

NomFich = Dir (OldRep & "\" & W & "*.pdf") 

Car en plus du nom du fichier ex: "RX.S3.23" qui ce trouve dans une cellule, y a une suite au nom du fichier sous forme de date "20180602" d'ou le "*.pdf" et le "Dir" permet de le completer.

Si en enlève le "Dir", le retour que j'ai dans le msgbox est le suivant : C:\test\RX.S3.23*.pdf

avec "Dir" : C:\test\RX.S3.23 20180602.pdf

RE

On te parle du Dir()

Utilisé comme cela il cherche le fichier suivant ayant le même nom que le premier "RX.S3.23*.pdf"

Donc il ne s'occupe plus de la cellule...

Je remarque que tu viens demander de l'aide mais réfutes nos remarques : soit tu nous fais confiance et cherche à les comprendre soit ce n'est pas le cas et je ne comprends pas pourquoi tu postes...

Re,

Je pense qu'il y a une mauvaise compréhension, mes excuses,

j'essaye simplement d'expliquer les résultat que je viens trouver avec et sans "Dir()" sans plus,

Je ne refutes aucunes de vos remarques, bien au contraire je suis à l'écoute.

Bonjour,

Tes explications étaient incomplètes, tout comme ton code d'ailleurs (NewRep et Pname n'y sont pas initialisées, sans parler des fautes de copie... !)

A cet égard, note-toi quelque part que lorsque tu cites du code, reproduis la procédure par copie dans le module où elle se trouve, sans exclure la déclaration (Sub... End Sub, ou autre type), et collage dans le post. Ton interlocuteur peut ainsi savoir qu'il dispose de la totalité du code de la procédure, et la copie conservant la mise en forme faite automatiquement par VBA permet en elle-même de déceler certaines erreurs. En outre, lorsqu'une procédure contient des variables de niveau module, il convient de l'indiquer en précisant leur initialisation si celle-ci n'intervient pas dans la procédure examinée.

Après ce préambule, étant frais au réveil et dans de bonnes dispositions encore, et tenant compte que tu as tout de même pris la peine de mettre ton code sous balises Code :

    Dim OldRep As String, NewRep As String, W As String, N As Long
    Dim NomFich As String
    Dim Pname As String
    N = 9
    Do While N <= 14
        W = Sheets("TI").Range("C" & N)
        NomFich = Dir(OldRep & "\" & W & "*.pdf")
        Do While NomFich <> ""
            If GetAttr(OldRep & "\" & NomFich) = vbNormal Then
                FileCopy OldRep & "\" & NomFich, NewRep & "\" & Pname & "\" & NomFich
            End If
            NomFich = Dir()
        Loop
        N = N + 1
    Loop

sous réserve de l'initialisation de NewRep et Pname, et qu'il n'y ait pas d'autres éléments omis...

Si tu ne comprends pas l'une ou l'autre des 5 modifications apportées à ton bout de code, tu demandes...

Cordialement.

Bonjour,

Le code fonctionne à merveille, merci pour ce cours.

La 1ere boucle que vous avez rajouté, permet de rafraîchir la variable W en fonction de N ( c'est ce que disait Chris ).

Pour la 2 boucle je ne comprends pas le choix du code "do ... loop" à la place de "while... wend".

Merci beaucoup

Bonsoir,

Quand j'ai débuté VBA, il y a environ 25 ans, Microsoft avait déjà fourni la boucle Do... Loop pour remplacer While... Wend, en offrant plus de possibilités, j'ai donc toujours utilisé Do... Loop, qui offre 4 modalités de sortie, plus une possibilité de sortir avec Exit Do.

Cordialement.

Rechercher des sujets similaires à "variable dynamique"