Cette procédure est telle correcte ?

W

Willy

Guest
Bonjour à tous,

Bien que cela fonctionne, je souhaiterai savoir si la procédure ci-dessous est correcte concernant l'appel pour chaque If/Else de : For Each cell in r / Next ?
Je connais mal l'incidence de cette boucle.

If StockCategorie.Value = "AFPS / BNS" Or StockCategorie.Value = "CFAPSE" Or StockCategorie.Value = "CFAPSR" Then
For Each cell In r
tabT(i, 1) = cell.Value
tabT(i, 2) = cell.Offset(0, 1).Value
tabT(i, 3) = cell.Offset(0, 2).Value
tabT(i, 4) = cell.Offset(0, 15).Value
tabT(i, 5) = cell.Offset(0, 16).Value
tabT(i, 6) = cell.Offset(0, 17).Value
tabT(i, 7) = cell.Offset(0, 18).Value
i = i + 1
Next
Else

For Each cell In r
tabT(i, 1) = cell.Value
tabT(i, 2) = cell.Offset(0, 1).Value
tabT(i, 3) = cell.Offset(0, 2).Value
tabT(i, 4) = cell.Offset(0, 3).Value
tabT(i, 5) = cell.Offset(0, 4).Value
tabT(i, 6) = cell.Offset(0, 5).Value
tabT(i, 7) = cell.Offset(0, 168).Value
i = i + 1
Next
End If

De plus, j'ai un trou, quelle touche ou ensemble de touche permet d'indenter le code et ( ça je ne le sait pas ) comment faire pour que le code puisse suivre à la ligne suivant ?

Merci beaucoup
Willy
 
@

@+Thierry

Guest
Bonjour Willy, Zon, le Forum

Pour indenter les lignes de codes, tu as deux boutons dans la barre d'outils "Edition" de VBE : un bouton "Retrait", un bouton "Retrait Négatif". Sinon, la touche de Tabulation permet d'indenter aussi ligne par ligne.

Pour la partie de l'intégration de données dans ton Tableau "tabT" (enfin je suis même pas sûr qu'il s'agit d'un tableau !? !!, c'est quoi ce "tabT !! une Plage Nommée ? un Tableau Multidimensionnel ??? lol)

Comme dit Zon, il serait beaucoup plus simple de voir l'intégralité du code pour te répondre...

Pour l'incidence du If / Else sur ta boucle "For Each" , tu peux (sous réserve que l'on comprenne ce que tu cherches à obtenir) faire comme tu décris ci-dessus... En effet, si la condition IF est true la première boucle se déroulera, sinon (Else !) c'est la seconde boucle qui s"éxécutera... En aucun cas les deux... Donc, par conséquent, ça ne charge pas trop le calcul puisqu'une seule boucle sera appelée.

Ici, selon les apparences, tes données sont sur la même feuille, mais admettons que tu veuilles integrer les données d'une feuille variable en fonction de la condition If... Voici un moyen de faire exécuter la même structure de boucle en fonction de la condition. On notera ici la méthode employée pour faire passer les arguments dans la macro "TheBoucle"

Sub IfEndIf()
Dim TheFeuille As String, TheReponse As String
Dim TheQuestion As Byte

TheQuestion = MsgBox("Choisissez OUI ou NON", vbQuestion + vbYesNo)
TheReponse = TheQuestion

If TheQuestion = vbYes Then
TheFeuille = "Feuil1"
TheBoucle TheFeuille, TheReponse '<<< passage d'arguments
Else
TheFeuille = "Feuil2"
TheBoucle TheFeuille, TheReponse
End If
End Sub

Sub TheBoucle(TheSheet As String, TheReply As String) '<<< réception d'arguments
Dim Cell As Range
Dim r As Range
Set r = Sheets(TheSheet).Range("A1:A100")

For Each Cell In r
Cell.Value = TheReply
Next
End Sub


Hélas dans ton cas présent, çà ne semble pas applicable, car je ne vois pas de moyen de faire un algo qui permette de permutter des Offsets "15,16,17,18" vers des Offsets "3, 4, 5, 168" dans la même boucle... Mais c'était juste pour te donner un exemple...

Bonne Soirée
@+Thierry
 
W

Willy

Guest
Bonsoir Thierry, le forum,

Concernant l'indentation ( je sais pas si le mot est juste !!) je pensais qu'il existait un moyen d'indenter la procédure complète plutôt que ligne par ligne !

Concernant l'extrait de mon code, c'est vrai que c'est pas très parlant.

Mais je pense que tu m'as donné l'infos tout de même, a savoir :

je te cite :

Pour l'incidence du If / Else sur ta boucle "For Each" , tu peux (sous réserve que l'on comprenne ce que tu cherches à obtenir) faire comme tu décris ci-dessus... En effet, si la condition IF est true la première boucle se déroulera, sinon (Else !) c'est la seconde boucle qui s"éxécutera... En aucun cas les deux... Donc, par conséquent, ça ne charge pas trop le calcul puisqu'une seule boucle sera appelée.

Ha que c'est dur d'être clair quand on est newbie !!

Merci à tous et bonne soirée
Willy

Ha oui, j'oublais :
je ne sais pas comment faire pour que le code aille à la ligne suivante, je sais que c'est le signe _ et que le retour chariot se fait avec 1 ou un ensemble de touche.

Parce que j'écrit en ligne droite et c'est vraiment pas pratique pour les lignes longues.

Merci
 
@

@+Thierry

Guest
Re salut Willy, le Forum

Petite précision Willy,

Pour "l'Indentation" (on invente les mots je pense, mais ce n'est pas grave)... Avec les boutons "Retrait",et "Retrait Négatif"comme j'ai décrit plus haut, tu peux indenter tout le module d'un coup si tu as sélectionné les ligne au préalable...

Bonne Nuit
@+Thierry
 

Discussions similaires