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

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 !

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 😀
 
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.
 
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)
 
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.
 
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é!)
 
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:
- 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

Réponses
5
Affichages
237
  • Question Question
XL 2021 VBA excel
Réponses
4
Affichages
171
Réponses
7
Affichages
250
Retour