VBA : problème dans boucle For
Résolu
Toshiii
Messages postés
10
Date d'inscription
Statut
Membre
Dernière intervention
-
Toshiii Messages postés 10 Date d'inscription Statut Membre Dernière intervention -
Toshiii Messages postés 10 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai créé une boucle For inclue dans une autre boucle For. Ces deux boucles me permettent de chercher la valeur d'une cellule dans ddifférents feuillets d'un classeur.
Le problème est lorsque je mets une valeur inexistante, je ne comprends pas pourquoi mais mon code me retourne quand même quelque chose alors que je voudrais mettre "salle inexistante".
Voici mon code (pour plus de clarté) :
'Rechercher la ligne correspondant au nom d'une salle dans une feuille
For x = 1 To 10
Workbooks("Equipements cfo.xls").Worksheets(x).Activate
For i = 458 To 5 Step -1
Cells(i, 2).Select
If Selection.Text = salle Then
Rows(i).Select
Exit For
End If
Next i
Cells(i, 2).Select
If Selection.Text = salle Then
Exit For
End If
Next x
'Extraction des lignes dans un nouveau classeur
plage = "2:2," & i & ":" & i
Range(plage).Select
Selection.Copy
Workbooks("macro.xls").Activate
Range("A3").Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
J'espère que j'ai été claire et que vous pourrez m'aider !
Merci d'avance
J'ai créé une boucle For inclue dans une autre boucle For. Ces deux boucles me permettent de chercher la valeur d'une cellule dans ddifférents feuillets d'un classeur.
Le problème est lorsque je mets une valeur inexistante, je ne comprends pas pourquoi mais mon code me retourne quand même quelque chose alors que je voudrais mettre "salle inexistante".
Voici mon code (pour plus de clarté) :
'Rechercher la ligne correspondant au nom d'une salle dans une feuille
For x = 1 To 10
Workbooks("Equipements cfo.xls").Worksheets(x).Activate
For i = 458 To 5 Step -1
Cells(i, 2).Select
If Selection.Text = salle Then
Rows(i).Select
Exit For
End If
Next i
Cells(i, 2).Select
If Selection.Text = salle Then
Exit For
End If
Next x
'Extraction des lignes dans un nouveau classeur
plage = "2:2," & i & ":" & i
Range(plage).Select
Selection.Copy
Workbooks("macro.xls").Activate
Range("A3").Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
J'espère que j'ai été claire et que vous pourrez m'aider !
Merci d'avance
A voir également:
- VBA : problème dans boucle For
- Excel compter cellule couleur sans vba - Guide
- Incompatibilité de type vba ✓ - Forum VB / VBA
- Erreur 13 incompatibilité de type VBA excel ✓ - Forum Excel
- Mkdir vba ✓ - Forum VB / VBA
- Dépassement de capacité vba ✓ - Forum Excel
4 réponses
bonjour,
que tes boucles trouvent ou non, on passe systématiquement à l'extraction !
rajoute un indicateur et donne lui (par exemple) la valeur "true" si tu trouve . et juste après tes boucles tu testes ton indicateur:
si = true alors extraction
sinon message
(n'oublie pas de mettre ton indicateur à false en début de code )
Bonne suite
que tes boucles trouvent ou non, on passe systématiquement à l'extraction !
rajoute un indicateur et donne lui (par exemple) la valeur "true" si tu trouve . et juste après tes boucles tu testes ton indicateur:
si = true alors extraction
sinon message
(n'oublie pas de mettre ton indicateur à false en début de code )
Bonne suite
bonjour,
plusieurs choses:
-en sortie de boucle le booléen est il vrai ?
-salle : est ce une variable ou bien le mot recherché ?
si c'est le mot recherché mettre entre ""
si c'est une variable le contenu est peut-être différent des valeurs recherchées (espace ....)
-.FormulaR1C1 n'est utilisé que pour attribuer des formules , ici il faudrait :
Range("D2").Value = "salle inexistante"
si toujours des problèmes, peux tu déposer ton fichier (sans données confidentielles et au format 2003) sur http://www.cijoint.fr/ et mettre le lien fourni dans un prochain post.
A+
plusieurs choses:
-en sortie de boucle le booléen est il vrai ?
-salle : est ce une variable ou bien le mot recherché ?
si c'est le mot recherché mettre entre ""
si c'est une variable le contenu est peut-être différent des valeurs recherchées (espace ....)
-.FormulaR1C1 n'est utilisé que pour attribuer des formules , ici il faudrait :
Range("D2").Value = "salle inexistante"
si toujours des problèmes, peux tu déposer ton fichier (sans données confidentielles et au format 2003) sur http://www.cijoint.fr/ et mettre le lien fourni dans un prochain post.
A+
Bnjour Paf,
j'ai essayé de faire ce que tu m'as dit :
dans ma boucle for j'ai rajouté un booléen qui se mets à TRUE si ma condition est vérifiée.
je teste cette condition à la fin de ma boucle, mais maintenant ma macro n'affiche plus rien et je ne comprends pas pourquoi !
Voici ce que j'ai fait :
Dim existence As Boolean
existence = False
'Rechercher la ligne correspondant au nom d'une salle dans une feuille
For x = 1 To 10
Workbooks("Equipements cfo.xls").Worksheets(x).Activate
For i = 458 To 5 Step -1
Cells(i, 2).Select
If Selection.Text = salle Then
existence = True
Rows(i).Select
Exit For
End If
Next i
Cells(i, 2).Select
If Selection.Text = salle Then
Exit For
End If
Next x
If existence = True Then
'Extraction des lignes dans un nouveau classeur
plage = "2:2," & i & ":" & i
Range(plage).Select
Selection.Copy
Workbooks("macro.xls").Activate
Range("A3").Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
Else
Range("D2").Select
ActiveCell.FormulaR1C1 = "salle inexistante"
End If
j'ai essayé de faire ce que tu m'as dit :
dans ma boucle for j'ai rajouté un booléen qui se mets à TRUE si ma condition est vérifiée.
je teste cette condition à la fin de ma boucle, mais maintenant ma macro n'affiche plus rien et je ne comprends pas pourquoi !
Voici ce que j'ai fait :
Dim existence As Boolean
existence = False
'Rechercher la ligne correspondant au nom d'une salle dans une feuille
For x = 1 To 10
Workbooks("Equipements cfo.xls").Worksheets(x).Activate
For i = 458 To 5 Step -1
Cells(i, 2).Select
If Selection.Text = salle Then
existence = True
Rows(i).Select
Exit For
End If
Next i
Cells(i, 2).Select
If Selection.Text = salle Then
Exit For
End If
Next x
If existence = True Then
'Extraction des lignes dans un nouveau classeur
plage = "2:2," & i & ":" & i
Range(plage).Select
Selection.Copy
Workbooks("macro.xls").Activate
Range("A3").Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
Else
Range("D2").Select
ActiveCell.FormulaR1C1 = "salle inexistante"
End If