XL 2016 [RESOLU] [VBA] probleme boucle for +if then else

dupuy.mathias

XLDnaute Nouveau
Bonjour

J'ai un souci avec une boucle for avec un if à l'interieur :

Je voudrais ajouter une valeur dans la colonne J de la feuille "TELEPHONIE TEST", s'il trouve la valeur contenue dans Sheets("feuil1").Range("B11") dans la colonne B de la feuille "TELEPHONIE TEST"

Sinon

Copier différentes valeurs de feuil1 à la suite de la dernière ligne de "TELEPHONIE TEST"

sachant qui il peut y avoir des lignes vides en colonne B de "TELEPHONIE TEST"

Le souci que je rencontre est qu'il ne tient pas compte de la 1ere partie de mon "if"

Voilà mon code (je ne sais pas comment gérer les lignes vides) :

Sub TEST2()
Dim N As String
Dim i As Integer
Dim val1 As String
Dim DerLigneUtil As Integer

N = Sheets("feuil1").Range("B11")
Sheets("TELEPHONIE TEST").Activate
For i = 2 To Range("B400").End(xlUp).Row

If Sheets("TELEPHONIE TEST").Cells(i, 2).Value = N Then

val1 = Sheets("feuil1").Range("D5")
Sheets("TELEPHONIE TEST").Range("J" & i) = val1
val1 = ""

Else

val1 = Sheets("feuil1").Range("D17")
DerLigneUtil = Range("A" & Rows.Count).End(xlUp).Row + 1
Sheets("TELEPHONIE TEST").Range("A" & DerLigneUtil) = val1
val1 = ""

val1 = Sheets("feuil1").Range("B17")
Sheets("TELEPHONIE TEST").Range("B" & DerLigneUtil) = val1
val1 = ""

val1 = Sheets("feuil1").Range("C5")
Sheets("TELEPHONIE TEST").Range("C" & DerLigneUtil) = val1
val1 = ""

val1 = Sheets("feuil1").Range("C17")
Sheets("TELEPHONIE TEST").Range("D" & DerLigneUtil) = val1
val1 = ""

val1 = Sheets("feuil1").Range("E17")
Sheets("TELEPHONIE TEST").Range("F" & DerLigneUtil) = val1
val1 = ""

val1 = Sheets("feuil1").Range("C16")
Sheets("TELEPHONIE TEST").Range("G" & DerLigneUtil) = val1
val1 = ""

val1 = Sheets("feuil1").Range("B16")
Sheets("TELEPHONIE TEST").Range("H" & DerLigneUtil) = val1
val1 = ""

Exit For
End If
Next i

End Sub

Pourriez vous m'y aider svp ?

Merci
 

Pièces jointes

  • téléphonie - Copie.xlsm
    140.2 KB · Affichages: 10
Dernière édition:

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Matias,
Pour ce que j'ai compris :
On prend la valeur Sheets("feuil1").Range("B11"), on la cherche dans colonne B de TelTest,
si on la trouve on copie une valeur en colonne J,
sinon si elle n'a pas été trouvée alors en dernière ligne on met toutes les valeurs.
Si c'est ça, j'ai fait ça avec :
VB:
Sub TEST2()
Dim N As String, i As Integer, DerLigneUtil As Integer, Trouvé As Integer
Trouvé = 0
N = Sheets("feuil1").Range("B11")
Sheets("TELEPHONIE TEST").Activate
With Sheets("TELEPHONIE TEST")
    For i = 2 To .Range("B400").End(xlUp).Row
        If .Cells(i, 2).Value = N Then
            .Range("J" & i) = Sheets("feuil1").Range("D5")
            Trouvé = 1  ' 1 car N a été trouvé
        End If
    Next i
    If Trouvé = 0 Then  ' si aucune valeur n'a été trouvée alors on l'inscrit à la fin
            DerLigneUtil = .Range("A65500").End(xlUp).Row + 1
        
            .Range("A" & DerLigneUtil) = Sheets("feuil1").Range("D17")
            .Range("B" & DerLigneUtil) = Sheets("feuil1").Range("B17")
            .Range("C" & DerLigneUtil) = Sheets("feuil1").Range("C5")
            .Range("D" & DerLigneUtil) = Sheets("feuil1").Range("C17")
            .Range("F" & DerLigneUtil) = Sheets("feuil1").Range("E17")
            .Range("G" & DerLigneUtil) = Sheets("feuil1").Range("C16")
            .Range("H" & DerLigneUtil) = Sheets("feuil1").Range("B16")

    End If
