Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

VBA : "For" dans un "If "

  • Initiateur de la discussion Initiateur de la discussion orianne40
  • Date de début Date de début

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 !

O

orianne40

Guest
Bonjour!

J'essaye d'écrire un code permettant si une valeur est présente dans une colonne de récupérer des données correspondantes sinon si'il n'y a pas la valeur je mets "no data".

J'avais écris un code du style:

Sub test()
Dim i As Integer
Dim DerLign As Integer
DerLign = Sheets(1).Range("A" & Cells.Rows.Count).End(xlUp).Row
If
For i=1 To DerLign
Sheets(2).Range("A1")=Sheets(1).Range("A3 & i)
Next i
Then
Sheets(2).Range("B1")= ...
Sheets(2).Range("C1")=...
Else
Sheets(2).Range("B1")= "NoData"
Sheets(2).Range("C1")= "NoData"
End If
End sub

Evidement ça ne marche pas, il faut la condition juste apres le If...
on ne peut donc introduire un For dans un If?

(J'ai essayé dans l'autre sens c.a.d. "For i=... If...End If... Next i" Mais j'ai toujours NoData sauf pour una valeur correspondant à la ligne Derligne)

Si quelqu'un a une suggestion...
Merci!
 
Re : VBA : "For" dans un "If "

Bonjour

Sub test()
Dim i As Integer
Dim DerLign As Integer
DerLign = Sheets(1).Range("A" & Cells.Rows.Count).End(xlUp).Row

For i=1 To DerLign

if Sheets(2).Range("A1")=Sheets(1).Range("A3 & i) Then
Sheets(2).Range("B1")= ...
Sheets(2).Range("C1")=...
Else
Sheets(2).Range("B1")= "NoData"
Sheets(2).Range("C1")= "NoData"
End If
next i
End sub
 
Re : VBA : "For" dans un "If "

Oui c'est ce que j'ai fait mais ça ne me donne pas le résultat que je souhaite,
en effet, ce code réalise une boucle jusqu'à ma derligne et si à ma dernière ligne il n'y a pas la valeur il me met "NoData" meme si la valeur est présente avant...

Je m'explique si je cherche 23 dans :
A
12
15
46
23

il me sortira les valeurs correspondantes, par contre si j'ai
A
12
45
23
46
il me mettra "NoData"

Est ce que tu aurais une autre idée??
Je pensais sinon à des Do Until mais je ne vois pas trop comment formuler ça...
 
Re : VBA : "For" dans un "If "

Salut Orianne40, Gi_Gi, le forum

utilises une boucle de test, cela devrait suffire

Cordialement

Code:
Sub Test()
Dim i As Integer
Dim DerLign As Integer, Test As Boolean
DerLign = Sheets(1).Range("A" & Cells.Rows.Count).End(xlUp).Row
For i = 1 To DerLign
If Sheets(2).Range("A1") = Sheets(1).Range("A3" & i) Then Test = True: Exit For
Next i
If Test Then
Sheets(2).Range("B1")= ...
Sheets(2).Range("C1")=...
Else
Sheets(2).Range("B1") = "NoData"
Sheets(2).Range("C1") = "NoData"
End If
End Sub
 
Re : VBA : "For" dans un "If "

bonjour,

c'est plutot ça
Code:
Sub test()
Dim i As Integer
Dim DerLign As Integer
DerLign = Sheets("Feuil1").Range("A" & Cells.Rows.Count).End(xlUp).Row

For i = 1 To DerLign

If Sheets("Feuil1").Cells(i, 1) = "" Then
Sheets("Feuil1").Cells(i, 2) = "NoData"
Sheets("Feuil1").Cells(i, 3) = "NoData"
Else
Sheets("Feuil1").Cells(i, 2) = Sheets("Feuil1").Cells(i, 1)
Sheets("Feuil1").Cells(i, 3) = Sheets("Feuil1").Cells(i, 1)

End If
Next i
End Sub
 
Re : VBA : "For" dans un "If "

Bonjour à tous,

est-ce normal, dans ta boucle, de toujours comparer avec la cellule A1 d'une autre feuille
Code:
if Sheets(2).[COLOR="Blue"]Range("A1")=[/COLOR]Sheets(1).Range("A3 & i) Then

il nous aurait été plus facile de t'aider avec un petit fichier joint

à+
 
Re : VBA : "For" dans un "If "

Bonjour,
C'est très confus

DerLign = Sheets(1).Range("A" & Cells.Rows.Count).End(xlUp).Row
If
For i=1 To DerLign
Sheets(2).Range("A1")=Sheets(1).Range("A3 & i)
Next i
Si tu veux decaler de 3 lignes
Code:
Range("A" & i + 3)

Then
Sheets(2).Range("B1")= ...
Sheets(2).Range("C1")=...
Si tu n'utilises pas la valeur de l'incrément i dans ta cellule, c'est toujours la même cellule qui est modifiée
A+
kjin
 
Re : VBA : "For" dans un "If "

Re Bonjour,

J'essai de vous faire un exemple mais il est tjs trop lourd pour que je vous l'envoie (meme compressé) mais j'y travail
en fait le numéro d'essai que je cherche est choisie à partir d'un TCD. lorsque la valeur de mon TCD change (quand on clic dessus) mon résumé d'essai en dessous se met à jour en allant chercher les données dans une autre feuille.
les noms des colonnes et des feuilles que j'ai mis au départ ne sont pas les bons...

Je vais vous mettre mon vrai code et en image mes feuilles pour que ce soit plus clair en attendant que je fasse un fichier exemple téléchargeable...

en tout cas merci!
 
Re : VBA : "For" dans un "If "

Voila les deux feuilles en questions.
Mon code actuel sur la feuille résumé est :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
resum
End Sub

Sub resum()
'REP1 recherche vitesse moyenne
Dim derniere As Integer
derniere = Sheets(1).Range("J" & Cells.Rows.Count).End(xlUp).Row
Sheets("résumé").Range("C17") = Application.WorksheetFunction.VLookup(Range("B14").Value, Sheets(1).Range("J2:N" & derniere), 2, False)
'recherche direction moyenne
Sheets("résumé").Range("C18") = Application.WorksheetFunction.VLookup(Range("B14").Value, Sheets(1).Range("J2:N" & derniere), 3, False)
'validation météo
Sheets("résumé").Range("D18") = Application.WorksheetFunction.VLookup(Range("B14").Value, Sheets(1).Range("J2:O" & derniere), 6, False)

' REP2 recherche vitesse moyenne
Sheets("résumé").Range("F17") = Application.WorksheetFunction.VLookup(Range("E14").Value, Sheets(1).Range("J2:N" & derniere), 2, False)
'recherche direction moyenne
Sheets("résumé").Range("F18") = Application.WorksheetFunction.VLookup(Range("E14").Value, Sheets(1).Range("J2:N" & derniere), 3, False)
'validation météo
Sheets("résumé").Range("G18") = Application.WorksheetFunction.VLookup(Range("E14").Value, Sheets(1).Range("J2:O" & derniere), 6, False)

' REP3 recherche vitesse moyenne
Sheets("résumé").Range("E22") = Application.WorksheetFunction.VLookup(Range("D19").Value, Sheets(1).Range("J2:N" & derniere), 2, False)
'recherche direction moyenne
Sheets("résumé").Range("E23") = Application.WorksheetFunction.VLookup(Range("D19").Value, Sheets(1).Range("J2:N" & derniere), 3, False)
'validation météo
Sheets("résumé").Range("F23") = Application.WorksheetFunction.VLookup(Range("D19").Value, Sheets(1).Range("J2:O" & derniere), 6, False)

End Sub

Et j'aimerai donc si ma valeur en B14 ou E14 ou D19 est dans ma feuille de données en colonne J qu'il aille me chercher les données sinon qu'il me marque "NoData"

J'espère que c'est plus clair...
je vous fais le fichier exemple...

merci
 

Pièces jointes

  • météo feuil1.jpg
    37.7 KB · Affichages: 104
  • feuille résumé.jpg
    28.4 KB · Affichages: 81
Re : VBA : "For" dans un "If "

Bonjour à tous
Pas clair !
Peut-être quelque chose comme ça ?
Pour comparer la cellule "A5" de la deuxième feuille à la colonne "A" de la première feuille :
Code:
Sub test2()
Dim i As Long, k As Long, v2, oCol As Long, oLig As Long
Dim z1 As Long, oTab1()
   oLig = 5 [B][COLOR="SeaGreen"]' ligne de Sheets(2) à compléter. Ici, la cellule "A8" de Sheets(2)[/COLOR][/B] sera utilisée.
   oCol = 3 [B][COLOR="SeaGreen"]' nombre de colonnes à copier.[/COLOR][/B]
   With Sheets(1): oTab1 = .Range(.Cells(1, 1), .Cells(.Cells.Rows.Count, 1).End(xlUp).Offset(0, oCol - 1)).Value: End With
   With Sheets(2)
      v2 = .Cells(oLig, 1).Value
      z1 = UBound(oTab1, 1)
      If Not IsEmpty(v2) Then
         For i = 1 To z1
            If v2 = oTab1(i, 1) Then Exit For
         Next i
         If i > z1 Then
            For k = 2 To oCol
               .Cells(oLig, 1).Offset(0, k - 1).Value = "pas de donnée"
            Next k
         Else
            For k = 2 To oCol
               .Cells(oLig, 1).Offset(0, k - 1).Value = oTab1(i, k)
            Next k
         End If
      End If
   End With
End Sub
Pour comparer toute la colonne "A" de la deuxième feuille à la colonne "A" de la première feuille :
Code:
Sub test3()
Dim i As Long, j As Long, k As Long, v2, oCol As Long
Dim z1 As Long, oTab1(), oTab2()
   oCol = 3 [B][COLOR="SeaGreen"]' nombre de colonnes à copier.[/COLOR][/B]
   With Sheets(1): oTab1 = .Range(.Cells(1, 1), .Cells(.Cells.Rows.Count, 1).End(xlUp).Offset(0, oCol - 1)).Value: End With
   With Sheets(2)
      oTab2 = .Range(.Cells(1, 1), .Cells(.Cells.Rows.Count, 1).End(xlUp)).Value
      z1 = UBound(oTab1, 1)
      For j = 1 To UBound(oTab2, 1)
         v2 = oTab2(j, 1)
         If Not IsEmpty(v2) Then
            For i = 1 To z1
               If v2 = oTab1(i, 1) Then Exit For
            Next i
            If i > z1 Then
               For k = 2 To oCol
                  .Cells(j, k).Value = "pas de donnée"
               Next k
            Else
               For k = 2 To oCol
                  .Cells(j, k).Value = oTab1(i, k)
               Next k
            End If
         End If
      Next j
   End With
End Sub
Dans les deux cas, il est fort souhaitable que la colonne "A" ne contienne pas de doublon.
Mais une question claire avec un classeur seraient les bienvenus !​
Bon courage !
ROGER2327
 
Re : VBA : "For" dans un "If "

Merci Roger,

la question en essayant d'etre le plus clair possible serait :
Comment comparer le contenu de la cellule "B14" feuille 2 avec la colonne J de la feuille 1 (aucun doublon)
et s'il y a une égalité alors je vais chercher mes valeur
sinon je marque " pas de données"
cela correpond au premier cas mais je ne comprends pas, pourquoi faut-il copier des colonnes?
 
Re : VBA : "For" dans un "If "

RE
alors je vais chercher mes valeur
Quelles valeurs ? (Quelle feuille ? Quelle(s) ligne(s) ? Quelle(s) colonne(s) ?)
Pour les mettre ? (Quelle feuille ? Quelle(s) ligne(s) ? Quelle(s) colonne(s) ?)
pourquoi faut-il copier des colonnes?
Parce que j'ai vu plus haut
Code:
(...)
Then
[COLOR="Red"]Sheets(2).Range("B1")= ...
Sheets(2).Range("C1")=...[/COLOR]
Else
[COLOR="Red"]Sheets(2).Range("B1")= "NoData"
Sheets(2).Range("C1")= "NoData"[/COLOR]
End If
(...)
ce qui me semble bien être la copie de valeurs dans des colonnes successives...
De plus, en voyant
Code:
(...)
if Sheets(2).[COLOR="Red"]Range("A1")[/COLOR]=Sheets(1).[COLOR="Red"]Range("A3 & i)[/COLOR] Then
(...)
j'ai du mal à aller chercher une cellule B14 pour la comparer avec une colonne J.
Tout cela est trop compliqué pour moi, désolé...​
ROGER2327
 
- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
15
Affichages
830
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
1 K
Réponses
5
Affichages
931
Réponses
4
Affichages
743
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…