Boucle conditionnelle pour les balèzes

  • Initiateur de la discussion CC_TiGeR
  • Date de début
C

CC_TiGeR

Guest
Bonjour à tous et à toutes !!!!

Je m'en viens vous poser une question qui me parait très compliquée mais qui est peut être en fait toute simple :eek:)

Voilà le pb :

J'ai un classeur avec plusieurs pages, l'une d'elle est un formulaire qui me permet de générer une ligne sur une autre des feuilles de mon classeur appelée GLOBAL. En fait je génère une ligne qui contient plusieurs informations dont une essentielle le numéro d'offre.

Maintenant à chaque fois que je rempli mon formulaire il m'insert une nouvelle ligne dans la page GLOBAL mais le problème que j'ai sait admettons que le numéro d'offre existe déjà dans cette page à ce moment là je veux remplacer la ligne existante dans GLOBAL par la nouvelle ligne issue de mon formulaire.....

Je ne sais pas si mon explication est assez claire mais c'est la question que je pose ...

L'algorithme doit être du genre :

FOR (I=0,I<lignenonvide,I++)
{
if (numerooffreligne== numerooffreformulaire)
{
remplacer ligne par ligne issue de formulaire
}
else
{
insérer ligne issue de formulaire
}
}

J'espère que kkun pourra m'aider :eek:)

D'avance merci:eek:)

Je ne connais pas grand chose aux tests type if, else if etc ... sur vba mais si kkun peut me conseillé un endroit ou apprendre ça en plus de l'aide présente je suis partant :eek:)

Merci bcp à tous et toutes :eek:)

XXXXX


CC
 
M

Michel_M

Guest
Bonsoir Thierry, Cedric, Nicolas et le forum,

Désolé, Cedric, de mon silence (beaucoup de stress au boulot...) mais comme notre ami Thierry était dans le coup, je me faisais pas trop de soucis.


Par contre pas sûr que hyperlinks. add anchor soit accepté par Excel 97: il te faut faire le coup de l'enregistreur de macro (voir plus haut Thierry) utilisé par tout le monde qqsoit le niveau...

Allez je vais au dodo

Michel
 
C

CC_TiGeR

Guest
BONSOIR A TOUS ET TOUTES !!!!

Merci beaucoup THIERRY :eek:)

C'est super sympa ce que tu fais pour moi :eek:) Moi j'avais la tête dans le guidon mais je ne suis pas très doué comme tu l'a dis, je débute :eek:)

info006.gif


Mais bon j'aimerais beaucoup savoir faire des userforms est ce que tu pourrais me dire ou je peux trouver une aide genre XL pour les nuls au niveau de vba ??

Merci d'avance :eek:))

La récompense c'est de savoir que tout ce que j'ai réussi à faire je l'ai fait grâce au diverses questions que j'ai posées sur le forum et à ma maitrise (très limitée d'excel) .... Je suis bien meilleur en html, dhtml, php mais le vba je n'ai jamais bossé dessus alors .....

Quand tu dis ca :

Ceci dit je n'ai pas tout refait en UserForm (qui serait le plus efficace et surtout sans maintenance dans un cas comme ceci ), car le mieux pour Cédric et de savoir déjà maîtriser ce qu'il n'a déjà créé (pas mal du tout d'ailleurs)

Est ce que tu pourrais me dire comment amélioré mon fichier ?

Et donc d'après ce que j'ai compris le numéros d'offre doit être vérifié cette fois :eek:))

Il ne me reste plus qu'un pb à résoudre une fois que j'aurais compris ce que tu as fait sur le fichier :eek:)))

Le dispatching de la feuille global vers un nombre de feuille égale au nombre de vrp différents, en fait j'ai mis des postes sur ce sujet mais je n'ai pas encore de réponse satisfaisante :eek:) Si tu peux y jeter un coup d'oeil, pour toi tout à l'air si simple :eek:)

TU bosses chez XL ou koi :p ?

Pour infos je m'appelle Cédric j'ai 25 ans et je suis ingénieur TC chez SAREL filiale de =S= (schneider electric)

MERCI POUR TOUT

GROSSSSSSSSSSS BISOUXXX

CC
 
@

@+Thierry

Guest
Bonsoir Cédric, Michel, le Forum

Pour Michel, le Lien HyperText était déjà dans le fichier d'orgine de Cédric mais pas placé dans cette boucle. Donc çà doit passer sous nonante sept !

Au fait Cédric tu n'as pas répondu à ma question du 29-04-04 14:27, ceci à des fins de pouvoir aider d'autres dans ton cas qui sont (encore) sous Excel 97 et de afin de mieux gérer(connaitre) les faiblesses...

Sinon pour un UserForm, humm regarde ce que je viens de faire pour Patrick Lien supprimé

Si tu arrives à assimiler ceci, c'est pratiquement ce qu'il te faudrait, et tu n'aurais aucune formules ni-feuilles temporaires...

Pour te former... Fais une recherche dans ce Forum à :
"@+Thierry", "Userform", "Basic", (ou Rudiment)
Puis ensuite à
"@+Thierry", "DEMO UserForm", associé à un de ces mots "TextBox", ou "ComboBox", ou "ListBox" ou "CheckBox" ou "OptionButton" ou "ToggleButton" ou "MultiPage" ou "RefEdit" ou "SpinButton" ou ...."LOL"
Tu auras au mois à chaque fois une ou plusieurs de mes démos pour te familiariser avec le Control ActiveX en question...

Voilà pour commencer !! (ne pas oublier la touche [F1] aussi quand tu es sur un module VBA, tu sélectionnes un mot et tu fais [F1] tu auras une aide contextuelle et souvent des exemples...)

