Aide pour corriger code

bonjour le forum,

je sollicite votre aide pour comprendre ce qui ne va pas dans mon code.

je souhaite copier les colonnes 5 à 8 des lignes de 14 à 23 à partir de la ligne 46 si le mot "HOC" se trouve en lignes L14:L23

le code me trouve bien les résultats mais décale de 2 lignes à chaque fois.

merci d'avance.

Pedro.

Private Sub CommandButton1_Click()
    NHoc = 46
For CHoc = 5 To 8
For LHoc = 14 To 23
If Cells(LHoc, 12) = "HOC" Then
Cells(NHoc, CHoc) = Cells(LHoc, CHoc)
NHoc = NHoc + 1
    End If
  Next
Next
End Sub
5classeur1.xlsm (36.08 Ko)

Bonsoir,

En fait l'erreur est de considérée une seule cellule lors de la copie.

Vous devriez faire comme ceci :

je boucle sur la colonne 12 de la ligne 14 à 23

Si je trouve "Hoc" alors

je copie les cellules de la colonne 5 à 8 de la ligne où hoc est trouvé, dans les cellules de la colonne 5 à 8 en ligne 46.

46 passe à 47

fin de boucle.

Le soucis dans votre code, comme vous faite le test colonne après colonne, votre variable NHoc, s'incrémente à chaque fois qu'une cellule se trouve sur la même ligne qu'un Hoc.

Donc elle s'incrémente deux fois en colonne 5, puis deux fois en colonne 6 etc...

Hors elle devrait s'incrémenter que deux fois avec une copie des colonne de 5 à 8.

@ bientôt

LouReeD

Bonsoir Dudesson, bonsoir LouReeD,

En conservant l'idée des 2 boucles imbriquées :

Private Sub CommandButton1_Click()
numLigDest = 46
For numLigOri = 14 To 23
    If Cells(numLigOri, 12) = "HOC" Then
    For numColOri = 5 To 11
        Cells(numLigDest, numColOri) = Cells(numLigOri, numColOri)
    Next
    numLigDest = numLigDest + 1
    End If
Next
End Sub

Bonne soirée

Christian

Oui pourquoi pas, moi c'est la boucle sur les colonnes qui ne "ma va pas" ...

plutôt ceci :

je copie les cellules de la colonne 5 à 8 de la ligne où hoc est trouvé, dans les cellules de la colonne 5 à 8 en ligne 46.

Private Sub CommandButton1_Click()
numLigDest = 46
For numLigOri = 14 To 23
    If Cells(numLigOri, 12) = "HOC" Then Range(Cells(numLigDest, 5), Cells(numligtest, 8)) = Range(Cells(numLigOri, 5), Cells(numLigOri, 8)): numLigDest = numLigDest + 1
Next
End Sub

@ bientôt

LouReeD

Bonjour à tous,

Tout grand merci pour les explications, cest très instructif.

Mes sincères remerciements.

Pedro

RE,

je n'obtiens pas de résultat du tout après 1h de chipotage....

pouvez vous appliquer sur fichier exemple s'il bous plait?

Bonjour dudesson,

Lequel des 2 programmes ne fonctionne pas ?

Quel est le message d'erreurs ?

Sur quelle ligne ?

Bon courage

Christian

bonjour, vous avez raison. je n'ai testé que la dernière!!! ne me demandez pas pourquoi j'avais des œillères...

merci à vous 2 pour votre aide.

Bonjour,

oups mon code est faut ?!

Ce doit être du à la faute de frappe !

If Cells(numLigOri, 12) = "HOC" Then Range(Cells(numLigDest, 5), Cells(numligtest, 8)) = Range(Cells(numLigOri, 5), Cells(numLigOri, 8)): numLigDest = numLigDest + 1

la correction :

If Cells(numLigOri, 12) = "HOC" Then Range(Cells(numLigDest, 5), Cells(numLigDest, 8)) = Range(Cells(numLigOri, 5), Cells(numLigOri, 8)): numLigDest = numLigDest + 1

Enfin j'espère que c'était ça !

Sinon je serais obligé d'en conclure qu'après 21h00 il vaut mieux que j'aille me coucher !

@ bientôt

LouReeD

RE

j'avais bien repéré et corrigé cette erreur de frappe mais ce n'est pas le problème. en fait le code agit bien sur les lignes concernées apd de la 46 mais donne "" (rien) comme résultat.

en testant hier nuit, j'avais mis des données en 46:54 pour voir, et là le code me supprime les données en 46 et 47 puisqu'il y a 2 lignes avec "HOC" en L14:L23, si je mets une troisième ligne avec "HOC" en L14:L23, alors le code supprime les données en 48.

le résultat qu'il vient coller = rien ("").

Excusez moi d'insister alors que vous avez un code qui fonctionne ! Mais c'est juste pour moi !

Il faut ajouter ".Value" !

Private Sub CommandButton1_Click()
    numLigDest = 46
    For numLigOri = 14 To 23
        If Cells(numLigOri, 12) = "HOC" Then Range(Cells(numLigDest, 5), Cells(numLigDest, 8)).Value = Range(Cells(numLigOri, 5), Cells(numLigOri, 8)).Value: numLigDest = numLigDest + 1
    Next
End Sub

@ bientôt

LouReeD

bonjour, là c'est parfait!!

ça fait 2 codes qui fonctionnent ....

encore merci vous 2.

bien à vous.

Pedro.

Ha !! Je suis rassuré !

merci @ vous pour ce retour.

@ bientôt

LouReeD

Rechercher des sujets similaires à "aide corriger code"