Valeur vide

geo3701 Messages postés 58 Date d'inscription   Statut Membre Dernière intervention   -  
f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Sous VBA je déclare des variable en "string".
ma macro va dans un fichier csv, fait des tests sur les cellules, est suivant les tests, mes variables prennent les valeurs des cellules et sont reportées dans un fichier xlsm.

Donc dans un premier temps j'initialise les variables par un " ="" " , j'ai aussi essayé le " =Empty ".
Ensuite mon code fait:

phoi = Range("ad" & i).Value
met = Range("ap" & i).Value
rf = Range("ae" & i).Value
loc = Range("ag" & i).Value
lib = Range("af" & i).Value
con = Range("ah" & i).Value
com = Range("av" & i).Value
valid = Range("aa" & i).Value

If Not IsEmpty(Range("b" & i)) Then
dc = Range("b" & i).Value
End If

les 8 premières lignes sont des cellules dont je suis sûr qu'elles ne sont pas vides.
Le test en if suivant fonctionne parfaitement, lorsque c'est le tour de la Range("b" & i) et qu'elle est vide, j'ai bien le end if directement.

Arrive ensuite la phase où ma macro inscrit ces valeurs dans mon fichier xlsm.
Range("b" & DCR1).Value = ref
Range("c" & DCR1).Value = phoi
Range("d" & DCR1).Value = rf
Range("e" & DCR1).Value = loc
Range("f" & DCR1).Value = lib
Range("g" & DCR1).Value = com
Range("h" & DCR1).Value = typlo
Range("i" & DCR1).Value = met
Range("j" & DCR1).Value = con
Range("k" & DCR1).Value = valid

If Not IsEmpty(dc) Then
Range("l" & DCR1).Value = dc
End If

Les 8 premières sont tjs OK.
Par contre, le test en if ne fonctionne pas. J'ai l'impression que pour vba, une variable qu'on a initilisée à "empty" ou " "" ", finalement cette variable n'est pas "isempty"...

Help!!

Merci d'avance

4 réponses

f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
Bonjour,

Si vous mettez un point d'arret sur le end if, lancez votre programme et des qu'il s'arrete, quelle valeur a dc ?????
0
geo3701 Messages postés 58 Date d'inscription   Statut Membre Dernière intervention   1
 
il me met qu'il y a une valeur mais vide...
0
geo3701 Messages postés 58 Date d'inscription   Statut Membre Dernière intervention   1
 
en fait ça va bien comme ça, car il entre une valeur vide dans mon fichier destinataire, mais ça lui fait qd meme une action à faire...ce qui m'embête c'est qu'il dédie qqs millisec pour ça, et une action de plus fois 5000 lignes, cela augmente le tx d'erreurs
0
f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
Bonjour,

quel rapport entre qu'il dédie qqs millisec et cela augmente le tx d'erreurs ????????
0
geo3701 Messages postés 58 Date d'inscription   Statut Membre Dernière intervention   1
 
un calcul de plus itéré x fois=> ça prend plus de temps, et tu as plus de sources d'erreurs
0
f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
Re,

un calcul de plus itéré x fois oui, mais qui a ecrit le code ???

et tu as plus de sources d'erreurs si vous considerez que le fait que dc soit vide est une source d'erreur alors il faut faire en sorte qu'il ne le soit pas
0
geo3701 Messages postés 58 Date d'inscription   Statut Membre Dernière intervention   1
 
merci pour ce commentaire constructif m'apportant la solution...

c'est justement parce que je ne suis pas sûr de mon code que je demande de l'aide...
0
f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
Bonjour,
Je ne connais pas l'ensemble de votre code, mais ce n'est pas un test en plus ou en moins qui fera la difference. Si vous voulez optimiser la vitesse:

_ il faut diminuer le nombre de lignes: le VBA etant interprete ligne par ligne
exemple: 1 ligne au lieux de 9
phoi = Range("ad" & i).Value: met = Range("ap" & i).Value: rf = Range("ae" & i).Value: loc = Range("ag" & i).Value: lib = Range("af" & i).Value: con = Range("ah" & i).Value: com = Range("av" & i).Value: valid = Range("aa" & i).Value:If Not IsEmpty(Range("b" & i)) Then dc = Range("b" & i).Value

C'est ce qui etait fait il y a quelque temps (annees 1980) car les processeurs etaient plutot lents, mais maintenant ce n'est plus le cas et vous perdez le la facilite de lecture

il y a d'autres moyens pour optimiser mais en fonction du code et de l'objectif a atteindre
0