End With
End Sub
NB: on peut beaucoup simplifié :
Code:
        val1 = Sheets("feuil1").Range("D17")
        DerLigneUtil = Range("A" & Rows.Count).End(xlUp).Row + 1
        Sheets("TELEPHONIE TEST").Range("A" & DerLigneUtil) = val1
        val1 = ""
par
Code:
            .Range("A" & DerLigneUtil) = Sheets("feuil1").Range("D17")
avec un with pour le nom de feuille.
 

Pièces jointes

  • téléphonie - Copie (2).xlsm
    134.2 KB · Affichages: 1

danielco

XLDnaute Accro
Bonjour,

Essaie :

VB:
Sub TEST2()
Dim N As String
Dim i As Integer
Dim val1 As String
Dim DerLigneUtil As Integer
Dim Teste As Boolean

N = Sheets("feuil1").Range("B11")
Sheets("TELEPHONIE TEST").Activate
For i = 2 To Range("B400").End(xlUp).Row
    Teste = False
    If Sheets("TELEPHONIE TEST").Cells(i, 2).Value = N Then
    
        val1 = Sheets("feuil1").Range("D5")
        Sheets("TELEPHONIE TEST").Range("J" & i) = val1
        val1 = ""
        Teste = True
        Exit For
    End If
Next i
If Teste = False Then
    val1 = Sheets("feuil1").Range("D17")
    DerLigneUtil = Range("A" & Rows.Count).End(xlUp).Row + 1
    Sheets("TELEPHONIE TEST").Range("A" & DerLigneUtil) = val1
    val1 = ""
    
    val1 = Sheets("feuil1").Range("B17")
    Sheets("TELEPHONIE TEST").Range("B" & DerLigneUtil) = val1
    val1 = ""
    
    val1 = Sheets("feuil1").Range("C5")
    Sheets("TELEPHONIE TEST").Range("C" & DerLigneUtil) = val1
    val1 = ""
            
    val1 = Sheets("feuil1").Range("C17")
    Sheets("TELEPHONIE TEST").Range("D" & DerLigneUtil) = val1
    val1 = ""
    
    val1 = Sheets("feuil1").Range("E17")
    Sheets("TELEPHONIE TEST").Range("F" & DerLigneUtil) = val1
    val1 = ""
    
    val1 = Sheets("feuil1").Range("C16")
    Sheets("TELEPHONIE TEST").Range("G" & DerLigneUtil) = val1
    val1 = ""
    
    val1 = Sheets("feuil1").Range("B16")
    Sheets("TELEPHONIE TEST").Range("H" & DerLigneUtil) = val1
    val1 = ""
End If

End Sub

Daniel
 

Nairolf

XLDnaute Accro
Salut Mathias, sylvanu et Daniel,

Je voie qu'on est en phase car on est 3 a avoir fait quasiment la même chose :
VB:
Sub TEST2()

Dim N As String
Dim i As Integer
Dim test1 As Boolean
Dim DerLigneUtil As Integer

test1 = False
N = Sheets("feuil1").Range("B11")
Sheets("TELEPHONIE TEST").Activate

For i = 2 To Range("B400").End(xlUp).Row
    If Sheets("TELEPHONIE TEST").Cells(i, 2).Value = N Then
        test1 = True
        Sheets("TELEPHONIE TEST").Range("J" & i) = Sheets("feuil1").Range("D5")
    End If
Next i

If test1 = False Then
    DerLigneUtil = Range("A" & Rows.Count).End(xlUp).Row + 1
    Sheets("TELEPHONIE TEST").Range("A" & DerLigneUtil) = Sheets("feuil1").Range("D17")
    Sheets("TELEPHONIE TEST").Range("B" & DerLigneUtil) = Sheets("feuil1").Range("B17")
    Sheets("TELEPHONIE TEST").Range("C" & DerLigneUtil) = Sheets("feuil1").Range("C5")
    Sheets("TELEPHONIE TEST").Range("D" & DerLigneUtil) = Sheets("feuil1").Range("C17")
    Sheets("TELEPHONIE TEST").Range("F" & DerLigneUtil) = Sheets("feuil1").Range("E17")
    Sheets("TELEPHONIE TEST").Range("G" & DerLigneUtil) = Sheets("feuil1").Range("C16")
    Sheets("TELEPHONIE TEST").Range("H" & DerLigneUtil) = Sheets("feuil1").Range("B16")
End If

End Sub
En plus j'avais les mêmes remarques que sylvanu.
 

Discussions similaires

  • Question
Microsoft 365 Code VBA
Réponses
10
Affichages
703
Réponses
12
Affichages
810

Membres actuellement en ligne

Statistiques des forums

Discussions
314 628
Messages
2 111 337
Membres
111 104
dernier inscrit
JEMADA