Codage d'une colonne non présente dans le tableau à partir d'autres colonnes VBA

aerozeppelin

XLDnaute Nouveau
Bonjour,

Je suis un novice en VBA et j'ai suivi quelques tutos sur internet mais maintenant qu'il s'agit de mettre tout ça en application je me heurte à quelques difficultés...

Je dispose d'environ 6000 lignes et une dizaine de colonnes et l'idée serait de coder une onzième colonne à partir des valeurs prises par chacune des colonnes à chaque ligne.

Pour éclaircir cette idée je montre la structure du code que j'avais prévu! :)

Sub codage()
Dim i As Integer
Dim a As Integer
i = 0
a = 0
While [i<6000]
If Cells(i,3)=valeur1 AND Cells(i,4)=valeur2 AND Cells(i,5)!="" THEN a=1 Cells(i, 11) = a
If Cells(i,3)=valeur1 AND Cells(i,4)=valeur21 AND Cells(i,5)="" THEN a=2 Cells(i, 11) = a
If Cells(i,3)=valeur11 AND Cells(i,4)=valeur21 AND Cells(i,5)!="" THEN a=3 Cells(i, 11) = a

i = i + 1


End Sub

Il me semble que i fait référence à la ligne et le deuxième nombre à la colonne, je change donc les valeurs de la 8ème colonne à la ligne i en fonction des autres valeurs prises à la ligne i par d'autres colonnes.
L'idée serait de parcourir tout le tableau!!

Je précise que pour moi != est l'opérateur différent de et des guillemets vides représentent simplement une cellule vide.

Merci d'avance :D
 

Dranreb

XLDnaute Barbatruc
Re : Codage d'une colonne non présente dans le tableau à partir d'autres colonnes VBA

Bonjour.

Les crochets sont réservé aux expressions constantes dont on veut faire évaluer le sens par l'application hôte, Excel en l'occurrence.
Pour VBA c'est <> qui est l'opérateur différent, et des guillemet représente une constant String vide.
Ce sera très long à l'exécution, dont la durée est presque proportionnelle au nombre de consultation ou modification de plages de nombres quelconques de cellules. En utilisant des tableaux de Variant vous pourriez n'en effectuer que 2 en tout et pour tout au lieu de 72000, donc, dans le principe, 36000 fois plus rapide.
 

aerozeppelin

XLDnaute Nouveau
Re : Codage d'une colonne non présente dans le tableau à partir d'autres colonnes VBA

Merci tout d'abord!

En ce qu'il s'agit des <> je dois placer le nom de la variable entre ces caractères ou bien à la suite.

Pour le temps d'éxécution je préfère ne pas m'y attarder tout de suite comme la compilation sera dans tous les cas supportés par l'ordinateur.

Le code est-il correct sinon? (en ce qu'il s'agit des références dans Cells des lignes et colonnes et la syntaxe des conditions/boucles)
 

Dranreb

XLDnaute Barbatruc
Re : Codage d'une colonne non présente dans le tableau à partir d'autres colonnes VBA

En ce qu'il s'agit des <> je dois placer le nom de la variable entre ces caractères ou bien à la suite.
??
VB:
… And Cells(i,5).Value <> "" …
Pour le temps d'éxécution je préfère ne pas m'y attarder tout de suite
Vous avez tort. Les bonnes habitudes se prennent dès le début, avant de commencer à en prendre de mauvaises …
Le code est-il correct sinon?
Comme expliqué While [i<6000] risquerait de tourner indéfiniment ou probablement plutôt jamais, puisque "i" ne veut sans doute rien dire à Excel auquel on demande d'évaluer une expression qui le contient.
 

aerozeppelin

XLDnaute Nouveau
Re : Codage d'une colonne non présente dans le tableau à partir d'autres colonnes VBA

J'ai corrigé les erreurs signalés un grand merci!

Voici le code obtenu:


Sub codeColonne()
Dim i As Integer
i = 0
While (i < 6710)
If Cells(i, 10).Values = "valeur1" And Cells(i, 9).Values = "valeur2" And Cells(i, 11).Values <> "" Then Cells(i, 12) = 24
i = i + 1
Wend

End Sub

Il ne tourne toujours pas cependant.

(J'ai pas tout compris dans la dernière remarque sur i :( à moins qu'il s'agissait des crochets et dans ce cas c'est corrigé!)
 

Dranreb

XLDnaute Barbatruc
Re : Codage d'une colonne non présente dans le tableau à partir d'autres colonnes VBA

Oui c'étaient les crochets. Des parenthèses à la place ne gênent pas mais sont inutiles. Il n'y a pas de ligne 0 dans une feuille, or i = 0 au 1er passage dans la boucle. Vous auriez peut être meilleur temps de faire For i = 1 to 6710 et de finir par Next i au lieu de Wend. Mais encore une fois, que ça va être long à l'exécution ! Alors que ce serait si simple de faire Dim Te() et plus loin Te = Range(Cells(1, 1), Cells(6710, 12)).Value et de ne plus travailler qu'avec Te.
Ah puis un Range n'a pas de propriété Values, c'est Value sans "s".
 
Dernière édition:

Discussions similaires

Réponses
4
Affichages
194

Statistiques des forums

Discussions
312 111
Messages
2 085 392
Membres
102 882
dernier inscrit
Sultan94