Tu as aussi directement deux Packages de mes Démos dans la partie téléchargement du Site à "Leçon et Exemples VBA" et bien sûr ne pas rater aussi le :

===>>...MUSEE DU FORUM...<<===

Bonne Nuit
@+Thierry
 
C

CC_TiGeR

Guest
Bonjour Thierry, bonjour le forum,


Merci bcp pour le travail accompli Thierry, ca marche super bien, maintenant je vais bosser sur les userforms voir un peu comment ca marche.

Sinon pour la réponse désolé j'avais pas fait gaffe la voilà :

Sans rien changer au fichier l’incrémentation a toujours lieu même si le numéro d’offre est déjà présent.

En supprimant la ligne On Error GoTo 0 rien ne se passe

Sinon voilà le code du find sous nonante 7

Sub Macro1()

Cells.Find(What:="gsgs", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False).Activate
End Sub


J'espère que ceci pourra éclairer tes lanternes :eek:)

En tout cas encore merci pour tout :eek:)

XXXXXXXXXXXXXXXX

CC
 
C

CC_TiGeR

Guest
Bonjour Thierry et Michel :eek:) Bonjour le forum ;o)

Encore une petite question à propose de ce fil :eek:)

J'ai regardé les démos sur les userforms c'est clairement plus simple mais pour le moment je préfère perfectionner ce que j'ai fait afin de bien le comprendre ...

Le soucis, parce qu'il y en a encore un, c'est que je voudrais qu'au moment ou une ligne est ajoutée grâce à la boucle magique de thierry, pour rappel :

With WSCible
For C = 2 To 36 'Soit de la colonne "B" à la Colonne "AJ"
.Cells(L, C) = WSSource.Cells(8, C)
Next
'En plus Cédric gère un Hyper lien aussi, donc je l'inclu dans cette boucle :
.Hyperlinks.Add Anchor:=.Range("B" & L), Address:="http://99.999.99.99/SocieteX/Cedric/Offres_de_prix/2004/" & .Range("B" & L).Text & ".doc"
End With

Bah en fait, je voudrais que les cellules B à AJ soient directement encadrées et sur fond blanc pour les mettres en valeur, j'ai essayé d'intégrer directment le code de l'enregistreur de macro mais ca ne marche pas, c'est un peu long d'ailleurs il trace les traits autour des cellules un à un .....

Est ce que vous avez des infos là dessus ?

Merci d'avance :eek:)

Pour le reste ca marche nickel j'ai placé un système de filtres pour trier les données, si ca peut intéresser kkun d'autre je mettrais le fichier légèrement modifié en dwl sur le site :eek:)

XXXXXXXXXX

Merci d'avance :eek:)

CC
 
@

@+Thierry

Guest
Bonjour Cédric, Le Fil, Le Forum

Et bien heureusement qu'on parle de boucle dans ce fil !! Car cette macro est un vrai looping !! lol

Bon alors Cedric, pour les format je te propose çà au choix :

Sub Reporting()
Dim N As Byte

'... Reste du Début de la Macro

With WSCible
For C = 2 To 36 'Soit de la colonne "B" à la Colonne "AJ"
.Cells(L, C) = WSSource.Cells(8, C)
With .Cells(L, C)
With .Interior
.ColorIndex = 2
.Pattern = xlSolid
End With

For N = 7 To 10
' For Each N In Array(7, 8, 9, 10)
' For Each N In Array(xlEdgeLeft, xlEdgeTop, xlEdgeBottom, xlEdgeRight)
With .Borders(N)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = xlAutomatic
End With
Next
End With
Next
'En plus Cédric gère un Hyper lien aussi, donc je l'inclu dans cette boucle :
.Hyperlinks.Add Anchor:=.Range("B" & L), Address:="http://99.999.99.99/SocieteX/Cedric/Offres_de_prix/2004/" & .Range("B" & L).Text & ".doc"
End With
End Sub

Pour les Border je te laisse le Choix de la Boucle avec ces explications complémentaires :

For N = 7 to 10 = N est Byte (Déclaration à faire en début de Procédure : "Dim N As Byte"

For Each N In Array(7, 8, 9, 10) (Déclaration à faire en début de Procédure : "Dim N As Variant"

For Each N In Array(xlEdgeLeft, xlEdgeTop, xlEdgeBottom, xlEdgeRight) (Idem Dim N as Variant)

Les deux dernières sont strictement identique sauf que la première montre les numéro, et la seconde les Constante "XlBordersIndex".

Voilà Bon Après Midi
@+Thierry


PS pour le "Find" d'Excel Nonante Sept ! Essaie ceci : en ajoutant un "Dim Lig As Long en début de Procédure.

WSCible.Activate
On Error Resume Next
Lig = Columns(1).Find(What:=Numero_d_Offre, After:=Range("A1"), SearchOrder:=xlByRows).Row
If Error <> 0 Then
L = Lig
End If
On Error GoTo 0


Qui remplacerait tout ceci :
L = WSCible.Range("B65536").End(xlUp).Row + 1

Set Plage = WSCible.Range("B8:B" & WSCible.Range("B65536").End(xlUp).Row)

For Each Cell In Plage
If Cell = Numero_d_Offre Then
L = Cell.Row
End If
Next

Bye
 

Discussions similaires

Réponses
21
Affichages
329
Réponses
9
Affichages
157
Réponses
7
Affichages
387
Réponses
4
Affichages
231

Statistiques des forums

Discussions
312 390
Messages
2 087 951
Membres
103 683
dernier inscrit
Cescodelvar